- Timestamp:
- 2017-11-21T17:21:22+01:00 (6 years ago)
- Location:
- branches/2017/dev_r8600_xios_read_write/NEMOGCM/NEMO/OPA_SRC/IOM
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_r8600_xios_read_write/NEMOGCM/NEMO/OPA_SRC/IOM/in_out_manager.F90
r8668 r8770 45 45 INTEGER :: nn_chunksz !: chunksize (bytes) for NetCDF file (works only with iom_nf90 routines) 46 46 LOGICAL :: ln_xios_read !: use xios to read single file restart 47 INTEGER :: nn_wxios !: write resart using xios 0 - no, 1 - single, 2 - multiple file output 47 48 48 49 #if defined key_netcdf4 … … 152 153 CHARACTER(lc) :: cxios_context !: context name used in xios 153 154 CHARACTER(lc) :: crxios_context !: context name used in xios to read restart 155 CHARACTER(lc) :: cwxios_context !: context name used in xios to write restart file 154 156 155 157 !!---------------------------------------------------------------------- -
branches/2017/dev_r8600_xios_read_write/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90
r8668 r8770 41 41 USE dianam ! build name of file 42 42 USE xios 43 USE iom_def, ONLY : max_rst_fields, rst_fields 43 USE iom_def, ONLY : max_rst_fields, rst_fields, rst_wfields, RST_FIELD 44 44 # endif 45 45 USE ioipsl, ONLY : ju2ymds ! for calendar 46 46 USE crs ! Grid coarsening 47 47 USE lib_fortran 48 USE diurnal_bulk, ONLY : ln_diurnal_only, ln_diurnal 48 49 49 50 IMPLICIT NONE … … 65 66 PRIVATE iom_set_domain_attr, iom_set_axis_attr, iom_set_field_attr, iom_set_file_attr, iom_get_file_attr, iom_set_grid_attr 66 67 PRIVATE set_grid, set_grid_bounds, set_scalar, set_xmlatt, set_mooring, iom_update_file_name, iom_sdate 67 PRIVATE set_rst_vars, set_rstr_active, set_rst_context 68 PRIVATE iom_set_rst_context, iom_set_rstw_active 69 PUBLIC iom_set_rstw_var_active, iom_set_rst_vars 68 70 # endif 69 71 … … 92 94 CONTAINS 93 95 94 SUBROUTINE iom_init( cdname )96 SUBROUTINE iom_init( cdname, fname ) 95 97 !!---------------------------------------------------------------------- 96 98 !! *** ROUTINE *** … … 100 102 !!---------------------------------------------------------------------- 101 103 CHARACTER(len=*), INTENT(in) :: cdname 104 CHARACTER(len=*), OPTIONAL, INTENT(in) :: fname 102 105 #if defined key_iomput 103 106 104 107 TYPE(xios_duration) :: dtime = xios_duration(0, 0, 0, 0, 0, 0) 105 108 TYPE(xios_date) :: start_date 106 CHARACTER(len= 10) :: clname109 CHARACTER(len=lc) :: clname 107 110 INTEGER :: ji, jkmin 108 111 LOGICAL :: llrst_context ! is context related to restart … … 117 120 CALL xios_context_initialize(TRIM(clname), mpi_comm_opa) 118 121 CALL iom_swap( cdname ) 119 llrst_context = (TRIM(cdname) == TRIM(crxios_context) )122 llrst_context = (TRIM(cdname) == TRIM(crxios_context) .OR. TRIM(cdname) == TRIM(cwxios_context)) 120 123 121 124 ! Calendar type is now defined in xml file … … 162 165 CALL dom_grid_glo ! Return to parent grid domain 163 166 ! 164 IF( ln_cfmeta .AND. TRIM(cdname) .NE. TRIM(crxios_context)) THEN ! Add additional grid metadata167 IF( ln_cfmeta .AND. .NOT. llrst_context) THEN ! Add additional grid metadata 165 168 CALL iom_set_domain_attr("grid_T", area = e1e2t_crs(nldi:nlei, nldj:nlej)) 166 169 CALL iom_set_domain_attr("grid_U", area = e1u_crs(nldi:nlei, nldj:nlej) * e2u_crs(nldi:nlei, nldj:nlej)) … … 206 209 ENDIF 207 210 ! automatic definitions of some of the xml attributs 208 IF( llrst_context) THEN209 !set names of the fields in restart file IF using XIOS to read /writedata211 IF( TRIM(cdname) == TRIM(crxios_context) ) THEN 212 !set names of the fields in restart file IF using XIOS to read data 210 213 CALL set_rst_context() 211 CALL set_rst_vars()214 CALL iom_set_rst_vars(rst_fields) 212 215 !set which fields are to be read from restart file 213 216 CALL set_rstr_active() 217 ELSE IF( TRIM(cdname) == TRIM(cwxios_context) ) THEN 218 !set names of the fields in restart file IF using XIOS to write data 219 CALL set_rst_context() 220 CALL iom_set_rst_vars(rst_wfields) 221 !set which fields are to be read from restart file 222 CALL iom_set_rstw_active(fname) 214 223 ELSE 215 224 CALL set_xmlatt … … 229 238 END SUBROUTINE iom_init 230 239 231 232 SUBROUTINE set_rst_vars() 233 !set names for variables in restart file 240 SUBROUTINE iom_set_rstw_var_active(field) 241 CHARACTER(len = *), INTENT(IN) :: field 234 242 INTEGER :: i 235 rst_fields(:)%vname="NO_NAME"; rst_fields(:)%grid="NO_GRID" 236 i = 0 237 i = i + 1; rst_fields(i)%vname="rdt"; rst_fields(i)% grid="grid_scalar" 238 i = i + 1; rst_fields(i)%vname="un"; rst_fields(i)% grid="grid_N_3D" 239 i = i + 1; rst_fields(i)%vname="ub"; rst_fields(i)% grid="grid_N_3D" 240 i = i + 1; rst_fields(i)%vname="vn"; rst_fields(i)% grid="grid_N_3D" 241 i = i + 1; rst_fields(i)%vname="vb"; rst_fields(i)% grid="grid_N_3D" 242 i = i + 1; rst_fields(i)%vname="tn"; rst_fields(i)% grid="grid_N_3D" 243 i = i + 1; rst_fields(i)%vname="tb"; rst_fields(i)% grid="grid_N_3D" 244 i = i + 1; rst_fields(i)%vname="sn"; rst_fields(i)% grid="grid_N_3D" 245 i = i + 1; rst_fields(i)%vname="sb"; rst_fields(i)%grid="grid_N_3D" 246 i = i + 1; rst_fields(i)%vname="sshn"; rst_fields(i)%grid="grid_N" 247 i = i + 1; rst_fields(i)%vname="sshb"; rst_fields(i)%grid="grid_N" 248 i = i + 1; rst_fields(i)%vname="rhop"; rst_fields(i)%grid="grid_N_3D" 249 i = i + 1; rst_fields(i)%vname="kt"; rst_fields(i)%grid="grid_scalar" 250 i = i + 1; rst_fields(i)%vname="ndastp"; rst_fields(i)%grid="grid_scalar" 251 i = i + 1; rst_fields(i)%vname="adatrj"; rst_fields(i)%grid="grid_scalar" 252 i = i + 1; rst_fields(i)%vname="utau_b"; rst_fields(i)%grid="grid_N" 253 i = i + 1; rst_fields(i)%vname="vtau_b"; rst_fields(i)%grid="grid_N" 254 i = i + 1; rst_fields(i)%vname="qns_b"; rst_fields(i)%grid="grid_N" 255 i = i + 1; rst_fields(i)%vname="emp_b"; rst_fields(i)%grid="grid_N" 256 i = i + 1; rst_fields(i)%vname="sfx_b"; rst_fields(i)%grid="grid_N" 257 i = i + 1; rst_fields(i)%vname="en" ; rst_fields(i)%grid="grid_N_3D" 258 i = i + 1; rst_fields(i)%vname="avt"; rst_fields(i)%grid="grid_N_3D" 259 i = i + 1; rst_fields(i)%vname="avm"; rst_fields(i)%grid="grid_N_3D" 260 i = i + 1; rst_fields(i)%vname="avmu"; rst_fields(i)%grid="grid_N_3D" 261 i = i + 1; rst_fields(i)%vname="avmv"; rst_fields(i)%grid="grid_N_3D" 262 i = i + 1; rst_fields(i)%vname="dissl"; rst_fields(i)%grid="grid_N_3D" 263 i = i + 1; rst_fields(i)%vname="sbc_hc_b"; rst_fields(i)%grid="grid_N" 264 i = i + 1; rst_fields(i)%vname="sbc_sc_b"; rst_fields(i)%grid="grid_N" 265 i = i + 1; rst_fields(i)%vname="qsr_hc_b"; rst_fields(i)%grid="grid_N_3D" 266 i = i + 1; rst_fields(i)%vname="fraqsr_1lev"; rst_fields(i)%grid="grid_N" 267 i = i + 1; rst_fields(i)%vname="greenland_icesheet_mass" 268 rst_fields(i)%grid="grid_scalar" 269 i = i + 1; rst_fields(i)%vname="greenland_icesheet_timelapsed" 270 rst_fields(i)%grid="grid_scalar" 271 i = i + 1; rst_fields(i)%vname="greenland_icesheet_mass_roc" 272 rst_fields(i)%grid="grid_scalar" 273 i = i + 1; rst_fields(i)%vname="antarctica_icesheet_mass" 274 rst_fields(i)%grid="grid_scalar" 275 i = i + 1; rst_fields(i)%vname="antarctica_icesheet_timelapsed" 276 rst_fields(i)%grid="grid_scalar" 277 i = i + 1; rst_fields(i)%vname="antarctica_icesheet_mass_roc" 278 rst_fields(i)%grid="grid_scalar" 279 i = i + 1; rst_fields(i)%vname="frc_v"; rst_fields(i)%grid="grid_scalar" 280 i = i + 1; rst_fields(i)%vname="frc_t"; rst_fields(i)%grid="grid_scalar" 281 i = i + 1; rst_fields(i)%vname="frc_s"; rst_fields(i)%grid="grid_scalar" 282 i = i + 1; rst_fields(i)%vname="frc_wn_t"; rst_fields(i)%grid="grid_scalar" 283 i = i + 1; rst_fields(i)%vname="frc_wn_s"; rst_fields(i)%grid="grid_scalar" 284 i = i + 1; rst_fields(i)%vname="ssh_ini"; rst_fields(i)%grid="grid_N" 285 i = i + 1; rst_fields(i)%vname="e3t_ini"; rst_fields(i)%grid="grid_N_3D" 286 i = i + 1; rst_fields(i)%vname="hc_loc_ini"; rst_fields(i)%grid="grid_N_3D" 287 i = i + 1; rst_fields(i)%vname="sc_loc_ini"; rst_fields(i)%grid="grid_N_3D" 288 i = i + 1; rst_fields(i)%vname="ssh_hc_loc_ini"; rst_fields(i)%grid="grid_N" 289 i = i + 1; rst_fields(i)%vname="ssh_sc_loc_ini"; rst_fields(i)%grid="grid_N" 290 i = i + 1; rst_fields(i)%vname="tilde_e3t_b"; rst_fields(i)%grid="grid_N" 291 i = i + 1; rst_fields(i)%vname="tilde_e3t_n"; rst_fields(i)%grid="grid_N" 292 i = i + 1; rst_fields(i)%vname="hdiv_lf"; rst_fields(i)%grid="grid_N" 293 i = i + 1; rst_fields(i)%vname="ub2_b"; rst_fields(i)%grid="grid_N" 294 i = i + 1; rst_fields(i)%vname="vb2_b"; rst_fields(i)%grid="grid_N" 295 i = i + 1; rst_fields(i)%vname="sshbb_e"; rst_fields(i)%grid="grid_N" 296 i = i + 1; rst_fields(i)%vname="ubb_e"; rst_fields(i)%grid="grid_N" 297 i = i + 1; rst_fields(i)%vname="vbb_e"; rst_fields(i)%grid="grid_N" 298 i = i + 1; rst_fields(i)%vname="sshb_e"; rst_fields(i)%grid="grid_N" 299 i = i + 1; rst_fields(i)%vname="ub_e"; rst_fields(i)%grid="grid_N" 300 i = i + 1; rst_fields(i)%vname="vb_e"; rst_fields(i)%grid="grid_N" 301 i = i + 1; rst_fields(i)%vname="fwf_isf_b"; rst_fields(i)%grid="grid_N" 302 i = i + 1; rst_fields(i)%vname="isf_sc_b"; rst_fields(i)%grid="grid_N" 303 i = i + 1; rst_fields(i)%vname="isf_hc_b"; rst_fields(i)%grid="grid_N" 304 i = i + 1; rst_fields(i)%vname="ssh_ibb"; rst_fields(i)%grid="grid_N" 305 i = i + 1; rst_fields(i)%vname="rnf_b"; rst_fields(i)%grid="grid_N" 306 i = i + 1; rst_fields(i)%vname="rnf_hc_b"; rst_fields(i)%grid="grid_N" 307 i = i + 1; rst_fields(i)%vname="rnf_sc_b"; rst_fields(i)%grid="grid_N" 308 i = i + 1; rst_fields(i)%vname="nn_fsbc"; rst_fields(i)%grid="grid_scalar" 309 i = i + 1; rst_fields(i)%vname="ssu_m"; rst_fields(i)%grid="grid_N" 310 i = i + 1; rst_fields(i)%vname="ssv_m"; rst_fields(i)%grid="grid_N" 311 i = i + 1; rst_fields(i)%vname="sst_m"; rst_fields(i)%grid="grid_N" 312 i = i + 1; rst_fields(i)%vname="sss_m"; rst_fields(i)%grid="grid_N" 313 i = i + 1; rst_fields(i)%vname="ssh_m"; rst_fields(i)%grid="grid_N" 314 i = i + 1; rst_fields(i)%vname="e3t_m"; rst_fields(i)%grid="grid_N" 315 i = i + 1; rst_fields(i)%vname="frq_m"; rst_fields(i)%grid="grid_N" 316 i = i + 1; rst_fields(i)%vname="avmb"; rst_fields(i)%grid="grid_vector" 317 i = i + 1; rst_fields(i)%vname="avtb"; rst_fields(i)%grid="grid_vector" 318 i = i + 1; rst_fields(i)%vname="ub2_i_b"; rst_fields(i)%grid="grid_N" 319 i = i + 1; rst_fields(i)%vname="vb2_i_b"; rst_fields(i)%grid="grid_N" 320 i = i + 1; rst_fields(i)%vname="ntime"; rst_fields(i)%grid="grid_scalar" 321 i = i + 1; rst_fields(i)%vname="Dsst"; rst_fields(i)%grid="grid_scalar" 322 i = i + 1; rst_fields(i)%vname="tmask"; rst_fields(i)%grid="grid_N_3D" 323 i = i + 1; rst_fields(i)%vname="umask"; rst_fields(i)%grid="grid_N_3D" 324 i = i + 1; rst_fields(i)%vname="vmask"; rst_fields(i)%grid="grid_N_3D" 325 i = i + 1; rst_fields(i)%vname="smask"; rst_fields(i)%grid="grid_N_3D" 326 i = i + 1; rst_fields(i)%vname="gdepw_n"; rst_fields(i)%grid="grid_N_3D" 327 i = i + 1; rst_fields(i)%vname="e3t_n"; rst_fields(i)%grid="grid_N_3D" 328 i = i + 1; rst_fields(i)%vname="e3u_n"; rst_fields(i)%grid="grid_N_3D" 329 i = i + 1; rst_fields(i)%vname="e3v_n"; rst_fields(i)%grid="grid_N_3D" 330 i = i + 1; rst_fields(i)%vname="surf_ini"; rst_fields(i)%grid="grid_N" 331 i = i + 1; rst_fields(i)%vname="e3t_b"; rst_fields(i)%grid="grid_N_3D" 332 i = i + 1; rst_fields(i)%vname="e3t_n"; rst_fields(i)%grid="grid_N_3D" 333 i = i + 1; rst_fields(i)%vname="mxln"; rst_fields(i)%grid="grid_N_3D" 334 i = i + 1; rst_fields(i)%vname="e3t_m"; rst_fields(i)%grid="grid_N_3D" 335 END SUBROUTINE set_rst_vars 336 243 LOGICAL :: llis_set 244 245 llis_set = .FALSE. 246 247 DO i = 1, max_rst_fields 248 IF(TRIM(rst_wfields(i)%vname) == field) THEN 249 rst_wfields(i)%active = .TRUE. 250 llis_set = .TRUE. 251 EXIT 252 ENDIF 253 ENDDO 254 !Warn if variable is not in defined in rst_wfields 255 IF(.NOT.llis_set) THEN 256 IF(lwp) THEN 257 write(numout,cform_err) 258 write(numout,*) 'iom_set_rstw_var_active: variable ', field ,' is available for writing but not defined' 259 ENDIF 260 nstop = nstop + 1 261 ENDIF 262 263 END SUBROUTINE iom_set_rstw_var_active 337 264 338 265 SUBROUTINE set_rstr_active() … … 408 335 #endif 409 336 END SUBROUTINE set_rst_context 337 338 SUBROUTINE iom_set_rstw_core() 339 !from restart.F90 340 CALL iom_set_rstw_var_active("rdt") 341 IF ( .NOT. ln_diurnal_only ) THEN 342 CALL iom_set_rstw_var_active('ub' ) 343 CALL iom_set_rstw_var_active('vb' ) 344 CALL iom_set_rstw_var_active('tb' ) 345 CALL iom_set_rstw_var_active('sb' ) 346 CALL iom_set_rstw_var_active('sshb') 347 ! 348 CALL iom_set_rstw_var_active('un' ) 349 CALL iom_set_rstw_var_active('vn' ) 350 CALL iom_set_rstw_var_active('tn' ) 351 CALL iom_set_rstw_var_active('sn' ) 352 CALL iom_set_rstw_var_active('sshn') 353 CALL iom_set_rstw_var_active('rhop') 354 ! extra variable needed for the ice sheet coupling 355 IF ( ln_iscpl ) THEN 356 CALL iom_set_rstw_var_active('tmask') 357 CALL iom_set_rstw_var_active('umask') 358 CALL iom_set_rstw_var_active('vmask') 359 CALL iom_set_rstw_var_active('smask') 360 CALL iom_set_rstw_var_active('e3t_n') 361 CALL iom_set_rstw_var_active('e3u_n') 362 CALL iom_set_rstw_var_active('e3v_n') 363 CALL iom_set_rstw_var_active('gdepw_n') 364 END IF 365 ENDIF 366 IF(ln_diurnal) CALL iom_set_rstw_var_active('Dsst') 367 !from trasbc.F90 368 CALL iom_set_rstw_var_active('sbc_hc_b') 369 CALL iom_set_rstw_var_active('sbc_sc_b') 370 END SUBROUTINE iom_set_rstw_core 371 372 SUBROUTINE iom_set_rst_vars(fields) 373 !set names for variables in restart file 374 TYPE(RST_FIELD), INTENT(INOUT) :: fields(max_rst_fields) 375 INTEGER :: i 376 i = 0 377 i = i + 1; fields(i)%vname="rdt"; fields(i)%grid="grid_scalar" 378 i = i + 1; fields(i)%vname="un"; fields(i)%grid="grid_N_3D" 379 i = i + 1; fields(i)%vname="ub"; fields(i)%grid="grid_N_3D" 380 i = i + 1; fields(i)%vname="vn"; fields(i)%grid="grid_N_3D" 381 i = i + 1; fields(i)%vname="vb"; fields(i)%grid="grid_N_3D" 382 i = i + 1; fields(i)%vname="tn"; fields(i)%grid="grid_N_3D" 383 i = i + 1; fields(i)%vname="tb"; fields(i)%grid="grid_N_3D" 384 i = i + 1; fields(i)%vname="sn"; fields(i)%grid="grid_N_3D" 385 i = i + 1; fields(i)%vname="sb"; fields(i)%grid="grid_N_3D" 386 i = i + 1; fields(i)%vname="sshn"; fields(i)%grid="grid_N" 387 i = i + 1; fields(i)%vname="sshb"; fields(i)%grid="grid_N" 388 i = i + 1; fields(i)%vname="rhop"; fields(i)%grid="grid_N_3D" 389 i = i + 1; fields(i)%vname="kt"; fields(i)%grid="grid_scalar" 390 i = i + 1; fields(i)%vname="ndastp"; fields(i)%grid="grid_scalar" 391 i = i + 1; fields(i)%vname="adatrj"; fields(i)%grid="grid_scalar" 392 i = i + 1; fields(i)%vname="utau_b"; fields(i)%grid="grid_N" 393 i = i + 1; fields(i)%vname="vtau_b"; fields(i)%grid="grid_N" 394 i = i + 1; fields(i)%vname="qns_b"; fields(i)%grid="grid_N" 395 i = i + 1; fields(i)%vname="emp_b"; fields(i)%grid="grid_N" 396 i = i + 1; fields(i)%vname="sfx_b"; fields(i)%grid="grid_N" 397 i = i + 1; fields(i)%vname="en" ; fields(i)%grid="grid_N_3D" 398 i = i + 1; fields(i)%vname="avt"; fields(i)%grid="grid_N_3D" 399 i = i + 1; fields(i)%vname="avm"; fields(i)%grid="grid_N_3D" 400 i = i + 1; fields(i)%vname="avmu"; fields(i)%grid="grid_N_3D" 401 i = i + 1; fields(i)%vname="avmv"; fields(i)%grid="grid_N_3D" 402 i = i + 1; fields(i)%vname="dissl"; fields(i)%grid="grid_N_3D" 403 i = i + 1; fields(i)%vname="sbc_hc_b"; fields(i)%grid="grid_N" 404 i = i + 1; fields(i)%vname="sbc_sc_b"; fields(i)%grid="grid_N" 405 i = i + 1; fields(i)%vname="qsr_hc_b"; fields(i)%grid="grid_N_3D" 406 i = i + 1; fields(i)%vname="fraqsr_1lev"; fields(i)%grid="grid_N" 407 i = i + 1; fields(i)%vname="greenland_icesheet_mass" 408 fields(i)%grid="grid_scalar" 409 i = i + 1; fields(i)%vname="greenland_icesheet_timelapsed" 410 fields(i)%grid="grid_scalar" 411 i = i + 1; fields(i)%vname="greenland_icesheet_mass_roc" 412 fields(i)%grid="grid_scalar" 413 i = i + 1; fields(i)%vname="antarctica_icesheet_mass" 414 fields(i)%grid="grid_scalar" 415 i = i + 1; fields(i)%vname="antarctica_icesheet_timelapsed" 416 fields(i)%grid="grid_scalar" 417 i = i + 1; fields(i)%vname="antarctica_icesheet_mass_roc" 418 fields(i)%grid="grid_scalar" 419 i = i + 1; fields(i)%vname="frc_v"; fields(i)%grid="grid_scalar" 420 i = i + 1; fields(i)%vname="frc_t"; fields(i)%grid="grid_scalar" 421 i = i + 1; fields(i)%vname="frc_s"; fields(i)%grid="grid_scalar" 422 i = i + 1; fields(i)%vname="frc_wn_t"; fields(i)%grid="grid_scalar" 423 i = i + 1; fields(i)%vname="frc_wn_s"; fields(i)%grid="grid_scalar" 424 i = i + 1; fields(i)%vname="ssh_ini"; fields(i)%grid="grid_N" 425 i = i + 1; fields(i)%vname="e3t_ini"; fields(i)%grid="grid_N_3D" 426 i = i + 1; fields(i)%vname="hc_loc_ini"; fields(i)%grid="grid_N_3D" 427 i = i + 1; fields(i)%vname="sc_loc_ini"; fields(i)%grid="grid_N_3D" 428 i = i + 1; fields(i)%vname="ssh_hc_loc_ini"; fields(i)%grid="grid_N" 429 i = i + 1; fields(i)%vname="ssh_sc_loc_ini"; fields(i)%grid="grid_N" 430 i = i + 1; fields(i)%vname="tilde_e3t_b"; fields(i)%grid="grid_N" 431 i = i + 1; fields(i)%vname="tilde_e3t_n"; fields(i)%grid="grid_N" 432 i = i + 1; fields(i)%vname="hdiv_lf"; fields(i)%grid="grid_N" 433 i = i + 1; fields(i)%vname="ub2_b"; fields(i)%grid="grid_N" 434 i = i + 1; fields(i)%vname="vb2_b"; fields(i)%grid="grid_N" 435 i = i + 1; fields(i)%vname="sshbb_e"; fields(i)%grid="grid_N" 436 i = i + 1; fields(i)%vname="ubb_e"; fields(i)%grid="grid_N" 437 i = i + 1; fields(i)%vname="vbb_e"; fields(i)%grid="grid_N" 438 i = i + 1; fields(i)%vname="sshb_e"; fields(i)%grid="grid_N" 439 i = i + 1; fields(i)%vname="ub_e"; fields(i)%grid="grid_N" 440 i = i + 1; fields(i)%vname="vb_e"; fields(i)%grid="grid_N" 441 i = i + 1; fields(i)%vname="fwf_isf_b"; fields(i)%grid="grid_N" 442 i = i + 1; fields(i)%vname="isf_sc_b"; fields(i)%grid="grid_N" 443 i = i + 1; fields(i)%vname="isf_hc_b"; fields(i)%grid="grid_N" 444 i = i + 1; fields(i)%vname="ssh_ibb"; fields(i)%grid="grid_N" 445 i = i + 1; fields(i)%vname="rnf_b"; fields(i)%grid="grid_N" 446 i = i + 1; fields(i)%vname="rnf_hc_b"; fields(i)%grid="grid_N" 447 i = i + 1; fields(i)%vname="rnf_sc_b"; fields(i)%grid="grid_N" 448 i = i + 1; fields(i)%vname="nn_fsbc"; fields(i)%grid="grid_scalar" 449 i = i + 1; fields(i)%vname="ssu_m"; fields(i)%grid="grid_N" 450 i = i + 1; fields(i)%vname="ssv_m"; fields(i)%grid="grid_N" 451 i = i + 1; fields(i)%vname="sst_m"; fields(i)%grid="grid_N" 452 i = i + 1; fields(i)%vname="sss_m"; fields(i)%grid="grid_N" 453 i = i + 1; fields(i)%vname="ssh_m"; fields(i)%grid="grid_N" 454 i = i + 1; fields(i)%vname="e3t_m"; fields(i)%grid="grid_N" 455 i = i + 1; fields(i)%vname="frq_m"; fields(i)%grid="grid_N" 456 i = i + 1; fields(i)%vname="avmb"; fields(i)%grid="grid_vector" 457 i = i + 1; fields(i)%vname="avtb"; fields(i)%grid="grid_vector" 458 i = i + 1; fields(i)%vname="ub2_i_b"; fields(i)%grid="grid_N" 459 i = i + 1; fields(i)%vname="vb2_i_b"; fields(i)%grid="grid_N" 460 i = i + 1; fields(i)%vname="ntime"; fields(i)%grid="grid_scalar" 461 i = i + 1; fields(i)%vname="Dsst"; fields(i)%grid="grid_scalar" 462 i = i + 1; fields(i)%vname="tmask"; fields(i)%grid="grid_N_3D" 463 i = i + 1; fields(i)%vname="umask"; fields(i)%grid="grid_N_3D" 464 i = i + 1; fields(i)%vname="vmask"; fields(i)%grid="grid_N_3D" 465 i = i + 1; fields(i)%vname="smask"; fields(i)%grid="grid_N_3D" 466 i = i + 1; fields(i)%vname="gdepw_n"; fields(i)%grid="grid_N_3D" 467 i = i + 1; fields(i)%vname="e3t_n"; fields(i)%grid="grid_N_3D" 468 i = i + 1; fields(i)%vname="e3u_n"; fields(i)%grid="grid_N_3D" 469 i = i + 1; fields(i)%vname="e3v_n"; fields(i)%grid="grid_N_3D" 470 i = i + 1; fields(i)%vname="surf_ini"; fields(i)%grid="grid_N" 471 i = i + 1; fields(i)%vname="e3t_b"; fields(i)%grid="grid_N_3D" 472 i = i + 1; fields(i)%vname="mxln"; fields(i)%grid="grid_N_3D" 473 474 IF( i-1 > max_rst_fields) THEN 475 IF(lwp) write(numout,*) 'E R R O R : iom_set_rst_vars SIZE of RST_FIELD array is too small' 476 nstop = nstop + 1 477 ENDIF 478 479 END SUBROUTINE iom_set_rst_vars 480 481 482 SUBROUTINE iom_set_rstw_active(cdrst_file) 483 !sets enabled = .TRUE. for each field in restart file 484 CHARACTER(len=*) :: cdrst_file 485 #if defined key_iomput 486 TYPE(xios_field) :: field_hdl 487 TYPE(xios_file) :: file_hdl 488 TYPE(xios_filegroup) :: filegroup_hdl 489 INTEGER :: i 490 CHARACTER(lc) :: clpath 491 492 !set name of the restart file and enable available fields 493 IF(lwp) WRITE(numout,*) 'Setting restart filename (for XIOS write) to: ',cdrst_file 494 CALL xios_get_handle("file_definition", filegroup_hdl ) 495 CALL xios_add_child(filegroup_hdl, file_hdl, 'wrestart') 496 IF(nxioso.eq.1) THEN 497 CALL xios_set_file_attr( "wrestart", type="one_file", enabled=.TRUE.,& 498 mode="write", output_freq=xios_timestep) 499 if(lwp) write(numout,*) 'OPEN ', trim(cdrst_file), ' in one_file mode' 500 ELSE 501 CALL xios_set_file_attr( "wrestart", type="multiple_file", enabled=.TRUE.,& 502 mode="write", output_freq=xios_timestep) 503 if(lwp) write(numout,*) 'OPEN ', trim(cdrst_file), ' in multiple_file mode' 504 ENDIF 505 CALL xios_set_file_attr( "wrestart", name=trim(cdrst_file)) 506 !defin files for restart context 507 DO i = 1, max_rst_fields 508 IF( rst_wfields(i)%active ) THEN 509 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_wfields(i)%vname)) 510 SELECT CASE (TRIM(rst_wfields(i)%grid)) 511 CASE ("grid_N_3D") 512 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_wfields(i)%vname), & 513 domain_ref="grid_N", axis_ref="deptht", prec = 8, operation = "instant") 514 CASE ("grid_N") 515 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_wfields(i)%vname), & 516 domain_ref="grid_N", prec = 8, operation = "instant") 517 CASE ("grid_vector") 518 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_wfields(i)%vname), & 519 axis_ref="deptht", prec = 8, operation = "instant") 520 CASE ("grid_scalar") 521 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_wfields(i)%vname), & 522 scalar_ref = "grid_scalar", prec = 8, operation = "instant") 523 END SELECT 524 ENDIF 525 END DO 526 #endif 527 END SUBROUTINE iom_set_rstw_active 528 529 SUBROUTINE iom_set_rst_context( ) 530 #if defined key_iomput 531 TYPE(xios_domaingroup) :: domaingroup_hdl 532 TYPE(xios_domain) :: domain_hdl 533 TYPE(xios_axisgroup) :: axisgroup_hdl 534 TYPE(xios_axis) :: axis_hdl 535 TYPE(xios_scalar) :: scalar_hdl 536 TYPE(xios_scalargroup) :: scalargroup_hdl 537 538 CALL xios_get_handle("domain_definition",domaingroup_hdl) 539 CALL xios_add_child(domaingroup_hdl, domain_hdl, "grid_N") 540 CALL set_grid("N", glamt, gphit, .TRUE.) 541 542 CALL xios_get_handle("axis_definition",axisgroup_hdl) 543 CALL xios_add_child(axisgroup_hdl, axis_hdl, "deptht") 544 !AGRIF fails to compile when unit= is in call to xios_set_axis_attr 545 ! CALL xios_set_axis_attr( "deptht", long_name="Vertical levels", unit="m", positive="down") 546 CALL xios_set_axis_attr( "deptht", long_name="Vertical levels in meters", positive="down") 547 CALL iom_set_axis_attr( "deptht", paxis = gdept_1d ) 548 549 CALL xios_get_handle("scalar_definition", scalargroup_hdl) 550 CALL xios_add_child(scalargroup_hdl, scalar_hdl, "grid_scalar") 551 #endif 552 END SUBROUTINE iom_set_rst_context 410 553 411 554 SUBROUTINE iom_swap( cdname ) … … 1363 1506 !! INTERFACE iom_rstput 1364 1507 !!---------------------------------------------------------------------- 1365 SUBROUTINE iom_rp0d( kt, kwrite, kiomid, cdvar, pvar, ktype )1508 SUBROUTINE iom_rp0d( kt, kwrite, kiomid, cdvar, pvar, ktype, ldxios ) 1366 1509 INTEGER , INTENT(in) :: kt ! ocean time-step 1367 1510 INTEGER , INTENT(in) :: kwrite ! writing time-step … … 1370 1513 REAL(wp) , INTENT(in) :: pvar ! written field 1371 1514 INTEGER , INTENT(in), OPTIONAL :: ktype ! variable external type 1515 LOGICAL, OPTIONAL :: ldxios ! xios write flag 1516 LOGICAL :: llx ! local xios write flag 1372 1517 INTEGER :: ivid ! variable id 1373 IF( kiomid > 0 ) THEN 1374 IF( iom_file(kiomid)%nfid > 0 ) THEN 1375 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1376 SELECT CASE (iom_file(kiomid)%iolib) 1377 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r0d = pvar ) 1378 CASE DEFAULT 1379 CALL ctl_stop( 'iom_rp0d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 1380 END SELECT 1518 1519 llx = .FALSE. 1520 IF(PRESENT(ldxios)) llx = ldxios 1521 IF( llx ) THEN 1522 #ifdef key_iomput 1523 IF( kt == kwrite ) THEN 1524 IF(lwp) write(numout,*) 'RESTART: write (XIOS 0D) ',trim(cdvar) 1525 CALL xios_send_field(trim(cdvar), pvar) 1526 ENDIF 1527 #endif 1528 ELSE 1529 IF( kiomid > 0 ) THEN 1530 IF( iom_file(kiomid)%nfid > 0 ) THEN 1531 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1532 SELECT CASE (iom_file(kiomid)%iolib) 1533 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r0d = pvar ) 1534 CASE DEFAULT 1535 CALL ctl_stop( 'iom_rp0d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 1536 END SELECT 1537 ENDIF 1381 1538 ENDIF 1382 1539 ENDIF 1383 1540 END SUBROUTINE iom_rp0d 1384 1541 1385 SUBROUTINE iom_rp1d( kt, kwrite, kiomid, cdvar, pvar, ktype )1542 SUBROUTINE iom_rp1d( kt, kwrite, kiomid, cdvar, pvar, ktype, ldxios ) 1386 1543 INTEGER , INTENT(in) :: kt ! ocean time-step 1387 1544 INTEGER , INTENT(in) :: kwrite ! writing time-step … … 1390 1547 REAL(wp) , INTENT(in), DIMENSION( :) :: pvar ! written field 1391 1548 INTEGER , INTENT(in), OPTIONAL :: ktype ! variable external type 1549 LOGICAL, OPTIONAL :: ldxios ! xios write flag 1550 LOGICAL :: llx ! local xios write flag 1392 1551 INTEGER :: ivid ! variable id 1393 IF( kiomid > 0 ) THEN 1394 IF( iom_file(kiomid)%nfid > 0 ) THEN 1395 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1396 SELECT CASE (iom_file(kiomid)%iolib) 1397 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r1d = pvar ) 1398 CASE DEFAULT 1399 CALL ctl_stop( 'iom_rp1d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 1400 END SELECT 1552 1553 llx = .FALSE. 1554 IF(PRESENT(ldxios)) llx = ldxios 1555 IF( llx ) THEN 1556 #ifdef key_iomput 1557 IF( kt == kwrite ) THEN 1558 IF(lwp) write(numout,*) 'RESTART: write (XIOS 1D) ',trim(cdvar) 1559 CALL xios_send_field(trim(cdvar), pvar) 1560 ENDIF 1561 #endif 1562 ELSE 1563 IF( kiomid > 0 ) THEN 1564 IF( iom_file(kiomid)%nfid > 0 ) THEN 1565 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1566 SELECT CASE (iom_file(kiomid)%iolib) 1567 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r1d = pvar ) 1568 CASE DEFAULT 1569 CALL ctl_stop( 'iom_rp1d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 1570 END SELECT 1571 ENDIF 1401 1572 ENDIF 1402 1573 ENDIF 1403 1574 END SUBROUTINE iom_rp1d 1404 1575 1405 SUBROUTINE iom_rp2d( kt, kwrite, kiomid, cdvar, pvar, ktype )1576 SUBROUTINE iom_rp2d( kt, kwrite, kiomid, cdvar, pvar, ktype, ldxios ) 1406 1577 INTEGER , INTENT(in) :: kt ! ocean time-step 1407 1578 INTEGER , INTENT(in) :: kwrite ! writing time-step … … 1410 1581 REAL(wp) , INTENT(in), DIMENSION(:, : ) :: pvar ! written field 1411 1582 INTEGER , INTENT(in), OPTIONAL :: ktype ! variable external type 1583 LOGICAL, OPTIONAL :: ldxios ! xios write flag 1584 LOGICAL :: llx 1412 1585 INTEGER :: ivid ! variable id 1413 IF( kiomid > 0 ) THEN 1414 IF( iom_file(kiomid)%nfid > 0 ) THEN 1415 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1416 SELECT CASE (iom_file(kiomid)%iolib) 1417 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r2d = pvar ) 1418 CASE DEFAULT 1419 CALL ctl_stop( 'iom_rp2d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 1420 END SELECT 1586 1587 llx = .FALSE. 1588 IF(PRESENT(ldxios)) llx = ldxios 1589 IF( llx ) THEN 1590 #ifdef key_iomput 1591 IF( kt == kwrite ) THEN 1592 IF(lwp) write(numout,*) 'RESTART: write (XIOS 2D) ',trim(cdvar) 1593 CALL xios_send_field(trim(cdvar), pvar) 1594 ENDIF 1595 #endif 1596 ELSE 1597 IF( kiomid > 0 ) THEN 1598 IF( iom_file(kiomid)%nfid > 0 ) THEN 1599 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1600 SELECT CASE (iom_file(kiomid)%iolib) 1601 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r2d = pvar ) 1602 CASE DEFAULT 1603 CALL ctl_stop( 'iom_rp2d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 1604 END SELECT 1605 ENDIF 1421 1606 ENDIF 1422 1607 ENDIF 1423 1608 END SUBROUTINE iom_rp2d 1424 1609 1425 SUBROUTINE iom_rp3d( kt, kwrite, kiomid, cdvar, pvar, ktype )1610 SUBROUTINE iom_rp3d( kt, kwrite, kiomid, cdvar, pvar, ktype, ldxios ) 1426 1611 INTEGER , INTENT(in) :: kt ! ocean time-step 1427 1612 INTEGER , INTENT(in) :: kwrite ! writing time-step … … 1430 1615 REAL(wp) , INTENT(in), DIMENSION(:,:,:) :: pvar ! written field 1431 1616 INTEGER , INTENT(in), OPTIONAL :: ktype ! variable external type 1617 LOGICAL, OPTIONAL :: ldxios ! xios write flag 1618 LOGICAL :: llx ! local xios write flag 1432 1619 INTEGER :: ivid ! variable id 1433 IF( kiomid > 0 ) THEN 1434 IF( iom_file(kiomid)%nfid > 0 ) THEN 1435 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1436 SELECT CASE (iom_file(kiomid)%iolib) 1437 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r3d = pvar ) 1438 CASE DEFAULT 1439 CALL ctl_stop( 'iom_rp3d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 1440 END SELECT 1620 1621 llx = .FALSE. 1622 IF(PRESENT(ldxios)) llx = ldxios 1623 IF( llx ) THEN 1624 #ifdef key_iomput 1625 IF( kt == kwrite ) THEN 1626 IF(lwp) write(numout,*) 'RESTART: write (XIOS 3D) ',trim(cdvar) 1627 CALL xios_send_field(trim(cdvar), pvar) 1628 ENDIF 1629 #endif 1630 ELSE 1631 IF( kiomid > 0 ) THEN 1632 IF( iom_file(kiomid)%nfid > 0 ) THEN 1633 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1634 SELECT CASE (iom_file(kiomid)%iolib) 1635 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r3d = pvar ) 1636 CASE DEFAULT 1637 CALL ctl_stop( 'iom_rp3d: accepted IO library is only jpnf90 (jpioipsl option has been removed)' ) 1638 END SELECT 1639 ENDIF 1441 1640 ENDIF 1442 1641 ENDIF … … 1616 1815 SUBROUTINE iom_context_finalize( cdname ) 1617 1816 CHARACTER(LEN=*), INTENT(in) :: cdname 1618 ! 1619 IF( xios_is_valid_context(cdname) ) THEN 1817 CHARACTER(LEN=120) :: clname 1818 ! 1819 clname = cdname 1820 IF( TRIM(Agrif_CFixed()) .NE. '0' ) clname = TRIM(Agrif_CFixed())//"_"//clname 1821 1822 IF( xios_is_valid_context(clname) ) THEN 1620 1823 CALL iom_swap( cdname ) ! swap to cdname context 1621 1824 CALL xios_context_finalize() ! finalize the context … … 1645 1848 CALL iom_set_domain_attr("grid_"//cdgrd, ni_glo=jpiglo, nj_glo=jpjglo, ibegin=nimpp+nldi-2, jbegin=njmpp+nldj-2, ni=ni, nj=nj) 1646 1849 CALL iom_set_domain_attr("grid_"//cdgrd, data_dim=2, data_ibegin = 1-nldi, data_ni = jpi, data_jbegin = 1-nldj, data_nj = jpj) 1647 CALL iom_set_domain_attr("grid_"//cdgrd, lonvalue = RESHAPE(plon(nldi:nlei, nldj:nlej),(/ ni*nj /)), &1850 if(.NOT.ldxios) CALL iom_set_domain_attr("grid_"//cdgrd, lonvalue = RESHAPE(plon(nldi:nlei, nldj:nlej),(/ ni*nj /)), & 1648 1851 & latvalue = RESHAPE(plat(nldi:nlei, nldj:nlej),(/ ni*nj /))) 1649 1852 -
branches/2017/dev_r8600_xios_read_write/NEMOGCM/NEMO/OPA_SRC/IOM/iom_def.F90
r8631 r8770 46 46 !$AGRIF_DO_NOT_TREAT 47 47 INTEGER, PUBLIC :: iom_open_init = 0 !: used to initialize iom_file(:)%nfid to 0 48 !XIOS write restart 49 LOGICAL, PUBLIC :: lwxios !: read single file restart using XIOS 50 INTEGER, PUBLIC :: nxioso !: type of restart file when writing using XIOS 1 - single, 2 - multiple 48 51 !XIOS read restart 49 52 LOGICAL, PUBLIC :: lxios_read !: read single file restart using XIOS 50 53 LOGICAL, PUBLIC :: lxios_sini = .FALSE. ! is restart in a single file 51 54 LOGICAL, PUBLIC :: lxios_set = .FALSE. 55 56 52 57 53 58 TYPE, PUBLIC :: file_descriptor … … 70 75 END TYPE file_descriptor 71 76 TYPE(file_descriptor), DIMENSION(jpmax_files), PUBLIC :: iom_file !: array containing the info for all opened files 72 73 77 INTEGER, PARAMETER, PUBLIC :: max_rst_fields = 95 74 78 TYPE, PUBLIC :: RST_FIELD 79 CHARACTER(len=30) :: vname = "NO_NAME" ! names of variables in restart file 80 CHARACTER(len=30) :: grid = "NO_GRID" 81 LOGICAL :: active =.FALSE. ! for restart write only: true - write field, false do not write field 82 END TYPE RST_FIELD 75 83 !$AGRIF_END_DO_NOT_TREAT 76 84 77 TYPE, PUBLIC :: RST_FIELD 78 CHARACTER(len=30) :: vname ! names of variables in restart file 79 CHARACTER(len=30) :: grid 80 END TYPE RST_FIELD 81 TYPE(RST_FIELD), PUBLIC :: rst_fields(max_rst_fields) 85 TYPE(RST_FIELD), PUBLIC :: rst_wfields(max_rst_fields), rst_fields(max_rst_fields) 82 86 83 87 !!===================================================================== -
branches/2017/dev_r8600_xios_read_write/NEMOGCM/NEMO/OPA_SRC/IOM/restart.F90
r8668 r8770 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 !
Note: See TracChangeset
for help on using the changeset viewer.