- Timestamp:
- 2020-05-20T18:53:27+02:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/dev_12905_xios_restart/src/ICE/icerst.F90
r12649 r12957 51 51 CHARACTER(len=50) :: clname ! ice output restart file name 52 52 CHARACTER(len=256) :: clpath ! full path to ice output restart file 53 CHARACTER(LEN=52) :: clpname ! ocean output restart file name including prefix for AGRIF 53 54 !!---------------------------------------------------------------------- 54 55 ! … … 80 81 ENDIF 81 82 ! 82 CALL iom_open( TRIM(clpath)//TRIM(clname), numriw, ldwrt = .TRUE., kdlev = jpl, cdcomp = 'ICE' ) 83 IF(.NOT.lwxios) THEN 84 CALL iom_open( TRIM(clpath)//TRIM(clname), numriw, ldwrt = .TRUE., kdlev = jpl, cdcomp = 'ICE' ) 85 ELSE 86 #if defined key_iomput 87 cwixios_context = "rstwi_"//TRIM(ADJUSTL(clkt)) 88 IF( TRIM(Agrif_CFixed()) == '0' ) THEN 89 clpname = clname 90 ELSE 91 clpname = TRIM(Agrif_CFixed())//"_"//clname 92 ENDIF 93 CALL iom_init( cwixios_context, TRIM(clpath)//TRIM(clpname), .false., ld_closedef = .FALSE. ) 94 CALL iom_swap( cxios_context ) 95 #else 96 clinfo = 'Can not use XIOS in rst_opn' 97 CALL ctl_stop(TRIM(clinfo)) 98 #endif 99 ENDIF 83 100 lrst_ice = .TRUE. 84 101 ENDIF … … 117 134 ! ------------------ 118 135 ! ! calendar control 119 CALL iom_rstput( iter, nitrst, numriw, 'nn_fsbc', REAL( nn_fsbc, wp ) ) ! time-step 120 CALL iom_rstput( iter, nitrst, numriw, 'kt_ice' , REAL( iter , wp ) ) ! date 136 IF( lwxios ) CALL iom_swap( cwixios_context ) 137 CALL iom_rstput( iter, nitrst, numriw, 'nn_fsbc', REAL( nn_fsbc, wp ), ldxios = lwxios ) ! time-step 138 CALL iom_rstput( iter, nitrst, numriw, 'kt_ice' , REAL( iter , wp ), ldxios = lwxios ) ! date 121 139 CALL iom_delay_rst( 'WRITE', 'ICE', numriw ) ! save only ice delayed global communication variables 122 140 123 141 ! Prognostic variables 124 CALL iom_rstput( iter, nitrst, numriw, 'v_i' , v_i 125 CALL iom_rstput( iter, nitrst, numriw, 'v_s' , v_s 126 CALL iom_rstput( iter, nitrst, numriw, 'sv_i' , sv_i 127 CALL iom_rstput( iter, nitrst, numriw, 'a_i' , a_i 128 CALL iom_rstput( iter, nitrst, numriw, 't_su' , t_su 129 CALL iom_rstput( iter, nitrst, numriw, 'u_ice', u_ice )130 CALL iom_rstput( iter, nitrst, numriw, 'v_ice', v_ice )131 CALL iom_rstput( iter, nitrst, numriw, 'oa_i' , oa_i 132 CALL iom_rstput( iter, nitrst, numriw, 'a_ip' , a_ip 133 CALL iom_rstput( iter, nitrst, numriw, 'v_ip' , v_ip 142 CALL iom_rstput( iter, nitrst, numriw, 'v_i' , v_i, ldxios = lwxios ) 143 CALL iom_rstput( iter, nitrst, numriw, 'v_s' , v_s, ldxios = lwxios ) 144 CALL iom_rstput( iter, nitrst, numriw, 'sv_i' , sv_i, ldxios = lwxios ) 145 CALL iom_rstput( iter, nitrst, numriw, 'a_i' , a_i, ldxios = lwxios ) 146 CALL iom_rstput( iter, nitrst, numriw, 't_su' , t_su, ldxios = lwxios ) 147 CALL iom_rstput( iter, nitrst, numriw, 'u_ice', u_ice, ldxios = lwxios ) 148 CALL iom_rstput( iter, nitrst, numriw, 'v_ice', v_ice, ldxios = lwxios ) 149 CALL iom_rstput( iter, nitrst, numriw, 'oa_i' , oa_i, ldxios = lwxios ) 150 CALL iom_rstput( iter, nitrst, numriw, 'a_ip' , a_ip, ldxios = lwxios ) 151 CALL iom_rstput( iter, nitrst, numriw, 'v_ip' , v_ip, ldxios = lwxios ) 134 152 ! Snow enthalpy 135 153 DO jk = 1, nlay_s … … 137 155 znam = 'e_s'//'_l'//zchar1 138 156 z3d(:,:,:) = e_s(:,:,jk,:) 139 CALL iom_rstput( iter, nitrst, numriw, znam , z3d )157 CALL iom_rstput( iter, nitrst, numriw, znam , z3d, ldxios = lwxios ) 140 158 END DO 141 159 ! Ice enthalpy … … 144 162 znam = 'e_i'//'_l'//zchar1 145 163 z3d(:,:,:) = e_i(:,:,jk,:) 146 CALL iom_rstput( iter, nitrst, numriw, znam , z3d )164 CALL iom_rstput( iter, nitrst, numriw, znam , z3d, ldxios = lwxios ) 147 165 END DO 148 166 ! fields needed for Met Office (Jules) coupling 149 167 IF( ln_cpl ) THEN 150 CALL iom_rstput( iter, nitrst, numriw, 'cnd_ice', cnd_ice ) 151 CALL iom_rstput( iter, nitrst, numriw, 't1_ice' , t1_ice ) 152 ENDIF 168 CALL iom_rstput( iter, nitrst, numriw, 'cnd_ice', cnd_ice, ldxios = lwxios ) 169 CALL iom_rstput( iter, nitrst, numriw, 't1_ice' , t1_ice, ldxios = lwxios ) 170 ENDIF 171 IF( lwxios ) CALL iom_swap( cxios_context ) 153 172 ! 154 173 … … 156 175 ! ------------------ 157 176 IF( iter == nitrst ) THEN 158 CALL iom_close( numriw ) 177 IF(.NOT.lwxios) THEN 178 CALL iom_close( numriw ) 179 ELSE 180 CALL iom_context_finalize( cwixios_context ) 181 ENDIF 159 182 lrst_ice = .FALSE. 160 183 ENDIF … … 176 199 CHARACTER(len=2) :: zchar, zchar1 177 200 REAL(wp) :: zfice, ziter 201 CHARACTER(lc) :: clpname 178 202 REAL(wp), DIMENSION(jpi,jpj,jpl) :: z3d ! 3D workspace 179 203 !!---------------------------------------------------------------------- … … 185 209 ENDIF 186 210 211 lxios_sini = .FALSE. 187 212 CALL iom_open ( TRIM(cn_icerst_indir)//'/'//cn_icerst_in, numrir ) 213 214 IF( lrxios .AND. .NOT. lxios_sini) STOP 'OCE and ICE restart must be in a single file' 215 IF(lwp) write(numout, *) 'USE XIOS to read restart: ', lrxios 216 IF(lwp) CALL FLUSH(numout) 217 IF( lrxios) THEN 218 crixios_context = 'si3_rst' 219 IF(lwp) WRITE(numout,*) 'Enable restart reading by XIOS for SI3' 220 IF( TRIM(Agrif_CFixed()) == '0' ) THEN 221 clpname = cn_icerst_in 222 ELSE 223 clpname = TRIM(Agrif_CFixed())//"_"//cn_icerst_in 224 ENDIF 225 CALL iom_init( crixios_context, fname = TRIM(cn_icerst_indir)//'/'//TRIM(clpname), ld_tmppatch = .TRUE. ) 226 ENDIF 188 227 189 228 ! test if v_i exists … … 193 232 IF( id0 > 0 ) THEN ! == case of a normal restart == ! 194 233 ! ! ------------------------------ ! 195 234 IF(lrxios) CALL iom_swap(crixios_context) 196 235 ! Time info 197 CALL iom_get( numrir, 'nn_fsbc', zfice )198 CALL iom_get( numrir, 'kt_ice' , ziter )236 CALL iom_get( numrir, 'nn_fsbc', zfice, ldxios = lrxios ) 237 CALL iom_get( numrir, 'kt_ice' , ziter, ldxios = lrxios ) 199 238 IF(lwp) WRITE(numout,*) ' read ice restart file at time step : ', ziter 200 239 IF(lwp) WRITE(numout,*) ' in any case we force it to nit000 - 1 : ', nit000 - 1 … … 211 250 212 251 ! --- mandatory fields --- ! 213 CALL iom_get( numrir, jpdom_autoglo, 'v_i' , v_i 214 CALL iom_get( numrir, jpdom_autoglo, 'v_s' , v_s 215 CALL iom_get( numrir, jpdom_autoglo, 'sv_i' , sv_i 216 CALL iom_get( numrir, jpdom_autoglo, 'a_i' , a_i 217 CALL iom_get( numrir, jpdom_autoglo, 't_su' , t_su 218 CALL iom_get( numrir, jpdom_autoglo, 'u_ice', u_ice )219 CALL iom_get( numrir, jpdom_autoglo, 'v_ice', v_ice )252 CALL iom_get( numrir, jpdom_autoglo, 'v_i' , v_i, ldxios = lrxios ) 253 CALL iom_get( numrir, jpdom_autoglo, 'v_s' , v_s, ldxios = lrxios ) 254 CALL iom_get( numrir, jpdom_autoglo, 'sv_i' , sv_i, ldxios = lrxios ) 255 CALL iom_get( numrir, jpdom_autoglo, 'a_i' , a_i, ldxios = lrxios ) 256 CALL iom_get( numrir, jpdom_autoglo, 't_su' , t_su, ldxios = lrxios ) 257 CALL iom_get( numrir, jpdom_autoglo, 'u_ice', u_ice, ldxios = lrxios ) 258 CALL iom_get( numrir, jpdom_autoglo, 'v_ice', v_ice, ldxios = lrxios ) 220 259 ! Snow enthalpy 221 260 DO jk = 1, nlay_s 222 261 WRITE(zchar1,'(I2.2)') jk 223 262 znam = 'e_s'//'_l'//zchar1 224 CALL iom_get( numrir, jpdom_autoglo, znam , z3d )263 CALL iom_get( numrir, jpdom_autoglo, znam , z3d, ldxios = lrxios ) 225 264 e_s(:,:,jk,:) = z3d(:,:,:) 226 265 END DO … … 229 268 WRITE(zchar1,'(I2.2)') jk 230 269 znam = 'e_i'//'_l'//zchar1 231 CALL iom_get( numrir, jpdom_autoglo, znam , z3d )270 CALL iom_get( numrir, jpdom_autoglo, znam , z3d, ldxios = lrxios ) 232 271 e_i(:,:,jk,:) = z3d(:,:,:) 233 272 END DO … … 236 275 id1 = iom_varid( numrir, 'oa_i' , ldstop = .FALSE. ) 237 276 IF( id1 > 0 ) THEN ! fields exist 238 CALL iom_get( numrir, jpdom_autoglo, 'oa_i', oa_i )277 CALL iom_get( numrir, jpdom_autoglo, 'oa_i', oa_i, ldxios = lrxios ) 239 278 ELSE ! start from rest 240 279 IF(lwp) WRITE(numout,*) ' ==>> previous run without ice age output then set it to zero' … … 244 283 id2 = iom_varid( numrir, 'a_ip' , ldstop = .FALSE. ) 245 284 IF( id2 > 0 ) THEN ! fields exist 246 CALL iom_get( numrir, jpdom_autoglo, 'a_ip' , a_ip )247 CALL iom_get( numrir, jpdom_autoglo, 'v_ip' , v_ip )285 CALL iom_get( numrir, jpdom_autoglo, 'a_ip' , a_ip, ldxios = lrxios ) 286 CALL iom_get( numrir, jpdom_autoglo, 'v_ip' , v_ip, ldxios = lrxios ) 248 287 ELSE ! start from rest 249 288 IF(lwp) WRITE(numout,*) ' ==>> previous run without melt ponds output then set it to zero' … … 256 295 id4 = iom_varid( numrir, 't1_ice' , ldstop = .FALSE. ) 257 296 IF( id3 > 0 .AND. id4 > 0 ) THEN ! fields exist 258 CALL iom_get( numrir, jpdom_autoglo, 'cnd_ice', cnd_ice )259 CALL iom_get( numrir, jpdom_autoglo, 't1_ice' , t1_ice 297 CALL iom_get( numrir, jpdom_autoglo, 'cnd_ice', cnd_ice, ldxios = lrxios ) 298 CALL iom_get( numrir, jpdom_autoglo, 't1_ice' , t1_ice, ldxios = lrxios ) 260 299 ELSE ! start from rest 261 300 IF(lwp) WRITE(numout,*) ' ==>> previous run without conductivity output then set it to zero' … … 266 305 267 306 CALL iom_delay_rst( 'READ', 'ICE', numrir ) ! read only ice delayed global communication variables 268 307 IF(lrxios) CALL iom_swap(cxios_context) 269 308 ! ! ---------------------------------- ! 270 309 ELSE ! == case of a simplified restart == !
Note: See TracChangeset
for help on using the changeset viewer.