- Timestamp:
- 2020-12-01T13:17:32+01:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/test_12905_xios_restart/src/OCE/IOM/iom.F90
r13750 r13934 60 60 PUBLIC iom_chkatt, iom_getatt, iom_putatt, iom_getszuld, iom_rstput, iom_delay_rst, iom_put 61 61 PUBLIC iom_use, iom_context_finalize, iom_update_file_name, iom_miss_val 62 PUBLIC iom_xios_setid 62 63 63 64 PRIVATE iom_rp0d_sp, iom_rp1d_sp, iom_rp2d_sp, iom_rp3d_sp … … 73 74 PRIVATE iom_set_rst_context, iom_set_vars_active 74 75 # endif 76 PRIVATE set_xios_context 75 77 PRIVATE iom_set_rstw_active 76 78 … … 103 105 CONTAINS 104 106 105 SUBROUTINE iom_init( cdname, fname, idfp, ld_closedef )107 SUBROUTINE iom_init( cdname, kdid, ld_closedef ) 106 108 !!---------------------------------------------------------------------- 107 109 !! *** ROUTINE *** … … 111 113 !!---------------------------------------------------------------------- 112 114 CHARACTER(len=*), INTENT(in) :: cdname 113 CHARACTER(len=*), OPTIONAL, INTENT(in) :: fname 114 INTEGER , OPTIONAL, INTENT(in) :: idfp ! pointer to netcdf file for restart reading with XIOS 115 INTEGER , OPTIONAL, INTENT(in) :: kdid 115 116 LOGICAL , OPTIONAL, INTENT(in) :: ld_closedef 116 117 #if defined key_iomput … … 141 142 CALL iom_swap( cdname ) 142 143 143 llrstr = ( TRIM(cdname) == TRIM(crxios_context)) .OR. (TRIM(cdname) == TRIM(crixios_context))144 llrstr = llrstr .OR. ( TRIM(cdname) == TRIM(crtxios_context))145 llrstr = llrstr .OR. ( TRIM(cdname) == TRIM(crsxios_context))146 147 llrstw = ( TRIM(cdname) == TRIM(cwxios_context)) .OR. (TRIM(cdname) == TRIM(cwixios_context))148 llrstw = llrstw .OR. ( TRIM(cdname) == TRIM(cwtxios_context))149 llrstw = llrstw .OR. ( TRIM(cdname) == TRIM(cwsxios_context))144 llrstr = (cdname == cr_ocerst_cxt) .OR. (cdname == cr_icerst_cxt) 145 llrstr = llrstr .OR. (cdname == cr_toprst_cxt) 146 llrstr = llrstr .OR. (cdname == cr_sedrst_cxt) 147 148 llrstw = (cdname == cw_ocerst_cxt) .OR. (cdname == cw_icerst_cxt) 149 llrstw = llrstw .OR. (cdname == cw_toprst_cxt) 150 llrstw = llrstw .OR. (cdname == cw_sedrst_cxt) 150 151 151 152 llrst_context = llrstr .OR. llrstw … … 168 169 IF(.NOT.llrst_context) CALL set_scalar 169 170 ! 170 IF( TRIM(cdname) == TRIM(cxios_context)) THEN171 IF( cdname == cxios_context ) THEN 171 172 CALL set_grid( "T", glamt, gphit, .FALSE., .FALSE. ) 172 173 CALL set_grid( "U", glamu, gphiu, .FALSE., .FALSE. ) … … 212 213 ! vertical grid definition 213 214 IF(.NOT.llrst_context) THEN 214 215 216 217 215 CALL iom_set_axis_attr( "deptht", paxis = gdept_1d ) 216 CALL iom_set_axis_attr( "depthu", paxis = gdept_1d ) 217 CALL iom_set_axis_attr( "depthv", paxis = gdept_1d ) 218 CALL iom_set_axis_attr( "depthw", paxis = gdepw_1d ) 218 219 219 220 ! ABL 220 221 222 223 224 225 226 221 IF( .NOT. ALLOCATED(ght_abl) ) THEN ! force definition for xml files (xios) 222 ALLOCATE( ght_abl(jpka), ghw_abl(jpka), e3t_abl(jpka), e3w_abl(jpka) ) ! default allocation needed by iom 223 ght_abl(:) = -1._wp ; ghw_abl(:) = -1._wp 224 e3t_abl(:) = -1._wp ; e3w_abl(:) = -1._wp 225 ENDIF 226 CALL iom_set_axis_attr( "ght_abl", ght_abl(2:jpka) ) 227 CALL iom_set_axis_attr( "ghw_abl", ghw_abl(2:jpka) ) 227 228 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 229 ! Add vertical grid bounds 230 zt_bnds(2,: ) = gdept_1d(:) 231 zt_bnds(1,2:jpk ) = gdept_1d(1:jpkm1) 232 zt_bnds(1,1 ) = gdept_1d(1) - e3w_1d(1) 233 zw_bnds(1,: ) = gdepw_1d(:) 234 zw_bnds(2,1:jpkm1) = gdepw_1d(2:jpk) 235 zw_bnds(2,jpk: ) = gdepw_1d(jpk) + e3t_1d(jpk) 236 CALL iom_set_axis_attr( "deptht", bounds=zw_bnds ) 237 CALL iom_set_axis_attr( "depthu", bounds=zw_bnds ) 238 CALL iom_set_axis_attr( "depthv", bounds=zw_bnds ) 239 CALL iom_set_axis_attr( "depthw", bounds=zt_bnds ) 240 241 ! ABL 242 za_bnds(1,:) = ghw_abl(1:jpkam1) 243 za_bnds(2,:) = ghw_abl(2:jpka ) 244 CALL iom_set_axis_attr( "ght_abl", bounds=za_bnds ) 245 za_bnds(1,:) = ght_abl(2:jpka ) 246 za_bnds(2,:) = ght_abl(2:jpka ) + e3w_abl(2:jpka) 247 CALL iom_set_axis_attr( "ghw_abl", bounds=za_bnds ) 248 249 CALL iom_set_axis_attr( "nfloat", (/ (REAL(ji,wp), ji=1,jpnfl) /) ) 249 250 # if defined key_si3 250 251 252 251 CALL iom_set_axis_attr( "ncatice", (/ (REAL(ji,wp), ji=1,jpl) /) ) 252 ! SIMIP diagnostics (4 main arctic straits) 253 CALL iom_set_axis_attr( "nstrait", (/ (REAL(ji,wp), ji=1,4) /) ) 253 254 # endif 254 255 #if defined key_top 255 256 #endif 257 258 259 260 261 262 263 264 256 IF( ALLOCATED(profsed) ) CALL iom_set_axis_attr( "profsed", paxis = profsed ) 257 #endif 258 CALL iom_set_axis_attr( "icbcla", class_num ) 259 CALL iom_set_axis_attr( "iax_20C", (/ REAL(20,wp) /) ) ! strange syntaxe and idea... 260 CALL iom_set_axis_attr( "iax_26C", (/ REAL(26,wp) /) ) ! strange syntaxe and idea... 261 CALL iom_set_axis_attr( "iax_28C", (/ REAL(28,wp) /) ) ! strange syntaxe and idea... 262 ! for diaprt, we need to define an axis which size can be 1 (default) or 5 (if the file subbasins.nc exists) 263 INQUIRE( FILE = 'subbasins.nc', EXIST = ll_exist ) 264 nbasin = 1 + 4 * COUNT( (/ll_exist/) ) 265 CALL iom_set_axis_attr( "basin" , (/ (REAL(ji,wp), ji=1,nbasin) /) ) 265 266 ENDIF 266 267 ! 267 268 ! automatic definitions of some of the xml attributs 268 269 IF(llrstr) THEN 269 IF(PRESENT(idfp)) THEN270 270 IF(PRESENT(kdid)) THEN 271 CALL iom_set_rst_context(.TRUE.) 271 272 !set which fields will be read from restart file 272 CALL iom_set_vars_active(fname, idfp)273 274 275 273 CALL iom_set_vars_active(kdid) 274 ELSE 275 CALL ctl_stop( 'iom_init:', 'restart read with XIOS: missing pointer to NETCDF file' ) 276 ENDIF 276 277 ELSE IF(llrstw) THEN 277 CALL iom_set_rstw_file(fname)278 CALL iom_set_rstw_file(iom_file(kdid)%name) 278 279 ELSE 279 280 CALL set_xmlatt 280 281 ENDIF 281 282 ! … … 301 302 !! 302 303 !!---------------------------------------------------------------------- 303 CHARACTER(len=*), OPTIONAL, INTENT(IN) :: cdname304 CHARACTER(len=*), OPTIONAL, INTENT(IN) :: cdname 304 305 #if defined key_iomput 305 LOGICAL :: llrstw306 LOGICAL :: llrstw 306 307 307 308 llrstw = .FALSE. 308 309 IF(PRESENT(cdname)) THEN 309 llrstw = ( TRIM(cdname) == TRIM(cwxios_context))310 llrstw = llrstw .OR. ( TRIM(cdname) == TRIM(cwixios_context))311 llrstw = llrstw .OR. ( TRIM(cdname) == TRIM(cwtxios_context))312 llrstw = llrstw .OR. ( TRIM(cdname) == TRIM(cwsxios_context))310 llrstw = (cdname == cw_ocerst_cxt) 311 llrstw = llrstw .OR. (cdname == cw_icerst_cxt) 312 llrstw = llrstw .OR. (cdname == cw_toprst_cxt) 313 llrstw = llrstw .OR. (cdname == cw_sedrst_cxt) 313 314 ENDIF 314 315 315 316 IF( llrstw ) THEN 316 317 !set names of the fields in restart file IF using XIOS to write data 317 318 318 CALL iom_set_rst_context(.FALSE.) 319 CALL xios_close_context_definition() 319 320 ELSE 320 321 321 CALL xios_close_context_definition() 322 CALL xios_update_calendar( 0 ) 322 323 ENDIF 323 324 #else … … 327 328 END SUBROUTINE iom_init_closedef 328 329 329 SUBROUTINE iom_set_vars_active( cdfname,idnum)330 SUBROUTINE iom_set_vars_active(idnum) 330 331 !!--------------------------------------------------------------------- 331 332 !! *** SUBROUTINE iom_set_vars_active *** … … 335 336 !! id of the file is assumed to be rrestart. 336 337 !!--------------------------------------------------------------------- 337 338 CHARACTER(len=*), INTENT(IN) :: cdfname 339 INTEGER , INTENT(IN) :: idnum 338 INTEGER, INTENT(IN) :: idnum 339 340 340 #if defined key_iomput 341 INTEGER :: ndims, nvars, natts, unlimitedDimId, dimlen, xtype,mdims 342 TYPE(xios_field) :: field_hdl 343 TYPE(xios_file) :: file_hdl 344 TYPE(xios_filegroup) :: filegroup_hdl 345 INTEGER :: dimids(4), jv,i, idim 346 CHARACTER(LEN=256) :: clinfo ! info character 347 INTEGER, ALLOCATABLE :: indimlens(:) 348 CHARACTER(LEN=nf90_max_name), ALLOCATABLE :: indimnames(:) 349 CHARACTER(LEN=nf90_max_name) :: dimname, varname 350 LOGICAL :: lmeta 351 352 meta(1) = "nav_lat" 353 meta(2) = "nav_lon" 354 meta(3) = "nav_lev" 355 meta(4) = "time_instant" 356 meta(5) = "time_instant_bounds" 357 meta(6) = "time_counter" 358 meta(7) = "time_counter_bounds" 359 meta(8) = "x" 360 meta(9) = "y" 361 meta(10) = "numcat" 362 363 clinfo = ' iom_set_vars_active, file: '//TRIM(cdfname) 341 INTEGER :: ndims, nvars, natts, unlimitedDimId, dimlen, xtype,mdims 342 TYPE(xios_field) :: field_hdl 343 TYPE(xios_file) :: file_hdl 344 TYPE(xios_filegroup) :: filegroup_hdl 345 INTEGER :: dimids(4), jv,i, idim 346 CHARACTER(LEN=256) :: clinfo ! info character 347 INTEGER, ALLOCATABLE :: indimlens(:) 348 CHARACTER(LEN=nf90_max_name), ALLOCATABLE :: indimnames(:) 349 CHARACTER(LEN=nf90_max_name) :: dimname, varname 350 INTEGER :: iln 351 CHARACTER(LEN=lc) :: fname 352 LOGICAL :: lmeta 353 !metadata in restart file for restart read with XIOS 354 INTEGER, PARAMETER :: NMETA = 10 355 CHARACTER(LEN=lc) :: meta(NMETA) 356 357 358 meta(1) = "nav_lat" 359 meta(2) = "nav_lon" 360 meta(3) = "nav_lev" 361 meta(4) = "time_instant" 362 meta(5) = "time_instant_bounds" 363 meta(6) = "time_counter" 364 meta(7) = "time_counter_bounds" 365 meta(8) = "x" 366 meta(9) = "y" 367 meta(10) = "numcat" 368 369 clinfo = ' iom_set_vars_active, file: '//TRIM(iom_file(idnum)%name) 370 371 iln = INDEX( iom_file(idnum)%name, '.nc' ) 372 !XIOS doee not need .nc 373 IF(iln > 0) THEN 374 fname = iom_file(idnum)%name(1:iln-1) 375 ELSE 376 fname = iom_file(idnum)%name 377 ENDIF 364 378 365 379 !set name of the restart file and enable available fields 366 CALL xios_get_handle("file_definition", filegroup_hdl ) 367 CALL xios_add_child(filegroup_hdl, file_hdl, 'rrestart') 368 CALL xios_set_file_attr( "rrestart", name=trim(cdfname), type="one_file", & 369 par_access="collective", enabled=.TRUE., mode="read", & 370 output_freq=xios_timestep) 371 372 CALL iom_nf90_check( nf90_inquire(idnum, ndims, nvars, natts ), clinfo ) 373 ALLOCATE(indimlens(ndims), indimnames(ndims)) 374 CALL iom_nf90_check( nf90_inquire(idnum, unlimitedDimId = unlimitedDimId ), clinfo ) 375 376 DO idim = 1, ndims 377 CALL iom_nf90_check( nf90_inquire_dimension(idnum, idim, dimname, dimlen ), clinfo ) 378 indimlens(idim) = dimlen 379 indimnames(idim) = dimname 380 ENDDO 381 382 DO jv =1, nvars 383 lmeta = .FALSE. 384 CALL iom_nf90_check( nf90_inquire_variable(idnum, jv, varname, xtype, ndims, dimids, natts ), clinfo ) 385 DO i = 1, NMETA 386 IF(TRIM(varname) == TRIM(meta(i))) THEN 387 lmeta = .TRUE. 388 ENDIF 389 ENDDO 390 IF(.NOT.lmeta) THEN 391 CALL xios_add_child(file_hdl, field_hdl, TRIM(varname)) 392 mdims = ndims 393 394 IF(ANY(dimids(1:ndims) == unlimitedDimId)) THEN 395 mdims = mdims - 1 396 ENDIF 397 398 IF(mdims == 3) THEN 399 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(varname), & 400 domain_ref="grid_N", axis_ref=TRIM(iom_axis(indimlens(dimids(mdims)))), & 401 prec = 8, operation = "instant") 402 ELSEIF(mdims == 2) THEN 403 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(varname), & 404 domain_ref="grid_N", prec = 8, operation = "instant") 405 ELSEIF(mdims == 1) THEN 406 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(varname), & 407 axis_ref=TRIM(iom_axis(indimlens(dimids(mdims)))), prec = 8, operation = "instant") 408 ELSEIF(mdims == 0) THEN 409 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(varname), & 410 scalar_ref = "grid_scalar", prec = 8, operation = "instant") 411 ELSE 412 WRITE(ctmp1,*) 'iom_set_vars_active: variable ', TRIM(varname) ,' incorrect number of dimensions' 413 CALL ctl_stop( 'iom_set_vars_active:', ctmp1 ) 414 ENDIF 380 CALL xios_get_handle("file_definition", filegroup_hdl ) 381 CALL xios_add_child(filegroup_hdl, file_hdl, 'rrestart') 382 CALL xios_set_file_attr( "rrestart", name=fname, type="one_file", & 383 par_access="collective", enabled=.TRUE., mode="read", & 384 output_freq=xios_timestep ) 385 386 CALL iom_nf90_check( nf90_inquire(iom_file(idnum)%nfid, ndims, nvars, natts ), clinfo ) 387 ALLOCATE(indimlens(ndims), indimnames(ndims)) 388 CALL iom_nf90_check( nf90_inquire(iom_file(idnum)%nfid, unlimitedDimId = unlimitedDimId ), clinfo ) 389 390 DO idim = 1, ndims 391 CALL iom_nf90_check( nf90_inquire_dimension(iom_file(idnum)%nfid, idim, dimname, dimlen ), clinfo ) 392 indimlens(idim) = dimlen 393 indimnames(idim) = dimname 394 ENDDO 395 396 DO jv =1, nvars 397 lmeta = .FALSE. 398 CALL iom_nf90_check( nf90_inquire_variable(iom_file(idnum)%nfid, jv, varname, xtype, ndims, dimids, natts ), clinfo ) 399 DO i = 1, NMETA 400 IF(varname == meta(i)) THEN 401 lmeta = .TRUE. 402 ENDIF 403 ENDDO 404 IF(.NOT.lmeta) THEN 405 CALL xios_add_child(file_hdl, field_hdl, varname) 406 mdims = ndims 407 408 IF(ANY(dimids(1:ndims) == unlimitedDimId)) THEN 409 mdims = mdims - 1 415 410 ENDIF 416 ENDDO 417 DEALLOCATE(indimlens, indimnames) 411 412 IF(mdims == 3) THEN 413 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = varname, & 414 domain_ref="grid_N", & 415 axis_ref=iom_axis(indimlens(dimids(mdims))), & 416 prec = 8, operation = "instant" ) 417 ELSEIF(mdims == 2) THEN 418 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = varname, & 419 domain_ref="grid_N", prec = 8, & 420 operation = "instant" ) 421 ELSEIF(mdims == 1) THEN 422 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = varname, & 423 axis_ref=iom_axis(indimlens(dimids(mdims))), & 424 prec = 8, operation = "instant" ) 425 ELSEIF(mdims == 0) THEN 426 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = varname, & 427 scalar_ref = "grid_scalar", prec = 8, & 428 operation = "instant" ) 429 ELSE 430 WRITE(ctmp1,*) 'iom_set_vars_active: variable ', TRIM(varname) ,' incorrect number of dimensions' 431 CALL ctl_stop( 'iom_set_vars_active:', ctmp1 ) 432 ENDIF 433 ENDIF 434 ENDDO 435 DEALLOCATE(indimlens, indimnames) 418 436 #endif 419 437 END SUBROUTINE iom_set_vars_active … … 425 443 !! ** Purpose : define file name in XIOS context for writing restart 426 444 !!--------------------------------------------------------------------- 427 CHARACTER(len=*) :: cdrst_file445 CHARACTER(len=*) :: cdrst_file 428 446 #if defined key_iomput 429 TYPE(xios_file) :: file_hdl 430 TYPE(xios_filegroup) :: filegroup_hdl 431 INTEGER :: i 432 CHARACTER(lc) :: clpath 447 TYPE(xios_file) :: file_hdl 448 TYPE(xios_filegroup) :: filegroup_hdl 433 449 434 450 !set name of the restart file and enable available fields 435 IF(lwp) WRITE(numout,*) 'Setting restart filename (for XIOS write) to: ',cdrst_file436 437 438 439 440 mode="write", output_freq=xios_timestep)441 if(lwp) write(numout,*) 'OPEN ', trim(cdrst_file), ' in one_file mode'442 443 444 mode="write", output_freq=xios_timestep)445 if(lwp) write(numout,*) 'OPEN ', trim(cdrst_file), ' in multiple_file mode'446 447 451 IF(lwp) WRITE(numout,*) 'Setting restart filename (for XIOS write) to: ', TRIM(cdrst_file) 452 CALL xios_get_handle("file_definition", filegroup_hdl ) 453 CALL xios_add_child(filegroup_hdl, file_hdl, 'wrestart') 454 IF(nxioso.eq.1) THEN 455 CALL xios_set_file_attr( "wrestart", type="one_file", enabled=.TRUE.,& 456 mode="write", output_freq=xios_timestep) 457 IF(lwp) write(numout,*) 'OPEN ', trim(cdrst_file), ' in one_file mode' 458 ELSE 459 CALL xios_set_file_attr( "wrestart", type="multiple_file", enabled=.TRUE.,& 460 mode="write", output_freq=xios_timestep) 461 IF(lwp) write(numout,*) 'OPEN ', trim(cdrst_file), ' in multiple_file mode' 462 ENDIF 463 CALL xios_set_file_attr( "wrestart", name=trim(cdrst_file)) 448 464 #endif 449 465 END SUBROUTINE iom_set_rstw_file … … 458 474 !!--------------------------------------------------------------------- 459 475 !sets enabled = .TRUE. for each field in restart file 460 CHARACTER(len = *), INTENT(IN) :: sdfield461 REAL(dp), OPTIONAL, INTENT(IN) :: rd0462 REAL(sp), OPTIONAL, INTENT(IN) :: rs0463 REAL(dp), OPTIONAL, INTENT(IN), DIMENSION(:) :: rd1464 REAL(sp), OPTIONAL, INTENT(IN), DIMENSION(:) :: rs1465 REAL(dp), OPTIONAL, INTENT(IN), DIMENSION(:, :) :: rd2466 REAL(sp), OPTIONAL, INTENT(IN), DIMENSION(:, :) :: rs2467 REAL(dp), OPTIONAL, INTENT(IN), DIMENSION(:, :, :) :: rd3468 REAL(sp), OPTIONAL, INTENT(IN), DIMENSION(:, :, :) :: rs3476 CHARACTER(len = *), INTENT(IN) :: sdfield 477 REAL(dp), OPTIONAL, INTENT(IN) :: rd0 478 REAL(sp), OPTIONAL, INTENT(IN) :: rs0 479 REAL(dp), OPTIONAL, INTENT(IN), DIMENSION(:) :: rd1 480 REAL(sp), OPTIONAL, INTENT(IN), DIMENSION(:) :: rs1 481 REAL(dp), OPTIONAL, INTENT(IN), DIMENSION(:, :) :: rd2 482 REAL(sp), OPTIONAL, INTENT(IN), DIMENSION(:, :) :: rs2 483 REAL(dp), OPTIONAL, INTENT(IN), DIMENSION(:, :, :) :: rd3 484 REAL(sp), OPTIONAL, INTENT(IN), DIMENSION(:, :, :) :: rs3 469 485 #if defined key_iomput 470 TYPE(xios_field) :: field_hdl 471 TYPE(xios_file) :: file_hdl 472 INTEGER :: i 473 CHARACTER(lc) :: clpath 474 CHARACTER(len=1024) :: fname 475 CHARACTER(len=lc) :: axis_ref 476 477 CALL xios_get_handle("wrestart", file_hdl) 486 TYPE(xios_field) :: field_hdl 487 TYPE(xios_file) :: file_hdl 488 489 CALL xios_get_handle("wrestart", file_hdl) 478 490 !define fields for restart context 479 CALL xios_add_child(file_hdl, field_hdl, TRIM(sdfield)) 480 481 IF(PRESENT(rd3)) THEN 482 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(sdfield), & 483 domain_ref="grid_N", axis_ref=TRIM(iom_axis(size(rd3, 3))), & 484 prec = 8, operation = "instant") 485 ELSEIF(PRESENT(rs3)) THEN 486 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(sdfield), & 487 domain_ref="grid_N", axis_ref=TRIM(iom_axis(size(rd3, 3))), & 488 prec = 4, operation = "instant") 489 ELSEIF(PRESENT(rd2)) THEN 490 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(sdfield), & 491 domain_ref="grid_N", prec = 8, operation = "instant") 492 ELSEIF(PRESENT(rs2)) THEN 493 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(sdfield), & 494 domain_ref="grid_N", prec = 4, operation = "instant") 495 ELSEIF(PRESENT(rd1)) THEN 496 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(sdfield), & 497 axis_ref=TRIM(iom_axis(size(rd1, 1))), prec = 8, operation = "instant") 498 ELSEIF(PRESENT(rs1)) THEN 499 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(sdfield), & 500 axis_ref=TRIM(iom_axis(size(rd1, 1))), prec = 4, operation = "instant") 501 ELSEIF(PRESENT(rd0)) THEN 502 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(sdfield), & 503 scalar_ref = "grid_scalar", prec = 8, operation = "instant") 504 ELSEIF(PRESENT(rs0)) THEN 505 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(sdfield), & 506 scalar_ref = "grid_scalar", prec = 4, operation = "instant") 507 ENDIF 491 CALL xios_add_child(file_hdl, field_hdl, sdfield) 492 493 IF(PRESENT(rd3)) THEN 494 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = sdfield, & 495 domain_ref = "grid_N", & 496 axis_ref = iom_axis(size(rd3, 3)), & 497 prec = 8, operation = "instant" ) 498 ELSEIF(PRESENT(rs3)) THEN 499 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = sdfield, & 500 domain_ref = "grid_N", & 501 axis_ref = iom_axis(size(rd3, 3)), & 502 prec = 4, operation = "instant" ) 503 ELSEIF(PRESENT(rd2)) THEN 504 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = sdfield, & 505 domain_ref = "grid_N", prec = 8, & 506 operation = "instant" ) 507 ELSEIF(PRESENT(rs2)) THEN 508 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = sdfield, & 509 domain_ref = "grid_N", prec = 4, & 510 operation = "instant" ) 511 ELSEIF(PRESENT(rd1)) THEN 512 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = sdfield, & 513 axis_ref = iom_axis(size(rd1, 1)), & 514 prec = 8, operation = "instant" ) 515 ELSEIF(PRESENT(rs1)) THEN 516 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = sdfield, & 517 axis_ref = iom_axis(size(rd1, 1)), & 518 prec = 4, operation = "instant" ) 519 ELSEIF(PRESENT(rd0)) THEN 520 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = sdfield, & 521 scalar_ref = "grid_scalar", prec = 8, & 522 operation = "instant" ) 523 ELSEIF(PRESENT(rs0)) THEN 524 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = sdfield, & 525 scalar_ref = "grid_scalar", prec = 4, & 526 operation = "instant" ) 527 ENDIF 508 528 #endif 509 529 END SUBROUTINE iom_set_rstw_active 510 530 511 531 FUNCTION iom_axis(idlev) result(axis_ref) 512 !!---------------------------------------------------------------------532 !!--------------------------------------------------------------------- 513 533 !! *** FUNCTION iom_axis *** 514 534 !! … … 518 538 !! iom_set_rst_context 519 539 !!--------------------------------------------------------------------- 520 INTEGER, INTENT(IN) :: idlev521 CHARACTER(len=lc) :: axis_ref522 CHARACTER(len=12) :: str523 540 INTEGER, INTENT(IN) :: idlev 541 CHARACTER(len=lc) :: axis_ref 542 CHARACTER(len=12) :: str 543 IF(idlev == jpk) THEN 524 544 axis_ref="nav_lev" 525 545 #if defined key_si3 526 546 ELSEIF(idlev == jpl) THEN 527 547 axis_ref="numcat" 528 548 #endif 529 549 ELSE 530 550 write(str, *) idlev 531 551 CALL ctl_stop( 'iom_axis', 'Definition for axis with '//TRIM(ADJUSTL(str))//' levels missing') 532 552 ENDIF 533 553 END FUNCTION iom_axis 534 554 555 FUNCTION iom_xios_setid(cdname) result(kid) 556 !!--------------------------------------------------------------------- 557 !! *** FUNCTION *** 558 !! 559 !! ** Purpose : this function returns first available id to keep information about file 560 !! sets filename in iom_file structure and sets name 561 !! of XIOS context depending on cdcomp 562 !! corresponds to iom_nf90_open 563 !!--------------------------------------------------------------------- 564 CHARACTER(len=*), INTENT(in ) :: cdname ! File name 565 INTEGER :: kid ! identifier of the opened file 566 INTEGER :: jl 567 568 kid = 0 569 DO jl = jpmax_files, 1, -1 570 IF( iom_file(jl)%nfid == 0 ) kid = jl 571 ENDDO 572 573 iom_file(kid)%name = TRIM(cdname) 574 iom_file(kid)%nfid = 1 575 iom_file(kid)%nvars = 0 576 iom_file(kid)%irec = -1 577 578 END FUNCTION iom_xios_setid 579 535 580 SUBROUTINE iom_set_rst_context(ld_rstr) 536 !!---------------------------------------------------------------------581 !!--------------------------------------------------------------------- 537 582 !! *** SUBROUTINE iom_set_rst_context *** 538 583 !! … … 541 586 !! 542 587 !!--------------------------------------------------------------------- 543 LOGICAL, INTENT(IN) :: ld_rstr544 INTEGER :: ji588 LOGICAL, INTENT(IN) :: ld_rstr 589 INTEGER :: ji 545 590 #if defined key_iomput 546 TYPE(xios_domaingroup) :: domaingroup_hdl547 TYPE(xios_domain) :: domain_hdl548 TYPE(xios_axisgroup) :: axisgroup_hdl549 TYPE(xios_axis) :: axis_hdl550 TYPE(xios_scalar) :: scalar_hdl551 TYPE(xios_scalargroup) :: scalargroup_hdl552 553 CALL xios_get_handle("domain_definition",domaingroup_hdl)554 CALL xios_add_child(domaingroup_hdl, domain_hdl, "grid_N")555 CALL set_grid("N", glamt, gphit, .TRUE., ld_rstr)591 TYPE(xios_domaingroup) :: domaingroup_hdl 592 TYPE(xios_domain) :: domain_hdl 593 TYPE(xios_axisgroup) :: axisgroup_hdl 594 TYPE(xios_axis) :: axis_hdl 595 TYPE(xios_scalar) :: scalar_hdl 596 TYPE(xios_scalargroup) :: scalargroup_hdl 597 598 CALL xios_get_handle("domain_definition",domaingroup_hdl) 599 CALL xios_add_child(domaingroup_hdl, domain_hdl, "grid_N") 600 CALL set_grid("N", glamt, gphit, .TRUE., ld_rstr) 556 601 557 CALL xios_get_handle("axis_definition",axisgroup_hdl)558 CALL xios_add_child(axisgroup_hdl, axis_hdl, "nav_lev")602 CALL xios_get_handle("axis_definition",axisgroup_hdl) 603 CALL xios_add_child(axisgroup_hdl, axis_hdl, "nav_lev") 559 604 !AGRIF fails to compile when unit= is in call to xios_set_axis_attr 560 ! CALL xios_set_axis_attr( "nav_lev", long_name="Vertical levels", unit="m", positive="down")561 CALL xios_set_axis_attr( "nav_lev", long_name="Vertical levels in meters", positive="down")562 CALL iom_set_axis_attr( "nav_lev", paxis = gdept_1d )605 ! CALL xios_set_axis_attr( "nav_lev", long_name="Vertical levels", unit="m", positive="down") 606 CALL xios_set_axis_attr( "nav_lev", long_name = "Vertical levels in meters", positive = "down") 607 CALL iom_set_axis_attr( "nav_lev", paxis = gdept_1d ) 563 608 #if defined key_si3 564 CALL xios_add_child(axisgroup_hdl, axis_hdl, "numcat") 565 CALL iom_set_axis_attr( "numcat", (/ (REAL(ji,wp), ji=1,jpl) /) ) 566 #endif 567 568 CALL xios_get_handle("scalar_definition", scalargroup_hdl) 569 CALL xios_add_child(scalargroup_hdl, scalar_hdl, "grid_scalar") 609 CALL xios_add_child(axisgroup_hdl, axis_hdl, "numcat") 610 CALL iom_set_axis_attr( "numcat", (/ (REAL(ji,wp), ji=1,jpl) /) ) 611 #endif 612 CALL xios_get_handle("scalar_definition", scalargroup_hdl) 613 CALL xios_add_child(scalargroup_hdl, scalar_hdl, "grid_scalar") 570 614 #endif 571 615 END SUBROUTINE iom_set_rst_context 616 617 618 SUBROUTINE set_xios_context(kdid, cdcont) 619 !!--------------------------------------------------------------------- 620 !! *** SUBROUTINE iom_set_rst_context *** 621 !! 622 !! ** Purpose : set correct XIOS context based on kdid 623 !! 624 !!--------------------------------------------------------------------- 625 INTEGER, INTENT(IN) :: kdid ! Identifier of the file 626 CHARACTER(LEN=lc), INTENT(OUT) :: cdcont ! name of the context for XIOS read/write 627 628 cdcont = "NONE" 629 630 IF(lrxios) THEN 631 IF(kdid == numror) THEN 632 cdcont = cr_ocerst_cxt 633 ELSEIF(kdid == numrir) THEN 634 cdcont = cr_icerst_cxt 635 ELSEIF(kdid == numrtr) THEN 636 cdcont = cr_toprst_cxt 637 ELSEIF(kdid == numrsr) THEN 638 cdcont = cr_sedrst_cxt 639 ENDIF 640 ENDIF 641 642 IF(lwxios) THEN 643 IF(kdid == numrow) THEN 644 cdcont = cw_ocerst_cxt 645 ELSEIF(kdid == numriw) THEN 646 cdcont = cw_icerst_cxt 647 ELSEIF(kdid == numrtw) THEN 648 cdcont = cw_toprst_cxt 649 ELSEIF(kdid == numrsw) THEN 650 cdcont = cw_sedrst_cxt 651 ENDIF 652 ENDIF 653 END SUBROUTINE set_xios_context 654 572 655 573 656 SUBROUTINE iom_swap( cdname ) … … 829 912 !! INTERFACE iom_get 830 913 !!---------------------------------------------------------------------- 831 SUBROUTINE iom_g0d_sp( kiomid, cdvar, pvar, ktime , ldxios)914 SUBROUTINE iom_g0d_sp( kiomid, cdvar, pvar, ktime ) 832 915 INTEGER , INTENT(in ) :: kiomid ! Identifier of the file 833 916 CHARACTER(len=*), INTENT(in ) :: cdvar ! Name of the variable … … 835 918 REAL(dp) :: ztmp_pvar ! tmp var to read field 836 919 INTEGER , INTENT(in ), OPTIONAL :: ktime ! record number 837 LOGICAL , INTENT(in ), OPTIONAL :: ldxios ! use xios to read restart838 920 ! 839 921 INTEGER :: idvar ! variable id … … 843 925 CHARACTER(LEN=100) :: clname ! file name 844 926 CHARACTER(LEN=1) :: cldmspc ! 845 LOGICAL :: llxios 846 ! 847 llxios = .FALSE. 848 IF( PRESENT(ldxios) ) llxios = ldxios 849 850 IF(.NOT.llxios) THEN ! read data using default library 927 CHARACTER(LEN=lc) :: context 928 ! 929 CALL set_xios_context(kiomid, context) 930 931 IF(context == "NONE") THEN ! read data using default library 851 932 itime = 1 852 933 IF( PRESENT(ktime) ) itime = ktime … … 871 952 #if defined key_iomput 872 953 IF(lwp) WRITE(numout,*) 'XIOS RST READ (0D): ', trim(cdvar) 954 CALL iom_swap(context) 873 955 CALL xios_recv_field( trim(cdvar), pvar) 956 CALL iom_swap(cxios_context) 874 957 #else 875 958 WRITE(ctmp1,*) 'Can not use XIOS in iom_g0d, file: '//trim(clname)//', var:'//trim(cdvar) … … 879 962 END SUBROUTINE iom_g0d_sp 880 963 881 SUBROUTINE iom_g0d_dp( kiomid, cdvar, pvar, ktime , ldxios)964 SUBROUTINE iom_g0d_dp( kiomid, cdvar, pvar, ktime ) 882 965 INTEGER , INTENT(in ) :: kiomid ! Identifier of the file 883 966 CHARACTER(len=*), INTENT(in ) :: cdvar ! Name of the variable 884 967 REAL(dp) , INTENT( out) :: pvar ! read field 885 968 INTEGER , INTENT(in ), OPTIONAL :: ktime ! record number 886 LOGICAL , INTENT(in ), OPTIONAL :: ldxios ! use xios to read restart887 969 ! 888 970 INTEGER :: idvar ! variable id … … 892 974 CHARACTER(LEN=100) :: clname ! file name 893 975 CHARACTER(LEN=1) :: cldmspc ! 894 LOGICAL :: llxios 895 ! 896 llxios = .FALSE. 897 IF( PRESENT(ldxios) ) llxios = ldxios 898 899 IF(.NOT.llxios) THEN ! read data using default library 976 CHARACTER(LEN=lc) :: context 977 ! 978 CALL set_xios_context(kiomid, context) 979 980 IF(context == "NONE") THEN ! read data using default library 900 981 itime = 1 901 982 IF( PRESENT(ktime) ) itime = ktime … … 919 1000 #if defined key_iomput 920 1001 IF(lwp) WRITE(numout,*) 'XIOS RST READ (0D): ', trim(cdvar) 1002 CALL iom_swap(context) 921 1003 CALL xios_recv_field( trim(cdvar), pvar) 1004 CALL iom_swap(cxios_context) 922 1005 #else 923 1006 WRITE(ctmp1,*) 'Can not use XIOS in iom_g0d, file: '//trim(clname)//', var:'//trim(cdvar) … … 927 1010 END SUBROUTINE iom_g0d_dp 928 1011 929 SUBROUTINE iom_g1d_sp( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount , ldxios)1012 SUBROUTINE iom_g1d_sp( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount ) 930 1013 INTEGER , INTENT(in ) :: kiomid ! Identifier of the file 931 1014 INTEGER , INTENT(in ) :: kdom ! Type of domain to be read … … 936 1019 INTEGER , INTENT(in ), DIMENSION(1), OPTIONAL :: kstart ! start axis position of the reading 937 1020 INTEGER , INTENT(in ), DIMENSION(1), OPTIONAL :: kcount ! number of points in each axis 938 LOGICAL , INTENT(in ), OPTIONAL :: ldxios ! read data using XIOS939 1021 ! 940 1022 IF( kiomid > 0 ) THEN … … 942 1024 ALLOCATE(ztmp_pvar(size(pvar,1))) 943 1025 CALL iom_get_123d( kiomid, kdom , cdvar , pv_r1d=ztmp_pvar, & 944 & ktime=ktime, kstart=kstart, kcount=kcount, & 945 & ldxios=ldxios ) 1026 & ktime=ktime, kstart=kstart, kcount=kcount ) 946 1027 pvar = ztmp_pvar 947 1028 DEALLOCATE(ztmp_pvar) … … 951 1032 952 1033 953 SUBROUTINE iom_g1d_dp( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount , ldxios)1034 SUBROUTINE iom_g1d_dp( kiomid, kdom, cdvar, pvar, ktime, kstart, kcount ) 954 1035 INTEGER , INTENT(in ) :: kiomid ! Identifier of the file 955 1036 INTEGER , INTENT(in ) :: kdom ! Type of domain to be read … … 959 1040 INTEGER , INTENT(in ), DIMENSION(1), OPTIONAL :: kstart ! start axis position of the reading 960 1041 INTEGER , INTENT(in ), DIMENSION(1), OPTIONAL :: kcount ! number of points in each axis 961 LOGICAL , INTENT(in ), OPTIONAL :: ldxios ! read data using XIOS962 1042 ! 963 1043 IF( kiomid > 0 ) THEN 964 1044 IF( iom_file(kiomid)%nfid > 0 ) CALL iom_get_123d( kiomid, kdom , cdvar , pv_r1d=pvar, & 965 & ktime=ktime, kstart=kstart, kcount=kcount, & 966 & ldxios=ldxios ) 1045 & ktime=ktime, kstart=kstart, kcount=kcount) 967 1046 ENDIF 968 1047 END SUBROUTINE iom_g1d_dp 969 1048 970 SUBROUTINE iom_g2d_sp( kiomid, kdom, cdvar, pvar, ktime, cd_type, psgn, kfill, kstart, kcount , ldxios)1049 SUBROUTINE iom_g2d_sp( kiomid, kdom, cdvar, pvar, ktime, cd_type, psgn, kfill, kstart, kcount) 971 1050 INTEGER , INTENT(in ) :: kiomid ! Identifier of the file 972 1051 INTEGER , INTENT(in ) :: kdom ! Type of domain to be read … … 980 1059 INTEGER , INTENT(in ), DIMENSION(2), OPTIONAL :: kstart ! start axis position of the reading 981 1060 INTEGER , INTENT(in ), DIMENSION(2), OPTIONAL :: kcount ! number of points in each axis 982 LOGICAL , INTENT(in ), OPTIONAL :: ldxios ! read data using XIOS983 1061 ! 984 1062 IF( kiomid > 0 ) THEN … … 987 1065 CALL iom_get_123d( kiomid, kdom, cdvar , pv_r2d = ztmp_pvar , ktime = ktime, & 988 1066 & cd_type = cd_type, psgn = psgn , kfill = kfill, & 989 & kstart = kstart , kcount = kcount , ldxios=ldxios)1067 & kstart = kstart , kcount = kcount ) 990 1068 pvar = ztmp_pvar 991 1069 DEALLOCATE(ztmp_pvar) … … 994 1072 END SUBROUTINE iom_g2d_sp 995 1073 996 SUBROUTINE iom_g2d_dp( kiomid, kdom, cdvar, pvar, ktime, cd_type, psgn, kfill, kstart, kcount , ldxios)1074 SUBROUTINE iom_g2d_dp( kiomid, kdom, cdvar, pvar, ktime, cd_type, psgn, kfill, kstart, kcount) 997 1075 INTEGER , INTENT(in ) :: kiomid ! Identifier of the file 998 1076 INTEGER , INTENT(in ) :: kdom ! Type of domain to be read … … 1005 1083 INTEGER , INTENT(in ), DIMENSION(2), OPTIONAL :: kstart ! start axis position of the reading 1006 1084 INTEGER , INTENT(in ), DIMENSION(2), OPTIONAL :: kcount ! number of points in each axis 1007 LOGICAL , INTENT(in ), OPTIONAL :: ldxios ! read data using XIOS1008 1085 ! 1009 1086 IF( kiomid > 0 ) THEN 1010 1087 IF( iom_file(kiomid)%nfid > 0 ) CALL iom_get_123d( kiomid, kdom, cdvar , pv_r2d = pvar , ktime = ktime, & 1011 1088 & cd_type = cd_type, psgn = psgn , kfill = kfill, & 1012 & kstart = kstart , kcount = kcount , ldxios=ldxios)1089 & kstart = kstart , kcount = kcount ) 1013 1090 ENDIF 1014 1091 END SUBROUTINE iom_g2d_dp 1015 1092 1016 SUBROUTINE iom_g3d_sp( kiomid, kdom, cdvar, pvar, ktime, cd_type, psgn, kfill, kstart, kcount , ldxios)1093 SUBROUTINE iom_g3d_sp( kiomid, kdom, cdvar, pvar, ktime, cd_type, psgn, kfill, kstart, kcount ) 1017 1094 INTEGER , INTENT(in ) :: kiomid ! Identifier of the file 1018 1095 INTEGER , INTENT(in ) :: kdom ! Type of domain to be read … … 1026 1103 INTEGER , INTENT(in ), DIMENSION(3), OPTIONAL :: kstart ! start axis position of the reading 1027 1104 INTEGER , INTENT(in ), DIMENSION(3), OPTIONAL :: kcount ! number of points in each axis 1028 LOGICAL , INTENT(in ), OPTIONAL :: ldxios ! read data using XIOS1029 1105 ! 1030 1106 IF( kiomid > 0 ) THEN … … 1033 1109 CALL iom_get_123d( kiomid, kdom, cdvar , pv_r3d = ztmp_pvar , ktime = ktime, & 1034 1110 & cd_type = cd_type, psgn = psgn , kfill = kfill, & 1035 & kstart = kstart , kcount = kcount , ldxios=ldxios)1111 & kstart = kstart , kcount = kcount ) 1036 1112 pvar = ztmp_pvar 1037 1113 DEALLOCATE(ztmp_pvar) … … 1040 1116 END SUBROUTINE iom_g3d_sp 1041 1117 1042 SUBROUTINE iom_g3d_dp( kiomid, kdom, cdvar, pvar, ktime, cd_type, psgn, kfill, kstart, kcount , ldxios)1118 SUBROUTINE iom_g3d_dp( kiomid, kdom, cdvar, pvar, ktime, cd_type, psgn, kfill, kstart, kcount ) 1043 1119 INTEGER , INTENT(in ) :: kiomid ! Identifier of the file 1044 1120 INTEGER , INTENT(in ) :: kdom ! Type of domain to be read … … 1051 1127 INTEGER , INTENT(in ), DIMENSION(3), OPTIONAL :: kstart ! start axis position of the reading 1052 1128 INTEGER , INTENT(in ), DIMENSION(3), OPTIONAL :: kcount ! number of points in each axis 1053 LOGICAL , INTENT(in ), OPTIONAL :: ldxios ! read data using XIOS1054 1129 ! 1055 1130 IF( kiomid > 0 ) THEN … … 1057 1132 CALL iom_get_123d( kiomid, kdom, cdvar , pv_r3d = pvar , ktime = ktime, & 1058 1133 & cd_type = cd_type, psgn = psgn , kfill = kfill, & 1059 & kstart = kstart , kcount = kcount , ldxios=ldxios)1134 & kstart = kstart , kcount = kcount ) 1060 1135 END IF 1061 1136 ENDIF … … 1065 1140 1066 1141 SUBROUTINE iom_get_123d( kiomid , kdom, cdvar, pv_r1d, pv_r2d, pv_r3d, ktime , & 1067 & cd_type, psgn, kfill, kstart, kcount , ldxios)1142 & cd_type, psgn, kfill, kstart, kcount ) 1068 1143 !!----------------------------------------------------------------------- 1069 1144 !! *** ROUTINE iom_get_123d *** … … 1085 1160 INTEGER , DIMENSION(:) , INTENT(in ), OPTIONAL :: kstart ! start position of the reading in each axis 1086 1161 INTEGER , DIMENSION(:) , INTENT(in ), OPTIONAL :: kcount ! number of points to be read in each axis 1087 LOGICAL , INTENT(in ), OPTIONAL :: ldxios ! use XIOS to read restart1088 1162 ! 1089 1163 LOGICAL :: llok ! true if ok! 1090 LOGICAL :: llxios ! local definition for XIOS read1091 1164 INTEGER :: jl ! loop on number of dimension 1092 1165 INTEGER :: idom ! type of domain … … 1115 1188 REAL(dp) :: gma, gmi 1116 1189 !--------------------------------------------------------------------- 1117 ! 1190 CHARACTER(LEN=lc) :: context 1191 ! 1192 CALL set_xios_context(kiomid, context) 1118 1193 inlev = -1 1119 1194 IF( PRESENT(pv_r3d) ) inlev = SIZE(pv_r3d, 3) 1120 1195 ! 1121 llxios = .FALSE.1122 IF( PRESENT(ldxios) ) llxios = ldxios1123 !1124 1196 idom = kdom 1125 1197 istop = nstop 1126 1198 ! 1127 IF( .NOT.llxios) THEN1199 IF(context == "NONE") THEN 1128 1200 clname = iom_file(kiomid)%name ! esier to read 1129 1201 clinfo = ' iom_get_123d, file: '//trim(clname)//', var: '//trim(cdvar) … … 1293 1365 !would be good to be able to check which context is active and swap only if current is not restart 1294 1366 idvar = iom_varid( kiomid, cdvar ) 1295 1367 CALL iom_swap(context) 1296 1368 zsgn = 1._wp 1297 1369 IF( PRESENT(psgn ) ) zsgn = psgn … … 1315 1387 CALL xios_recv_field( trim(cdvar), pv_r1d) 1316 1388 ENDIF 1389 CALL iom_swap(cxios_context) 1317 1390 #else 1318 1391 istop = istop + 1 … … 1510 1583 !! INTERFACE iom_rstput 1511 1584 !!---------------------------------------------------------------------- 1512 SUBROUTINE iom_rp0d_sp( kt, kwrite, kiomid, cdvar, pvar, ktype , ldxios)1585 SUBROUTINE iom_rp0d_sp( kt, kwrite, kiomid, cdvar, pvar, ktype ) 1513 1586 INTEGER , INTENT(in) :: kt ! ocean time-step 1514 1587 INTEGER , INTENT(in) :: kwrite ! writing time-step … … 1517 1590 REAL(sp) , INTENT(in) :: pvar ! written field 1518 1591 INTEGER , INTENT(in), OPTIONAL :: ktype ! variable external type 1519 LOGICAL, OPTIONAL :: ldxios ! xios write flag 1520 LOGICAL :: llx ! local xios write flag 1521 INTEGER :: ivid ! variable id 1522 1523 llx = .FALSE. 1524 IF(PRESENT(ldxios)) llx = ldxios 1592 ! 1593 LOGICAL :: llx ! local xios write flag 1594 INTEGER :: ivid ! variable id 1595 CHARACTER(LEN=lc) :: context 1596 ! 1597 CALL set_xios_context(kiomid, context) 1598 1599 llx = .NOT. (context == "NONE") 1600 1525 1601 IF( llx ) THEN 1526 1602 #ifdef key_iomput 1527 IF( kt == kwrite ) THEN 1528 IF(lwp) write(numout,*) 'RESTART: write (XIOS 0D) ',trim(cdvar) 1529 CALL iom_put(trim(cdvar), pvar) 1530 ELSE 1531 IF(lwp) write(numout,*) 'RESTART: define (XIOS 0D) ',trim(cdvar) 1532 CALL iom_set_rstw_active( trim(cdvar), rs0 = pvar ) 1533 ENDIF 1603 IF( kt == kwrite ) THEN 1604 IF(lwp) write(numout,*) 'RESTART: write (XIOS 0D) ',trim(cdvar) 1605 CALL iom_swap(context) 1606 CALL iom_put(trim(cdvar), pvar) 1607 CALL iom_swap(cxios_context) 1608 ELSE 1609 IF(lwp) write(numout,*) 'RESTART: define (XIOS 0D) ',trim(cdvar) 1610 CALL iom_swap(context) 1611 CALL iom_set_rstw_active( trim(cdvar), rs0 = pvar ) 1612 CALL iom_swap(cxios_context) 1613 ENDIF 1534 1614 #endif 1535 1615 ELSE … … 1543 1623 END SUBROUTINE iom_rp0d_sp 1544 1624 1545 SUBROUTINE iom_rp0d_dp( kt, kwrite, kiomid, cdvar, pvar, ktype , ldxios)1625 SUBROUTINE iom_rp0d_dp( kt, kwrite, kiomid, cdvar, pvar, ktype ) 1546 1626 INTEGER , INTENT(in) :: kt ! ocean time-step 1547 1627 INTEGER , INTENT(in) :: kwrite ! writing time-step … … 1550 1630 REAL(dp) , INTENT(in) :: pvar ! written field 1551 1631 INTEGER , INTENT(in), OPTIONAL :: ktype ! variable external type 1552 LOGICAL, OPTIONAL :: ldxios ! xios write flag 1553 LOGICAL :: llx ! local xios write flag 1554 INTEGER :: ivid ! variable id 1555 1556 llx = .FALSE. 1557 IF(PRESENT(ldxios)) llx = ldxios 1632 ! 1633 LOGICAL :: llx ! local xios write flag 1634 INTEGER :: ivid ! variable id 1635 CHARACTER(LEN=lc) :: context 1636 ! 1637 CALL set_xios_context(kiomid, context) 1638 1639 llx = .NOT. (context == "NONE") 1640 1558 1641 IF( llx ) THEN 1559 1642 #ifdef key_iomput 1560 IF( kt == kwrite ) THEN 1561 IF(lwp) write(numout,*) 'RESTART: write (XIOS 0D) ',trim(cdvar) 1562 CALL iom_put(trim(cdvar), pvar) 1563 ELSE 1564 IF(lwp) write(numout,*) 'RESTART: define (XIOS 0D) ',trim(cdvar) 1565 CALL iom_set_rstw_active( trim(cdvar), rd0 = pvar ) 1566 ENDIF 1643 IF( kt == kwrite ) THEN 1644 IF(lwp) write(numout,*) 'RESTART: write (XIOS 0D) ',trim(cdvar) 1645 CALL iom_swap(context) 1646 CALL iom_put(trim(cdvar), pvar) 1647 CALL iom_swap(cxios_context) 1648 ELSE 1649 IF(lwp) write(numout,*) 'RESTART: define (XIOS 0D) ',trim(cdvar) 1650 CALL iom_swap(context) 1651 CALL iom_set_rstw_active( trim(cdvar), rd0 = pvar ) 1652 CALL iom_swap(cxios_context) 1653 ENDIF 1567 1654 #endif 1568 1655 ELSE … … 1577 1664 1578 1665 1579 SUBROUTINE iom_rp1d_sp( kt, kwrite, kiomid, cdvar, pvar, ktype , ldxios)1666 SUBROUTINE iom_rp1d_sp( kt, kwrite, kiomid, cdvar, pvar, ktype ) 1580 1667 INTEGER , INTENT(in) :: kt ! ocean time-step 1581 1668 INTEGER , INTENT(in) :: kwrite ! writing time-step … … 1584 1671 REAL(sp) , INTENT(in), DIMENSION( :) :: pvar ! written field 1585 1672 INTEGER , INTENT(in), OPTIONAL :: ktype ! variable external type 1586 LOGICAL, OPTIONAL :: ldxios ! xios write flag 1587 LOGICAL :: llx ! local xios write flag 1588 INTEGER :: ivid ! variable id 1589 1590 llx = .FALSE. 1591 IF(PRESENT(ldxios)) llx = ldxios 1673 ! 1674 LOGICAL :: llx ! local xios write flag 1675 INTEGER :: ivid ! variable id 1676 CHARACTER(LEN=lc) :: context 1677 ! 1678 CALL set_xios_context(kiomid, context) 1679 1680 llx = .NOT. (context == "NONE") 1681 1592 1682 IF( llx ) THEN 1593 1683 #ifdef key_iomput 1594 IF( kt == kwrite ) THEN 1595 IF(lwp) write(numout,*) 'RESTART: write (XIOS 1D) ',trim(cdvar) 1596 CALL iom_put(trim(cdvar), pvar) 1597 ELSE 1598 IF(lwp) write(numout,*) 'RESTART: define (XIOS 1D)',trim(cdvar) 1599 CALL iom_set_rstw_active( trim(cdvar), rs1 = pvar ) 1600 ENDIF 1684 IF( kt == kwrite ) THEN 1685 IF(lwp) write(numout,*) 'RESTART: write (XIOS 1D) ',trim(cdvar) 1686 CALL iom_swap(context) 1687 CALL iom_put(trim(cdvar), pvar) 1688 CALL iom_swap(cxios_context) 1689 ELSE 1690 IF(lwp) write(numout,*) 'RESTART: define (XIOS 1D)',trim(cdvar) 1691 CALL iom_swap(context) 1692 CALL iom_set_rstw_active( trim(cdvar), rs1 = pvar ) 1693 CALL iom_swap(cxios_context) 1694 ENDIF 1601 1695 #endif 1602 1696 ELSE … … 1610 1704 END SUBROUTINE iom_rp1d_sp 1611 1705 1612 SUBROUTINE iom_rp1d_dp( kt, kwrite, kiomid, cdvar, pvar, ktype , ldxios)1706 SUBROUTINE iom_rp1d_dp( kt, kwrite, kiomid, cdvar, pvar, ktype ) 1613 1707 INTEGER , INTENT(in) :: kt ! ocean time-step 1614 1708 INTEGER , INTENT(in) :: kwrite ! writing time-step … … 1617 1711 REAL(dp) , INTENT(in), DIMENSION( :) :: pvar ! written field 1618 1712 INTEGER , INTENT(in), OPTIONAL :: ktype ! variable external type 1619 LOGICAL, OPTIONAL :: ldxios ! xios write flag 1620 LOGICAL :: llx ! local xios write flag 1621 INTEGER :: ivid ! variable id 1622 1623 llx = .FALSE. 1624 IF(PRESENT(ldxios)) llx = ldxios 1713 ! 1714 LOGICAL :: llx ! local xios write flag 1715 INTEGER :: ivid ! variable id 1716 CHARACTER(LEN=lc) :: context 1717 ! 1718 CALL set_xios_context(kiomid, context) 1719 1720 llx = .NOT. (context == "NONE") 1721 1625 1722 IF( llx ) THEN 1626 1723 #ifdef key_iomput 1627 IF( kt == kwrite ) THEN 1628 IF(lwp) write(numout,*) 'RESTART: write (XIOS 1D) ',trim(cdvar) 1629 CALL iom_put(trim(cdvar), pvar) 1630 ELSE 1631 IF(lwp) write(numout,*) 'RESTART: define (XIOS 1D)',trim(cdvar) 1632 CALL iom_set_rstw_active( trim(cdvar), rd1 = pvar ) 1633 ENDIF 1724 IF( kt == kwrite ) THEN 1725 IF(lwp) write(numout,*) 'RESTART: write (XIOS 1D) ',trim(cdvar) 1726 CALL iom_swap(context) 1727 CALL iom_put(trim(cdvar), pvar) 1728 CALL iom_swap(cxios_context) 1729 ELSE 1730 IF(lwp) write(numout,*) 'RESTART: define (XIOS 1D)',trim(cdvar) 1731 CALL iom_swap(context) 1732 CALL iom_set_rstw_active( trim(cdvar), rd1 = pvar ) 1733 CALL iom_swap(cxios_context) 1734 ENDIF 1634 1735 #endif 1635 1736 ELSE … … 1644 1745 1645 1746 1646 SUBROUTINE iom_rp2d_sp( kt, kwrite, kiomid, cdvar, pvar, ktype , ldxios)1747 SUBROUTINE iom_rp2d_sp( kt, kwrite, kiomid, cdvar, pvar, ktype ) 1647 1748 INTEGER , INTENT(in) :: kt ! ocean time-step 1648 1749 INTEGER , INTENT(in) :: kwrite ! writing time-step … … 1651 1752 REAL(sp) , INTENT(in), DIMENSION(:, : ) :: pvar ! written field 1652 1753 INTEGER , INTENT(in), OPTIONAL :: ktype ! variable external type 1653 LOGICAL, OPTIONAL :: ldxios ! xios write flag 1654 LOGICAL :: llx 1655 INTEGER :: ivid ! variable id 1656 1657 llx = .FALSE. 1658 IF(PRESENT(ldxios)) llx = ldxios 1754 ! 1755 LOGICAL :: llx 1756 INTEGER :: ivid ! variable id 1757 CHARACTER(LEN=lc) :: context 1758 ! 1759 CALL set_xios_context(kiomid, context) 1760 1761 llx = .NOT. (context == "NONE") 1762 1659 1763 IF( llx ) THEN 1660 1764 #ifdef key_iomput 1661 IF( kt == kwrite ) THEN 1662 IF(lwp) write(numout,*) 'RESTART: write (XIOS 2D) ',trim(cdvar) 1663 CALL iom_put(trim(cdvar), pvar) 1664 ELSE 1665 IF(lwp) write(numout,*) 'RESTART: define (XIOS 2D)',trim(cdvar) 1666 CALL iom_set_rstw_active( trim(cdvar), rs2 = pvar ) 1667 ENDIF 1765 IF( kt == kwrite ) THEN 1766 IF(lwp) write(numout,*) 'RESTART: write (XIOS 2D) ',trim(cdvar) 1767 CALL iom_swap(context) 1768 CALL iom_put(trim(cdvar), pvar) 1769 CALL iom_swap(cxios_context) 1770 ELSE 1771 IF(lwp) write(numout,*) 'RESTART: define (XIOS 2D)',trim(cdvar) 1772 CALL iom_swap(context) 1773 CALL iom_set_rstw_active( trim(cdvar), rs2 = pvar ) 1774 CALL iom_swap(cxios_context) 1775 ENDIF 1668 1776 #endif 1669 1777 ELSE … … 1677 1785 END SUBROUTINE iom_rp2d_sp 1678 1786 1679 SUBROUTINE iom_rp2d_dp( kt, kwrite, kiomid, cdvar, pvar, ktype , ldxios)1787 SUBROUTINE iom_rp2d_dp( kt, kwrite, kiomid, cdvar, pvar, ktype ) 1680 1788 INTEGER , INTENT(in) :: kt ! ocean time-step 1681 1789 INTEGER , INTENT(in) :: kwrite ! writing time-step … … 1684 1792 REAL(dp) , INTENT(in), DIMENSION(:, : ) :: pvar ! written field 1685 1793 INTEGER , INTENT(in), OPTIONAL :: ktype ! variable external type 1686 LOGICAL, OPTIONAL :: ldxios ! xios write flag 1687 LOGICAL :: llx 1688 INTEGER :: ivid ! variable id 1689 1690 llx = .FALSE. 1691 IF(PRESENT(ldxios)) llx = ldxios 1794 ! 1795 LOGICAL :: llx 1796 INTEGER :: ivid ! variable id 1797 CHARACTER(LEN=lc) :: context 1798 ! 1799 CALL set_xios_context(kiomid, context) 1800 1801 llx = .NOT. (context == "NONE") 1802 1692 1803 IF( llx ) THEN 1693 1804 #ifdef key_iomput 1694 IF( kt == kwrite ) THEN 1695 IF(lwp) write(numout,*) 'RESTART: write (XIOS 2D) ',trim(cdvar) 1696 CALL iom_put(trim(cdvar), pvar) 1697 ELSE 1698 IF(lwp) write(numout,*) 'RESTART: define (XIOS 2D)',trim(cdvar) 1699 CALL iom_set_rstw_active( trim(cdvar), rd2 = pvar ) 1700 ENDIF 1805 IF( kt == kwrite ) THEN 1806 IF(lwp) write(numout,*) 'RESTART: write (XIOS 2D) ',trim(cdvar) 1807 CALL iom_swap(context) 1808 CALL iom_put(trim(cdvar), pvar) 1809 CALL iom_swap(cxios_context) 1810 ELSE 1811 IF(lwp) write(numout,*) 'RESTART: define (XIOS 2D)',trim(cdvar) 1812 CALL iom_swap(context) 1813 CALL iom_set_rstw_active( trim(cdvar), rd2 = pvar ) 1814 CALL iom_swap(cxios_context) 1815 ENDIF 1701 1816 #endif 1702 1817 ELSE … … 1711 1826 1712 1827 1713 SUBROUTINE iom_rp3d_sp( kt, kwrite, kiomid, cdvar, pvar, ktype , ldxios)1828 SUBROUTINE iom_rp3d_sp( kt, kwrite, kiomid, cdvar, pvar, ktype ) 1714 1829 INTEGER , INTENT(in) :: kt ! ocean time-step 1715 1830 INTEGER , INTENT(in) :: kwrite ! writing time-step … … 1718 1833 REAL(sp) , INTENT(in), DIMENSION(:,:,:) :: pvar ! written field 1719 1834 INTEGER , INTENT(in), OPTIONAL :: ktype ! variable external type 1720 LOGICAL, OPTIONAL :: ldxios ! xios write flag 1721 LOGICAL :: llx ! local xios write flag 1722 INTEGER :: ivid ! variable id 1723 1724 llx = .FALSE. 1725 IF(PRESENT(ldxios)) llx = ldxios 1835 ! 1836 LOGICAL :: llx ! local xios write flag 1837 INTEGER :: ivid ! variable id 1838 CHARACTER(LEN=lc) :: context 1839 ! 1840 CALL set_xios_context(kiomid, context) 1841 1842 llx = .NOT. (context == "NONE") 1843 1726 1844 IF( llx ) THEN 1727 1845 #ifdef key_iomput 1728 IF( kt == kwrite ) THEN 1729 IF(lwp) write(numout,*) 'RESTART: write (XIOS 3D) ',trim(cdvar) 1730 CALL iom_put(trim(cdvar), pvar) 1731 ELSE 1732 IF(lwp) write(numout,*) 'RESTART: define (XIOS 3D)',trim(cdvar) 1733 CALL iom_set_rstw_active( trim(cdvar), rs3 = pvar ) 1734 ENDIF 1846 IF( kt == kwrite ) THEN 1847 IF(lwp) write(numout,*) 'RESTART: write (XIOS 3D) ',trim(cdvar) 1848 CALL iom_swap(context) 1849 CALL iom_put(trim(cdvar), pvar) 1850 CALL iom_swap(cxios_context) 1851 ELSE 1852 IF(lwp) write(numout,*) 'RESTART: define (XIOS 3D)',trim(cdvar) 1853 CALL iom_swap(context) 1854 CALL iom_set_rstw_active( trim(cdvar), rs3 = pvar ) 1855 CALL iom_swap(cxios_context) 1856 ENDIF 1735 1857 #endif 1736 1858 ELSE … … 1744 1866 END SUBROUTINE iom_rp3d_sp 1745 1867 1746 SUBROUTINE iom_rp3d_dp( kt, kwrite, kiomid, cdvar, pvar, ktype , ldxios)1868 SUBROUTINE iom_rp3d_dp( kt, kwrite, kiomid, cdvar, pvar, ktype ) 1747 1869 INTEGER , INTENT(in) :: kt ! ocean time-step 1748 1870 INTEGER , INTENT(in) :: kwrite ! writing time-step … … 1751 1873 REAL(dp) , INTENT(in), DIMENSION(:,:,:) :: pvar ! written field 1752 1874 INTEGER , INTENT(in), OPTIONAL :: ktype ! variable external type 1753 LOGICAL, OPTIONAL :: ldxios ! xios write flag 1754 LOGICAL :: llx ! local xios write flag 1755 INTEGER :: ivid ! variable id 1756 1757 llx = .FALSE. 1758 IF(PRESENT(ldxios)) llx = ldxios 1875 ! 1876 LOGICAL :: llx ! local xios write flag 1877 INTEGER :: ivid ! variable id 1878 CHARACTER(LEN=lc) :: context 1879 ! 1880 CALL set_xios_context(kiomid, context) 1881 1882 llx = .NOT. (context == "NONE") 1883 1759 1884 IF( llx ) THEN 1760 1885 #ifdef key_iomput 1761 IF( kt == kwrite ) THEN 1762 IF(lwp) write(numout,*) 'RESTART: write (XIOS 3D) ',trim(cdvar) 1763 CALL iom_put(trim(cdvar), pvar) 1764 ELSE 1765 IF(lwp) write(numout,*) 'RESTART: define (XIOS 3D)',trim(cdvar) 1766 CALL iom_set_rstw_active( trim(cdvar), rd3 = pvar ) 1767 ENDIF 1886 IF( kt == kwrite ) THEN 1887 IF(lwp) write(numout,*) 'RESTART: write (XIOS 3D) ',trim(cdvar) 1888 CALL iom_swap(context) 1889 CALL iom_put(trim(cdvar), pvar) 1890 CALL iom_swap(cxios_context) 1891 ELSE 1892 IF(lwp) write(numout,*) 'RESTART: define (XIOS 3D)',trim(cdvar) 1893 CALL iom_swap(context) 1894 CALL iom_set_rstw_active( trim(cdvar), rd3 = pvar ) 1895 CALL iom_swap(cxios_context) 1896 ENDIF 1768 1897 #endif 1769 1898 ELSE … … 1880 2009 IF( iom_use(cdname) ) THEN 1881 2010 #if defined key_iomput 1882 IF( SIZE(pfield2d, dim=1) == jpi .AND. SIZE(pfield2d, dim=2) == jpj ) THEN 1883 CALL xios_send_field( cdname, pfield2d(Nis0:Nie0, Njs0:Nje0) ) ! this extraction will create a copy of pfield2d 1884 ELSE 1885 CALL xios_send_field( cdname, pfield2d ) 1886 ENDIF 2011 CALL xios_send_field( cdname, pfield2d ) 1887 2012 #else 1888 2013 WRITE(numout,*) pfield2d ! iom_use(cdname) = .F. -> useless test to avoid compilation warnings … … 1896 2021 IF( iom_use(cdname) ) THEN 1897 2022 #if defined key_iomput 1898 IF( SIZE(pfield2d, dim=1) == jpi .AND. SIZE(pfield2d, dim=2) == jpj ) THEN 1899 CALL xios_send_field( cdname, pfield2d(Nis0:Nie0, Njs0:Nje0) ) ! this extraction will create a copy of pfield2d 1900 ELSE 1901 CALL xios_send_field( cdname, pfield2d ) 1902 ENDIF 2023 CALL xios_send_field( cdname, pfield2d ) 1903 2024 #else 1904 2025 WRITE(numout,*) pfield2d ! iom_use(cdname) = .F. -> useless test to avoid compilation warnings … … 1912 2033 IF( iom_use(cdname) ) THEN 1913 2034 #if defined key_iomput 1914 IF( SIZE(pfield3d, dim=1) == jpi .AND. SIZE(pfield3d, dim=2) == jpj ) THEN 1915 CALL xios_send_field( cdname, pfield3d(Nis0:Nie0, Njs0:Nje0,:) ) ! this extraction will create a copy of pfield3d 1916 ELSE 1917 CALL xios_send_field( cdname, pfield3d ) 1918 ENDIF 2035 CALL xios_send_field( cdname, pfield3d ) 1919 2036 #else 1920 2037 WRITE(numout,*) pfield3d ! iom_use(cdname) = .F. -> useless test to avoid compilation warnings … … 1928 2045 IF( iom_use(cdname) ) THEN 1929 2046 #if defined key_iomput 1930 IF( SIZE(pfield3d, dim=1) == jpi .AND. SIZE(pfield3d, dim=2) == jpj ) THEN 1931 CALL xios_send_field( cdname, pfield3d(Nis0:Nie0, Njs0:Nje0,:) ) ! this extraction will create a copy of pfield3d 1932 ELSE 1933 CALL xios_send_field( cdname, pfield3d ) 1934 ENDIF 2047 CALL xios_send_field( cdname, pfield3d ) 1935 2048 #else 1936 2049 WRITE(numout,*) pfield3d ! iom_use(cdname) = .F. -> useless test to avoid compilation warnings … … 1944 2057 IF( iom_use(cdname) ) THEN 1945 2058 #if defined key_iomput 1946 IF( SIZE(pfield4d, dim=1) == jpi .AND. SIZE(pfield4d, dim=2) == jpj ) THEN 1947 CALL xios_send_field( cdname, pfield4d(Nis0:Nie0, Njs0:Nje0,:,:) ) ! this extraction will create a copy of pfield4d 1948 ELSE 1949 CALL xios_send_field (cdname, pfield4d ) 1950 ENDIF 2059 CALL xios_send_field (cdname, pfield4d ) 1951 2060 #else 1952 2061 WRITE(numout,*) pfield4d ! iom_use(cdname) = .F. -> useless test to avoid compilation warnings … … 1960 2069 IF( iom_use(cdname) ) THEN 1961 2070 #if defined key_iomput 1962 IF( SIZE(pfield4d, dim=1) == jpi .AND. SIZE(pfield4d, dim=2) == jpj ) THEN 1963 CALL xios_send_field( cdname, pfield4d(Nis0:Nie0, Njs0:Nje0,:,:) ) ! this extraction will create a copy of pfield4d 1964 ELSE 1965 CALL xios_send_field (cdname, pfield4d ) 1966 ENDIF 2071 CALL xios_send_field (cdname, pfield4d ) 1967 2072 #else 1968 2073 WRITE(numout,*) pfield4d ! iom_use(cdname) = .F. -> useless test to avoid compilation warnings … … 2135 2240 CALL iom_swap( cdname ) ! swap to cdname context 2136 2241 CALL xios_update_calendar(kt) 2137 IF( cdname /= TRIM(cxios_context) ) CALL iom_swap( TRIM(cxios_context)) ! return back to nemo context2242 IF( cdname /= TRIM(cxios_context) ) CALL iom_swap( cxios_context ) ! return back to nemo context 2138 2243 END SUBROUTINE iom_setkt 2139 2244 … … 2149 2254 CALL iom_swap( cdname ) ! swap to cdname context 2150 2255 CALL xios_context_finalize() ! finalize the context 2151 IF( cdname /= TRIM(cxios_context) ) CALL iom_swap( TRIM(cxios_context)) ! return back to nemo context2256 IF( cdname /= cxios_context ) CALL iom_swap( cxios_context ) ! return back to nemo context 2152 2257 ENDIF 2153 2258 ! … … 2170 2275 ! 2171 2276 CALL iom_set_domain_attr("grid_"//cdgrd, ni_glo=Ni0glo,nj_glo=Nj0glo,ibegin=mig0(Nis0)-1,jbegin=mjg0(Njs0)-1,ni=Ni_0,nj=Nj_0) 2172 CALL iom_set_domain_attr("grid_"//cdgrd, data_dim=2, data_ibegin = 0, data_ni = Ni_0, data_jbegin = 0, data_nj = Nj_0)2277 CALL iom_set_domain_attr("grid_"//cdgrd, data_dim=2, data_ibegin = -nn_hls, data_ni = jpi, data_jbegin = -nn_hls, data_nj = jpj) 2173 2278 !don't define lon and lat for restart reading context. 2174 2279 IF ( .NOT.ldrxios ) & … … 2269 2374 CALL dom_ngb( 180.0_wp, 90.0_wp, ix, iy, 'T' ) ! i-line that passes near the North Pole : Reference latitude (used in plots) 2270 2375 CALL iom_set_domain_attr("gznl", ni_glo=Ni0glo, nj_glo=Nj0glo, ibegin=mig0(Nis0)-1, jbegin=mjg0(Njs0)-1, ni=Ni_0, nj=Nj_0) 2271 CALL iom_set_domain_attr("gznl", data_dim=2, data_ibegin = 0, data_ni = Ni_0, data_jbegin = 0, data_nj = Nj_0)2376 CALL iom_set_domain_attr("gznl", data_dim=2, data_ibegin = -nn_hls, data_ni = jpi, data_jbegin = -nn_hls, data_nj = jpj) 2272 2377 CALL iom_set_domain_attr("gznl", lonvalue = real(zlon, dp), & 2273 2378 & latvalue = real(RESHAPE(plat(Nis0:Nie0, Njs0:Nje0),(/ Ni_0*Nj_0 /)),dp)) 2274 CALL iom_set_zoom_domain_attr("ptr", ibegin=ix-1, jbegin=0, ni=1, nj=Nj _0)2379 CALL iom_set_zoom_domain_attr("ptr", ibegin=ix-1, jbegin=0, ni=1, nj=Nj0glo) 2275 2380 ! 2276 2381 CALL iom_update_file_name('ptr')
Note: See TracChangeset
for help on using the changeset viewer.