- Timestamp:
- 2017-06-29T11:41:55+02:00 (7 years ago)
- Location:
- branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/IOM
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/IOM/in_out_manager.F90
r8001 r8243 50 50 INTEGER :: nn_chunksz !: chunksize (bytes) for NetCDF file (works only with iom_nf90 routines) 51 51 LOGICAL :: ln_xios_read !: use xios to read single file restart 52 INTEGER :: nn_wxios !: write resart using xios 0 - no, 1 - single, 2 - multiple file output 52 53 #if defined key_netcdf4 53 54 !!---------------------------------------------------------------------- … … 153 154 LOGICAL :: lsp_area = .TRUE. !: to make a control print over a specific area 154 155 CHARACTER(lc) :: cxios_context !: context name used in xios 155 CHARACTER(lc) :: rxios_context !: context name used in xios to read restart 156 CHARACTER(lc) :: rxios_context = "nemo_rst" !: context name used in xios to read restart 157 CHARACTER(lc) :: wxios_context = "nemo_rstw" !: context name used in xios to write restart file 156 158 157 159 !!---------------------------------------------------------------------- -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90
r8161 r8243 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, wxioso 44 44 # endif 45 45 USE ioipsl, ONLY : ju2ymds ! for calendar 46 46 USE crs ! Grid coarsening 47 USE lib_fortran 47 USE sbc_oce, ONLY : lk_oasis, ln_coupled_iceshelf_fluxes, ln_apr_dyn, ln_rnf, nn_components, jp_iam_sas 48 USE diadct, ONLY : lk_diadct 48 49 49 50 IMPLICIT NONE 51 ! values needed to set correctlyfiles in reast file when using XIOS for writing 52 LOGICAL, PUBLIC :: lr_vvl_ztilde, lr_vvl_layer, lr_traadv_cen2 53 50 54 PUBLIC ! must be public to be able to access iom_def through iom 51 52 55 #if defined key_iomput 53 56 LOGICAL, PUBLIC, PARAMETER :: lk_iomput = .TRUE. !: iom_put flag … … 55 58 LOGICAL, PUBLIC, PARAMETER :: lk_iomput = .FALSE. !: iom_put flag 56 59 #endif 60 57 61 PUBLIC iom_init, iom_swap, iom_open, iom_close, iom_setkt, iom_varid, iom_get, iom_gettime, iom_rstput, iom_put 58 62 PUBLIC iom_getatt, iom_use, iom_context_finalize … … 64 68 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 65 69 PRIVATE set_grid, set_grid_bounds, set_scalar, set_xmlatt, set_mooring, iom_update_file_name, iom_sdate 66 PRIVATE set_rst_vars, set_rstr_active 70 PRIVATE set_rst_vars, set_rstr_active, set_rstw_active 67 71 # endif 68 72 … … 88 92 CONTAINS 89 93 90 SUBROUTINE iom_init( cdname )94 SUBROUTINE iom_init( cdname, filename, it ) 91 95 !!---------------------------------------------------------------------- 92 96 !! *** ROUTINE *** … … 108 112 ! 109 113 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: z_bnds 114 CHARACTER(len=*), OPTIONAL, INTENT(in) :: filename 115 LOGICAL :: lrst_context ! is context related to restart 116 INTEGER, OPTIONAL :: it ! timestep when subroutine was called 110 117 !!---------------------------------------------------------------------- 111 118 #if ! defined key_xios2 … … 119 126 CALL xios_context_initialize(TRIM(clname), mpi_comm_opa) 120 127 CALL iom_swap( cdname ) 128 lrst_context = (TRIM(cdname) == TRIM(wxios_context)).OR.(TRIM(cdname) == TRIM(rxios_context)) 121 129 122 130 ! calendar parameters … … 145 153 CALL set_scalar 146 154 147 IF( TRIM(cdname) == TRIM(cxios_context) .OR. TRIM(cdname) == TRIM(rxios_context)) THEN155 IF( TRIM(cdname) == TRIM(cxios_context) ) THEN 148 156 CALL set_grid( "T", glamt, gphit, ln_mskland ) 149 157 CALL set_grid( "U", glamu, gphiu, ln_mskland ) … … 151 159 CALL set_grid( "W", glamt, gphit, ln_mskland ) 152 160 CALL set_grid_znl( gphit ) 153 CALL set_grid("N",glamt, gphit, .FALSE.) ! not masked values154 161 ! 155 IF( ln_cfmeta .AND. TRIM(cdname) .NE. TRIM(rxios_context)) THEN ! Add additional grid metadata162 IF( ln_cfmeta ) THEN ! Add additional grid metadata 156 163 CALL iom_set_domain_attr("grid_T", area = e12t(nldi:nlei, nldj:nlej)) 157 164 CALL iom_set_domain_attr("grid_U", area = e12u(nldi:nlei, nldj:nlej)) … … 164 171 ENDIF 165 172 ENDIF 173 174 IF( lrst_context ) CALL set_grid("N",glamt, gphit, .FALSE.) ! not masked values 166 175 167 176 IF( TRIM(cdname) == TRIM(cxios_context)//"_crs" ) THEN … … 176 185 CALL dom_grid_glo ! Return to parent grid domain 177 186 ! 178 IF( ln_cfmeta .AND. TRIM(cdname) .NE. TRIM(rxios_context)) THEN ! Add additional grid metadata187 IF( ln_cfmeta .AND. .NOT.lrst_context) THEN ! Add additional grid metadata 179 188 CALL iom_set_domain_attr("grid_T", area = e1e2t_crs(nldi:nlei, nldj:nlej)) 180 189 CALL iom_set_domain_attr("grid_U", area = e1u_crs(nldi:nlei, nldj:nlej) * e2u_crs(nldi:nlei, nldj:nlej)) … … 188 197 ENDIF 189 198 190 ! vertical grid definition 191 CALL iom_set_axis_attr( "deptht", paxis = gdept_1d ) 192 CALL iom_set_axis_attr( "depthu", paxis = gdept_1d ) 193 CALL iom_set_axis_attr( "depthv", paxis = gdept_1d ) 194 CALL iom_set_axis_attr( "depthw", paxis = gdepw_1d ) 195 199 ! vertical grid definition 200 CALL iom_set_axis_attr( "deptht", paxis = gdept_1d ) 201 CALL iom_set_axis_attr( "depthu", paxis = gdept_1d ) 202 CALL iom_set_axis_attr( "depthv", paxis = gdept_1d ) 203 CALL iom_set_axis_attr( "depthw", paxis = gdepw_1d ) 204 205 IF(.NOT.lrst_context) THEN 196 206 ! Add vertical grid bounds 197 207 #if ! defined key_xios2 198 z_bnds(: ,1) = gdepw_1d(:)199 z_bnds(1:jpkm1,2) = gdepw_1d(2:jpk)200 z_bnds(jpk: ,2) = gdepw_1d(jpk) + e3t_1d(jpk)201 #else 202 z_bnds(1 ,:) = gdepw_1d(:)203 z_bnds(2,1:jpkm1) = gdepw_1d(2:jpk)204 z_bnds(2,jpk: ) = gdepw_1d(jpk) + e3t_1d(jpk)205 #endif 206 207 CALL iom_set_axis_attr( "deptht", bounds=z_bnds )208 CALL iom_set_axis_attr( "depthu", bounds=z_bnds )209 CALL iom_set_axis_attr( "depthv", bounds=z_bnds )208 z_bnds(: ,1) = gdepw_1d(:) 209 z_bnds(1:jpkm1,2) = gdepw_1d(2:jpk) 210 z_bnds(jpk: ,2) = gdepw_1d(jpk) + e3t_1d(jpk) 211 #else 212 z_bnds(1 ,:) = gdepw_1d(:) 213 z_bnds(2,1:jpkm1) = gdepw_1d(2:jpk) 214 z_bnds(2,jpk: ) = gdepw_1d(jpk) + e3t_1d(jpk) 215 #endif 216 217 CALL iom_set_axis_attr( "deptht", bounds=z_bnds ) 218 CALL iom_set_axis_attr( "depthu", bounds=z_bnds ) 219 CALL iom_set_axis_attr( "depthv", bounds=z_bnds ) 210 220 211 221 #if ! defined key_xios2 212 z_bnds(: ,2) = gdept_1d(:)213 z_bnds(2:jpk,1) = gdept_1d(1:jpkm1)214 z_bnds(1 ,1) = gdept_1d(1) - e3w_1d(1)215 #else 216 z_bnds(2,: ) = gdept_1d(:)217 z_bnds(1,2:jpk) = gdept_1d(1:jpkm1)218 z_bnds(1,1 ) = gdept_1d(1) - e3w_1d(1)219 #endif 220 CALL iom_set_axis_attr( "depthw", bounds=z_bnds )221 222 z_bnds(: ,2) = gdept_1d(:) 223 z_bnds(2:jpk,1) = gdept_1d(1:jpkm1) 224 z_bnds(1 ,1) = gdept_1d(1) - e3w_1d(1) 225 #else 226 z_bnds(2,: ) = gdept_1d(:) 227 z_bnds(1,2:jpk) = gdept_1d(1:jpkm1) 228 z_bnds(1,1 ) = gdept_1d(1) - e3w_1d(1) 229 #endif 230 CALL iom_set_axis_attr( "depthw", bounds=z_bnds ) 231 ENDIF 222 232 223 233 # if defined key_floats … … 237 247 !set which fields are to be read from restart file 238 248 CALL set_rstr_active() 249 ELSE IF ( TRIM(cdname) == TRIM(wxios_context)) THEN 250 !set names of the fields in restart file IF using XIOS to read/write data 251 CALL set_rst_vars() 252 !set which fields are to be read from restart file 253 CALL set_rstw_active(filename, it) 239 254 ELSE 240 255 CALL set_xmlatt … … 255 270 256 271 END SUBROUTINE iom_init 257 258 272 259 273 SUBROUTINE set_rst_vars() … … 370 384 IF( clpath(LEN_TRIM(clpath):) /= '/' ) clpath = TRIM(clpath) // '/' 371 385 IF( TRIM(Agrif_CFixed()) == '0' ) THEN 372 rst_file = TRIM(c n_ocerst_indir)//TRIM(cn_ocerst_in)386 rst_file = TRIM(clpath)//TRIM(cn_ocerst_in) 373 387 ELSE 374 rst_file = TRIM(c n_ocerst_indir)//'1_'//TRIM(cn_ocerst_in)388 rst_file = TRIM(clpath)//'1_'//TRIM(cn_ocerst_in) 375 389 ENDIF 376 390 !set name of the restart file and enable available fields … … 394 408 #endif 395 409 END SUBROUTINE set_rstr_active 410 411 SUBROUTINE set_rstw_active(rst_file, it) 412 !sets enabled = .TRUE. for each field in restart file 413 #if defined key_xios2 414 CHARACTER(len=*) :: rst_file 415 INTEGER, INTENT(in) :: it ! timestep when iom_init was called 416 TYPE(xios_field) :: field_hdl 417 TYPE(xios_file) :: file_hdl 418 TYPE(xios_filegroup) :: filegroup_hdl 419 INTEGER :: i 420 421 !set then name of the restart file (OUTPUT!) and enable available fields 422 if(lwp) WRITE(numout,*) 'Setting (output) restart filename (for XIOS) to: ',TRIM(rst_file) 423 CALL xios_get_handle("file_definition", filegroup_hdl ) 424 CALL xios_add_child(filegroup_hdl, file_hdl, 'wrestart') 425 IF(wxioso.eq.1) THEN 426 CALL xios_set_file_attr( "wrestart", type="one_file", name = TRIM(rst_file), & 427 enabled=.TRUE., mode="write", output_freq=xios_timestep) 428 if(lwp) write(numout,*) 'OPEN ', trim(rst_file), ' in one_file mode' 429 ELSE 430 CALL xios_set_file_attr( "wrestart", type="multiple_file", name = TRIM(rst_file),& 431 enabled=.TRUE., mode="write", output_freq=xios_timestep) 432 if(lwp) write(numout,*) 'OPEN ', trim(rst_file), ' in multiple_file mode' 433 ENDIF 434 435 CALL xios_set_file_attr( "wrestart", name=trim(rst_file)) 436 call flush(numout) 437 ! CALL xios_update_calendar(it+1) ! + one because we open restart file 438 ! 1 timestep before write 439 440 !define fields for restart write context 441 !in restart.F90 442 DO i= 1, 17 443 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 444 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 445 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 446 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 447 ENDDO 448 !in daymod.F90 449 DO i= 18, 20 450 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 451 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 452 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 453 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 454 ENDDO 455 !end daymod.F90 456 !sbcmod.F90 457 DO i= 21, 25 458 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 459 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 460 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 461 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 462 ENDDO 463 !end sbcmod.F90 464 !ALL FIELDS ABOUVE ALWAYS 465 !zdftke.F90 466 #if defined key_zdftke || defined key_esopa 467 DO i= 26, 31 468 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 469 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 470 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 471 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 472 ENDDO 473 #endif 474 !end zdftke.F90 475 !traqsr.F90 476 i = 34 477 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 478 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 479 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 480 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 481 i = 37 482 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 483 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 484 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 485 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 486 !END traqsr.F90 487 #if defined key_dynspg_flt || defined key_esopa 488 !dynspg_flt.F90 489 DO i= 35, 36 490 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 491 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 492 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 493 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 494 ENDDO 495 !end dynspg_flt.F90 496 #endif 497 !trasbc.F90 START 498 DO i= 32, 33 499 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 500 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 501 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 502 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 503 ENDDO 504 DO i= 69, 71 505 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 506 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 507 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 508 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 509 ENDDO 510 !trasbc.F90 END 511 IF( lk_oasis) THEN 512 ! ln_coupled_iceshelf_fluxes uninitialised unless lk_oasis=true 513 IF( ln_coupled_iceshelf_fluxes ) THEN 514 DO i= 38, 43 515 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 516 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 517 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 518 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 519 ENDDO 520 ENDIF 521 ENDIF 522 #if defined key_zdfkpp 523 i = 44 524 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 525 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 526 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 527 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 528 #endif 529 !dia_hsb_rst 530 #if defined key_diadct 531 IF( lk_diadct ) THEN 532 DO i= 45, 47 533 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 534 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 535 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 536 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 537 ENDDO 538 539 DO i= 50, 53 540 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 541 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 542 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 543 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 544 ENDDO 545 IF( .NOT. lk_vvl ) THEN 546 DO i= 48, 48 547 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 548 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 549 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 550 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 551 ENDDO 552 DO i= 54, 55 553 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 554 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 555 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 556 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 557 ENDDO 558 ENDIF 559 ENDIF 560 #endif 561 !end dia_hsb_rst 562 !domvvl.F90 563 IF( lk_vvl ) THEN 564 DO i= 56, 57 565 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 566 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 567 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 568 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 569 ENDDO 570 IF( lr_vvl_ztilde .OR. lr_vvl_layer ) THEN ! z_tilde and layer cases ! 571 DO i= 58, 59 572 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 573 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 574 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 575 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 576 ENDDO 577 END IF 578 IF( lr_vvl_ztilde ) THEN ! z_tilde case ! 579 i=60 580 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 581 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 582 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 583 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 584 ENDIF 585 ENDIF 586 !end domvvl.F90 587 !dynspg_ts.F90 588 #if defined key_dynspg_ts || defined key_esopa 589 DO i= 61, 62 590 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 591 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 592 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 593 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 594 ENDDO 595 IF (.NOT.ln_bt_av) THEN 596 DO i= 63, 68 597 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 598 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 599 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 600 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 601 ENDDO 602 ENDIF 603 #if defined key_agrif 604 ! Save time integrated fluxes 605 IF ( .NOT.Agrif_Root() ) THEN 606 DO i= 84, 85 607 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 608 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 609 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 610 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 611 ENDDO 612 ENDIF 613 #endif 614 #endif 615 !end dynspg_ts.F90 616 !sbcapr.F90 617 IF( ln_apr_dyn) THEN 618 i = 72 619 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 620 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 621 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 622 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 623 ENDIF 624 !end sbcapr.F90 625 !sbcrnf.F90 626 IF( ln_rnf ) THEN 627 DO i= 73, 75 628 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 629 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 630 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 631 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 632 ENDDO 633 ENDIF 634 !end sbcrnf.F90 635 !sbcssm.F90 636 IF( nn_components /= jp_iam_sas .AND. nn_fsbc .NE. 1) THEN 637 DO i= 76, 81 638 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 639 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 640 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 641 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 642 ENDDO 643 i = 83 644 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 645 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 646 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 647 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 648 IF( lk_vvl ) THEN 649 i = 82 650 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 651 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 652 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 653 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 654 ENDIF 655 ENDIF 656 !end sbcssm.F90 657 IF( lr_traadv_cen2 ) THEN 658 DO i= 84, 85 659 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_fields(i)%vname)) 660 CALL xios_set_attr (field_hdl, enabled = .TRUE., prec = 8, & 661 grid_ref = TRIM(rst_fields(i)%grid ), operation = "instant") 662 if(lwp) write(numout,*) 'id= ',i,' set ', TRIM(rst_fields(i)%vname), ' enabled' 663 ENDDO 664 ENDIF 665 #endif 666 END SUBROUTINE set_rstw_active 396 667 397 668 SUBROUTINE iom_swap( cdname ) … … 510 781 ! try to find if the file to be opened already exist 511 782 ! ============= 512 INQUIRE( FILE = clname, EXIST = llok ) 783 lxios_sini = .TRUE. 784 if(lwm) INQUIRE( FILE = clname, EXIST = llok ) 785 IF(lk_mpp) CALL mpp_bcast(llok) 513 786 IF( .NOT.llok ) THEN 514 787 ! we try to add the cpu number to the name … … 528 801 icnt = icnt + 1 529 802 END DO 530 ELSE 531 lxios_sini = .TRUE. 803 lxios_sini = .FALSE. 532 804 ENDIF 533 805 IF( llwrt ) THEN … … 1263 1535 !! INTERFACE iom_rstput 1264 1536 !!---------------------------------------------------------------------- 1265 SUBROUTINE iom_rp0d( kt, kwrite, kiomid, cdvar, pvar, ktype )1537 SUBROUTINE iom_rp0d( kt, kwrite, kiomid, cdvar, pvar, ktype, lxios ) 1266 1538 INTEGER , INTENT(in) :: kt ! ocean time-step 1267 1539 INTEGER , INTENT(in) :: kwrite ! writing time-step … … 1270 1542 REAL(wp) , INTENT(in) :: pvar ! written field 1271 1543 INTEGER , INTENT(in), OPTIONAL :: ktype ! variable external type 1544 LOGICAL, OPTIONAL :: lxios ! xios write flag 1545 LOGICAL :: lx ! local xios write flag 1272 1546 INTEGER :: ivid ! variable id 1273 IF( kiomid > 0 ) THEN 1274 IF( iom_file(kiomid)%nfid > 0 ) THEN 1275 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1276 SELECT CASE (iom_file(kiomid)%iolib) 1277 CASE (jpioipsl ) ; CALL iom_ioipsl_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r0d = pvar ) 1278 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r0d = pvar ) 1279 CASE (jprstdimg) ; IF( kt == kwrite ) CALL iom_rstdimg_rstput( kiomid, cdvar, ivid, pvar ) 1280 CASE DEFAULT 1281 CALL ctl_stop( 'iom_rp0d: accepted IO library are only jpioipsl, jpnf90 and jprstdimg' ) 1282 END SELECT 1547 1548 lx = .FALSE. 1549 IF(PRESENT(lxios)) lx = lxios 1550 IF( lx ) THEN 1551 #ifdef key_iomput 1552 IF( kt == kwrite ) THEN 1553 IF(lwp) write(numout,*) 'RESTART: write (XIOS 0D) ',trim(cdvar) 1554 CALL xios_send_field(trim(cdvar), pvar) 1555 ENDIF 1556 #endif 1557 ELSE 1558 IF( kiomid > 0 ) THEN 1559 IF( iom_file(kiomid)%nfid > 0 ) THEN 1560 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1561 SELECT CASE (iom_file(kiomid)%iolib) 1562 CASE (jpioipsl ) ; CALL iom_ioipsl_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r0d = pvar ) 1563 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r0d = pvar ) 1564 CASE (jprstdimg) ; IF( kt == kwrite ) CALL iom_rstdimg_rstput( kiomid, cdvar, ivid, pvar ) 1565 CASE DEFAULT 1566 CALL ctl_stop( 'iom_rp0d: accepted IO library are only jpioipsl, jpnf90 and jprstdimg' ) 1567 END SELECT 1568 ENDIF 1283 1569 ENDIF 1284 1570 ENDIF 1285 1571 END SUBROUTINE iom_rp0d 1286 1572 1287 SUBROUTINE iom_rp1d( kt, kwrite, kiomid, cdvar, pvar, ktype )1573 SUBROUTINE iom_rp1d( kt, kwrite, kiomid, cdvar, pvar, ktype, lxios ) 1288 1574 INTEGER , INTENT(in) :: kt ! ocean time-step 1289 1575 INTEGER , INTENT(in) :: kwrite ! writing time-step … … 1292 1578 REAL(wp) , INTENT(in), DIMENSION( :) :: pvar ! written field 1293 1579 INTEGER , INTENT(in), OPTIONAL :: ktype ! variable external type 1580 LOGICAL, OPTIONAL :: lxios ! xios write flag 1581 LOGICAL :: lx ! local xios write flag 1294 1582 INTEGER :: ivid ! variable id 1295 IF( kiomid > 0 ) THEN 1296 IF( iom_file(kiomid)%nfid > 0 ) THEN 1297 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1298 SELECT CASE (iom_file(kiomid)%iolib) 1299 CASE (jpioipsl ) ; CALL iom_ioipsl_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r1d = pvar ) 1300 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r1d = pvar ) 1301 CASE (jprstdimg) ; IF( kt == kwrite ) CALL iom_rstdimg_rstput( kiomid, cdvar, ivid, pv_r1d = pvar ) 1302 CASE DEFAULT 1303 CALL ctl_stop( 'iom_rp1d: accepted IO library are only jpioipsl, jpnf90 and jprstdimg' ) 1304 END SELECT 1583 1584 lx = .FALSE. 1585 IF(PRESENT(lxios)) lx = lxios 1586 IF( lx ) THEN 1587 #ifdef key_iomput 1588 IF( kt == kwrite ) THEN 1589 IF(lwp) write(numout,*) 'RESTART: write (XIOS 1D) ',trim(cdvar) 1590 CALL xios_send_field(trim(cdvar), pvar) 1591 ENDIF 1592 #endif 1593 ELSE 1594 IF( kiomid > 0 ) THEN 1595 IF( iom_file(kiomid)%nfid > 0 ) THEN 1596 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1597 SELECT CASE (iom_file(kiomid)%iolib) 1598 CASE (jpioipsl ) ; CALL iom_ioipsl_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r1d = pvar ) 1599 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r1d = pvar ) 1600 CASE (jprstdimg) ; IF( kt == kwrite ) CALL iom_rstdimg_rstput( kiomid, cdvar, ivid, pv_r1d = pvar ) 1601 CASE DEFAULT 1602 CALL ctl_stop( 'iom_rp1d: accepted IO library are only jpioipsl, jpnf90 and jprstdimg' ) 1603 END SELECT 1604 ENDIF 1305 1605 ENDIF 1306 1606 ENDIF 1307 1607 END SUBROUTINE iom_rp1d 1308 1608 1309 SUBROUTINE iom_rp2d( kt, kwrite, kiomid, cdvar, pvar, ktype )1609 SUBROUTINE iom_rp2d( kt, kwrite, kiomid, cdvar, pvar, ktype, lxios ) 1310 1610 INTEGER , INTENT(in) :: kt ! ocean time-step 1311 1611 INTEGER , INTENT(in) :: kwrite ! writing time-step … … 1314 1614 REAL(wp) , INTENT(in), DIMENSION(:, : ) :: pvar ! written field 1315 1615 INTEGER , INTENT(in), OPTIONAL :: ktype ! variable external type 1616 LOGICAL, OPTIONAL :: lxios ! xios write flag 1617 LOGICAL :: lx ! local xios write flag 1316 1618 INTEGER :: ivid ! variable id 1317 IF( kiomid > 0 ) THEN 1318 IF( iom_file(kiomid)%nfid > 0 ) THEN 1319 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1320 SELECT CASE (iom_file(kiomid)%iolib) 1321 CASE (jpioipsl ) ; CALL iom_ioipsl_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r2d = pvar ) 1322 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r2d = pvar ) 1323 CASE (jprstdimg) ; IF( kt == kwrite ) CALL iom_rstdimg_rstput( kiomid, cdvar, ivid, pv_r2d = pvar ) 1324 CASE DEFAULT 1325 CALL ctl_stop( 'iom_rp2d: accepted IO library are only jpioipsl, jpnf90 and jprstdimg' ) 1326 END SELECT 1619 1620 lx = .FALSE. 1621 IF(PRESENT(lxios)) lx = lxios 1622 IF( lx ) THEN 1623 #ifdef key_iomput 1624 IF( kt == kwrite ) THEN 1625 IF(lwp) write(numout,*) 'RESTART: write (XIOS 2D) ',trim(cdvar) 1626 CALL xios_send_field(trim(cdvar), pvar) 1627 ENDIF 1628 #endif 1629 ELSE 1630 IF( kiomid > 0 ) THEN 1631 IF( iom_file(kiomid)%nfid > 0 ) THEN 1632 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1633 SELECT CASE (iom_file(kiomid)%iolib) 1634 CASE (jpioipsl ) ; CALL iom_ioipsl_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r2d = pvar ) 1635 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r2d = pvar ) 1636 CASE (jprstdimg) ; IF( kt == kwrite ) CALL iom_rstdimg_rstput( kiomid, cdvar, ivid, pv_r2d = pvar ) 1637 CASE DEFAULT 1638 CALL ctl_stop( 'iom_rp2d: accepted IO library are only jpioipsl, jpnf90 and jprstdimg' ) 1639 END SELECT 1640 ENDIF 1327 1641 ENDIF 1328 1642 ENDIF 1329 1643 END SUBROUTINE iom_rp2d 1330 1644 1331 SUBROUTINE iom_rp3d( kt, kwrite, kiomid, cdvar, pvar, ktype )1645 SUBROUTINE iom_rp3d( kt, kwrite, kiomid, cdvar, pvar, ktype, lxios ) 1332 1646 INTEGER , INTENT(in) :: kt ! ocean time-step 1333 1647 INTEGER , INTENT(in) :: kwrite ! writing time-step … … 1336 1650 REAL(wp) , INTENT(in), DIMENSION(:,:,:) :: pvar ! written field 1337 1651 INTEGER , INTENT(in), OPTIONAL :: ktype ! variable external type 1652 LOGICAL, OPTIONAL :: lxios ! xios write flag 1653 LOGICAL :: lx ! local xios write flag 1338 1654 INTEGER :: ivid ! variable id 1339 IF( kiomid > 0 ) THEN 1340 IF( iom_file(kiomid)%nfid > 0 ) THEN 1341 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1342 SELECT CASE (iom_file(kiomid)%iolib) 1343 CASE (jpioipsl ) ; CALL iom_ioipsl_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r3d = pvar ) 1344 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r3d = pvar ) 1345 CASE (jprstdimg) ; IF( kt == kwrite ) CALL iom_rstdimg_rstput( kiomid, cdvar, ivid, pv_r3d = pvar ) 1346 CASE DEFAULT 1347 CALL ctl_stop( 'iom_rp3d: accepted IO library are only jpioipsl and jprstdimg' ) 1348 END SELECT 1655 1656 lx = .FALSE. 1657 IF(PRESENT(lxios)) lx = lxios 1658 IF( lx ) THEN 1659 #ifdef key_iomput 1660 IF( kt == kwrite ) THEN 1661 IF(lwp) write(numout,*) 'RESTART: write (XIOS 3D) ',trim(cdvar) 1662 CALL xios_send_field(trim(cdvar), pvar) 1663 ENDIF 1664 #endif 1665 ELSE 1666 IF( kiomid > 0 ) THEN 1667 IF( iom_file(kiomid)%nfid > 0 ) THEN 1668 ivid = iom_varid( kiomid, cdvar, ldstop = .FALSE. ) 1669 SELECT CASE (iom_file(kiomid)%iolib) 1670 CASE (jpioipsl ) ; CALL iom_ioipsl_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r3d = pvar ) 1671 CASE (jpnf90 ) ; CALL iom_nf90_rstput( kt, kwrite, kiomid, cdvar, ivid, ktype, pv_r3d = pvar ) 1672 CASE (jprstdimg) ; IF( kt == kwrite ) CALL iom_rstdimg_rstput( kiomid, cdvar, ivid, pv_r3d = pvar ) 1673 CASE DEFAULT 1674 CALL ctl_stop( 'iom_rp3d: accepted IO library are only jpioipsl and jprstdimg' ) 1675 END SELECT 1676 ENDIF 1349 1677 ENDIF 1350 1678 ENDIF … … 1598 1926 #endif 1599 1927 CALL iom_set_domain_attr("grid_"//cdgrd, data_dim=2, data_ibegin = 1-nldi, data_ni = jpi, data_jbegin = 1-nldj, data_nj = jpj) 1600 CALL iom_set_domain_attr("grid_"//cdgrd, lonvalue = RESHAPE(plon(nldi:nlei, nldj:nlej),(/ ni*nj /)), &1601 & latvalue = RESHAPE(plat(nldi:nlei, nldj:nlej),(/ ni*nj /)))1602 1928 1603 1929 IF ( lmask ) THEN 1930 CALL iom_set_domain_attr("grid_"//cdgrd, lonvalue = RESHAPE(plon(nldi:nlei,nldj:nlej),(/ ni*nj /)), & 1931 & latvalue = RESHAPE(plat(nldi:nlei, nldj:nlej),(/ ni*nj /))) 1604 1932 ! mask land points, keep values on coast line -> specific mask for U, V and W points 1605 1933 SELECT CASE ( cdgrd ) -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/IOM/iom_def.F90
r8038 r8243 55 55 LOGICAL, PUBLIC :: lxios_sini = .FALSE. ! is restart in a single file 56 56 LOGICAL, PUBLIC :: lxios_set = .FALSE. 57 !XIOS read restart 58 LOGICAL, PUBLIC :: lwxios !: read single file restart using XIOS 59 INTEGER, PUBLIC :: wxioso !: type of restart file when writing using XIOS 1 - single, 2 - multiple 60 LOGICAL, PUBLIC :: lspr !: single processor read data flag 61 57 62 58 63 TYPE, PUBLIC :: file_descriptor … … 72 77 REAL(kind=wp), DIMENSION(jpmax_vars) :: scf !: scale_factor of the variables 73 78 REAL(kind=wp), DIMENSION(jpmax_vars) :: ofs !: add_offset of the variables 79 LOGICAL :: lsngl = .FALSE. !: one file flag 74 80 END TYPE file_descriptor 75 81 TYPE(file_descriptor), DIMENSION(jpmax_files), PUBLIC :: iom_file !: array containing the info for all opened files -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/IOM/iom_nf90.F90
r7924 r8243 72 72 INTEGER :: ihdf5 ! local variable for retrieval of value for NF90_HDF5 73 73 LOGICAL :: llclobber ! local definition of ln_clobber 74 INTEGER :: lng ! length of the string - unlimited dimension 74 75 !--------------------------------------------------------------------- 75 76 … … 92 93 CALL iom_nf90_check(NF90_SET_FILL( if90id, NF90_NOFILL, idmy ), clinfo) 93 94 ELSE ! ... in read mode 94 IF(lwp) WRITE(numout,*) TRIM(clinfo)//' open existing file: '//TRIM(cdname)//' in READ mode' 95 CALL iom_nf90_check(NF90_OPEN( TRIM(cdname), NF90_NOWRITE, if90id, chunksize = ichunk ), clinfo) 95 IF(lwp) WRITE(numout,*) & 96 TRIM(clinfo)//' open existing file: '//TRIM(cdname)//' in READ mode (Single PE read ',lspr,')' 97 IF(lspr) THEN 98 IF(lwm) CALL iom_nf90_check(NF90_OPEN( TRIM(cdname), NF90_NOWRITE, if90id, chunksize = ichunk ), clinfo) 99 IF(lk_mpp) call mpp_bcast(if90id) 100 ELSE 101 CALL iom_nf90_check(NF90_OPEN( TRIM(cdname), NF90_NOWRITE, if90id, chunksize = ichunk ), clinfo) 102 ENDIF 96 103 ENDIF 97 104 ELSE ! the file does not exist (or we overwrite it) … … 152 159 iom_file(kiomid)%nvars = 0 153 160 iom_file(kiomid)%irec = -1 ! useless for NetCDF files, used to know if the file is in define mode 154 CALL iom_nf90_check(NF90_Inquire(if90id, unlimitedDimId = iom_file(kiomid)%iduld), clinfo) 161 IF(lwm) CALL iom_nf90_check(NF90_Inquire(if90id, unlimitedDimId = iom_file(kiomid)%iduld), clinfo) 162 IF(lk_mpp) CALL mpp_bcast(iom_file(kiomid)%iduld) 155 163 IF ( iom_file(kiomid)%iduld .GE. 0 ) THEN 156 CALL iom_nf90_check(NF90_Inquire_Dimension(if90id, iom_file(kiomid)%iduld, &164 IF(lwm) CALL iom_nf90_check(NF90_Inquire_Dimension(if90id, iom_file(kiomid)%iduld, & 157 165 & name = iom_file(kiomid)%uldname, & 158 166 & len = iom_file(kiomid)%lenuld ), clinfo ) 159 ENDIF 160 IF(lwp) WRITE(numout,*) ' ---> '//TRIM(cdname)//' OK' 167 IF(lk_mpp) THEN 168 lng = 32 ! from iom_file definition 169 CALL mpp_bcast(iom_file(kiomid)%uldname, lng) 170 CALL mpp_bcast(iom_file(kiomid)%lenuld) 171 ENDIF 172 ENDIF 173 iom_file(kiomid)%lsngl = lxios_sini.and.lspr 174 IF(lwp) WRITE(numout,*) ' ---> '//TRIM(cdname)//' OK. Is one file?:', lxios_sini, '1PE read:',iom_file(kiomid)%lsngl 161 175 ELSE 162 176 kiomid = 0 ! return error flag … … 177 191 ! 178 192 clinfo = ' iom_nf90_close , file: '//TRIM(iom_file(kiomid)%name) 179 CALL iom_nf90_check(NF90_CLOSE(iom_file(kiomid)%nfid), clinfo)193 IF(lwp.OR.(.NOT.lwp.AND..NOT.iom_file(kiomid)%lsngl)) CALL iom_nf90_check(NF90_CLOSE(iom_file(kiomid)%nfid), clinfo) 180 194 ! 181 195 END SUBROUTINE iom_nf90_close … … 202 216 LOGICAL :: llok ! ok test 203 217 CHARACTER(LEN=100) :: clinfo ! info character 218 REAL(wp) :: rwp ! real scratch variable 204 219 !!----------------------------------------------------------------------- 205 220 clinfo = ' iom_nf90_varid, file: '//TRIM(iom_file(kiomid)%name)//', var: '//TRIM(cdvar) … … 208 223 if90id = iom_file(kiomid)%nfid ! get back NetCDF file id 209 224 ! 210 llok = NF90_INQ_VARID( if90id, TRIM(cdvar), ivarid ) == nf90_noerr ! does the variable exist in the file 225 IF(lwm) llok = NF90_INQ_VARID( if90id, TRIM(cdvar), ivarid ) == nf90_noerr ! does the variable exist in the file 226 IF(lk_mpp) CALL mpp_bcast(llok) 211 227 IF( llok ) THEN 212 228 iom_nf90_varid = kiv 213 229 iom_file(kiomid)%nvars = kiv 230 IF(lk_mpp) CALL mpp_bcast(ivarid) 214 231 iom_file(kiomid)%nvid(kiv) = ivarid 215 232 iom_file(kiomid)%cn_var(kiv) = TRIM(cdvar) 216 CALL iom_nf90_check(NF90_Inquire_Variable(if90id, ivarid, ndims = i_nvd), clinfo) ! number of dimensions 233 IF(lwm) CALL iom_nf90_check(NF90_Inquire_Variable(if90id, ivarid, ndims = i_nvd), clinfo) ! number of dimensions 234 IF(lk_mpp) CALL mpp_bcast(i_nvd) 217 235 iom_file(kiomid)%ndims(kiv) = i_nvd 218 CALL iom_nf90_check(NF90_Inquire_Variable(if90id, ivarid, dimids = idimid(1:i_nvd)), clinfo) ! dimensions ids 236 IF(lwm) CALL iom_nf90_check(NF90_Inquire_Variable(if90id, ivarid, dimids = idimid(1:i_nvd)), clinfo) ! dimensions ids 237 IF(lk_mpp) CALL mpp_bcast(idimid(1:i_nvd), i_nvd) 219 238 iom_file(kiomid)%luld(kiv) = .FALSE. ! default value 220 239 iom_file(kiomid)%dimsz(:,kiv) = 0 ! reset dimsz in case previously used 221 240 DO ji = 1, i_nvd ! dimensions size 222 CALL iom_nf90_check(NF90_Inquire_Dimension(if90id, idimid(ji), len = iom_file(kiomid)%dimsz(ji,kiv)), clinfo) 241 IF(iom_file(kiomid)%lsngl) THEN ! if single file 242 IF(lwm) CALL iom_nf90_check(NF90_Inquire_Dimension(if90id, idimid(ji), len = iom_file(kiomid)%dimsz(ji,kiv)), clinfo) 243 IF(lk_mpp) CALL mpp_bcast(iom_file(kiomid)%dimsz(ji,kiv)) 244 ELSE 245 CALL iom_nf90_check(NF90_Inquire_Dimension(if90id, idimid(ji), len = iom_file(kiomid)%dimsz(ji,kiv)), clinfo) 246 ENDIF 223 247 IF( idimid(ji) == iom_file(kiomid)%iduld ) iom_file(kiomid)%luld(kiv) = .TRUE. ! unlimited dimension? 224 248 END DO 225 249 !---------- Deal with scale_factor and add_offset 226 llok = NF90_Inquire_attribute(if90id, ivarid, 'scale_factor') == nf90_noerr 250 IF(lwm) llok = NF90_Inquire_attribute(if90id, ivarid, 'scale_factor') == nf90_noerr 251 IF(lk_mpp) CALL mpp_bcast(llok) 227 252 IF( llok) THEN 228 CALL iom_nf90_check(NF90_GET_ATT(if90id, ivarid, 'scale_factor', iom_file(kiomid)%scf(kiv)), clinfo) 253 IF(iom_file(kiomid)%lsngl) THEN ! if single file 254 IF(lwm) CALL iom_nf90_check(NF90_GET_ATT(if90id, ivarid, 'scale_factor', rwp), clinfo) 255 IF(lk_mpp) CALL mpp_bcast(rwp) 256 ELSE 257 CALL iom_nf90_check(NF90_GET_ATT(if90id, ivarid, 'scale_factor', rwp), clinfo) 258 ENDIF 259 iom_file(kiomid)%scf(kiv) = rwp 229 260 ELSE 230 261 iom_file(kiomid)%scf(kiv) = 1. 231 262 END IF 232 llok = NF90_Inquire_attribute(if90id, ivarid, 'add_offset') == nf90_noerr 263 IF(lwm) llok = NF90_Inquire_attribute(if90id, ivarid, 'add_offset') == nf90_noerr 264 IF(lk_mpp) CALL mpp_bcast(llok) 233 265 IF( llok ) THEN 234 CALL iom_nf90_check(NF90_GET_ATT(if90id, ivarid, 'add_offset', iom_file(kiomid)%ofs(kiv)), clinfo) 266 IF(iom_file(kiomid)%lsngl) THEN ! if single file 267 IF(lwm) CALL iom_nf90_check(NF90_GET_ATT(if90id, ivarid, 'add_offset', rwp), clinfo) 268 IF(lk_mpp) CALL mpp_bcast(rwp) 269 ELSE 270 CALL iom_nf90_check(NF90_GET_ATT(if90id, ivarid, 'add_offset', rwp), clinfo) 271 ENDIF 272 iom_file(kiomid)%ofs(kiv) = rwp 235 273 ELSE 236 274 iom_file(kiomid)%ofs(kiv) = 0. 237 275 END IF 238 ! return the simension size276 ! return the dimension size 239 277 IF( PRESENT(kdimsz) ) THEN 240 278 IF( i_nvd == SIZE(kdimsz) ) THEN … … 267 305 !--------------------------------------------------------------------- 268 306 clinfo = 'iom_nf90_g0d , file: '//TRIM(iom_file(kiomid)%name)//', var: '//TRIM(iom_file(kiomid)%cn_var(kvid)) 269 CALL iom_nf90_check(NF90_GET_VAR(iom_file(kiomid)%nfid, iom_file(kiomid)%nvid(kvid), pvar, start = kstart), clinfo ) 307 IF(lwm.OR.(.NOT.iom_file(kiomid)%lsngl)) & 308 & CALL iom_nf90_check(NF90_GET_VAR(iom_file(kiomid)%nfid, iom_file(kiomid)%nvid(kvid), pvar, start = kstart), clinfo ) 309 IF(lk_mpp.AND.iom_file(kiomid)%lsngl) call mpp_bcast(pvar) 270 310 ! 271 311 END SUBROUTINE iom_nf90_g0d … … 290 330 REAL(wp), DIMENSION(:,:) , INTENT( out), OPTIONAL :: pv_r2d ! read field (2D case) 291 331 REAL(wp), DIMENSION(:,:,:) , INTENT( out), OPTIONAL :: pv_r3d ! read field (3D case) 332 ! Temporary arrays 333 ! 334 REAL(wp), ALLOCATABLE, DIMENSION(:) :: t_r1d 335 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: t_r2d ! read field (2D case) 336 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: t_r3d ! read field (3D case) 292 337 ! 293 338 CHARACTER(LEN=100) :: clinfo ! info character 294 339 INTEGER :: if90id ! nf90 identifier of the opened file 295 340 INTEGER :: ivid ! nf90 variable id 341 INTEGER :: klev ! vertical level 342 REAL(wp) :: astart , mpi_wtime 296 343 !--------------------------------------------------------------------- 297 344 clinfo = 'iom_nf90_g123d , file: '//TRIM(iom_file(kiomid)%name)//', var: '//TRIM(iom_file(kiomid)%cn_var(kvid)) … … 299 346 ivid = iom_file(kiomid)%nvid(kvid) ! get back NetCDF var id 300 347 ! 348 if(lwm) astart = mpi_wtime() 301 349 IF( PRESENT(pv_r1d) ) THEN 350 IF(iom_file(kiomid)%lsngl) THEN 351 allocate(t_r1d(iom_file(kiomid)%dimsz(1,kvid))) 352 IF(lwm) THEN 353 if(lwp) write(numout,*) 'READ 1D SINGLE PROCESSOR: ',TRIM(iom_file(kiomid)%cn_var(kvid)) 354 IF(knbdim.EQ.2) THEN 355 CALL iom_nf90_check( NF90_GET_VAR(if90id, ivid, t_r1d, start = (/ 1, kstart(knbdim) /), & 356 & count = (/ iom_file(kiomid)%dimsz(1,kvid), 1 /)), clinfo) 357 ELSE 358 CALL iom_nf90_check( NF90_GET_VAR(if90id, ivid, t_r1d), clinfo) 359 ENDIF 360 ENDIF 361 if(lk_mpp) CALL mpp_bcast(t_r1d, iom_file(kiomid)%dimsz(1,kvid)) 362 pv_r1d(:) = t_r1d(kstart(1):kstart(1)+kcount(1)-1) 363 deallocate(t_r1d) 364 ELSE 302 365 CALL iom_nf90_check( NF90_GET_VAR(if90id, ivid, pv_r1d(: ), start = kstart(1:knbdim), & 303 366 & count = kcount(1:knbdim)), clinfo ) 367 ENDIF 304 368 ELSEIF( PRESENT(pv_r2d) ) THEN 305 CALL iom_nf90_check( NF90_GET_VAR(if90id, ivid, pv_r2d(kx1:kx2,ky1:ky2 ), start = kstart(1:knbdim), & 369 IF(iom_file(kiomid)%lsngl) THEN 370 allocate(t_r2d(iom_file(kiomid)%dimsz(1,kvid), iom_file(kiomid)%dimsz(2,kvid))) 371 IF(lwm) THEN 372 if(lwp) write(numout,*) 'READ 2D SINGLE PROCESSOR: ',TRIM(iom_file(kiomid)%cn_var(kvid)) 373 IF(knbdim.EQ.3) THEN 374 CALL iom_nf90_check( NF90_GET_VAR(if90id, ivid, t_r2d, start = (/ 1, 1, kstart(knbdim) /), & 375 & count = (/ iom_file(kiomid)%dimsz(1,kvid), iom_file(kiomid)%dimsz(2,kvid), 1 /)), clinfo) 376 ELSE 377 CALL iom_nf90_check( NF90_GET_VAR(if90id, ivid, t_r2d), clinfo) 378 ENDIF 379 ENDIF 380 if(lk_mpp) CALL mpp_bcast(t_r2d, iom_file(kiomid)%dimsz(1,kvid), iom_file(kiomid)%dimsz(2,kvid)) 381 pv_r2d(kx1:kx2,ky1:ky2 ) = t_r2d(kstart(1):kstart(1)+kcount(1)-1, kstart(2):kstart(2)+kcount(2)-1) 382 deallocate(t_r2d) 383 ELSE 384 CALL iom_nf90_check( NF90_GET_VAR(if90id, ivid, pv_r2d(kx1:kx2,ky1:ky2 ), start = kstart(1:knbdim), & 306 385 & count = kcount(1:knbdim)), clinfo ) 386 ENDIF 307 387 ELSEIF( PRESENT(pv_r3d) ) THEN 388 IF(iom_file(kiomid)%lsngl) THEN 389 allocate(t_r3d(iom_file(kiomid)%dimsz(1,kvid), iom_file(kiomid)%dimsz(2,kvid), iom_file(kiomid)%dimsz(3,kvid))) 390 if(lwp) write(numout,*) 'READ 3D SINGLE PROCESSOR: ',TRIM(iom_file(kiomid)%cn_var(kvid)) 391 IF(lwm) THEN 392 IF(knbdim.EQ.4) THEN 393 CALL iom_nf90_check( NF90_GET_VAR(if90id, ivid, t_r3d, start = (/ 1, 1, 1, kstart(knbdim) /), & 394 & count = (/ iom_file(kiomid)%dimsz(1,kvid), iom_file(kiomid)%dimsz(2,kvid), & 395 iom_file(kiomid)%dimsz(3,kvid), 1 /)), clinfo) 396 ! do klev = 1, iom_file(kiomid)%dimsz(3,kvid) 397 ! CALL iom_nf90_check( NF90_GET_VAR(if90id, ivid, t_r3d(:,:,klev), start = (/ 1, 1, klev, kstart(knbdim) /), & 398 ! & count = (/ iom_file(kiomid)%dimsz(1,kvid), iom_file(kiomid)%dimsz(2,kvid), 1, 1 /)), clinfo) 399 ! enddo 400 ELSE 401 CALL iom_nf90_check( NF90_GET_VAR(if90id, ivid, t_r3d), clinfo) 402 ENDIF 403 ENDIF 404 if(lk_mpp) CALL mpp_bcast(t_r3d, iom_file(kiomid)%dimsz(1,kvid), iom_file(kiomid)%dimsz(2,kvid), iom_file(kiomid)%dimsz(3,kvid)) 405 pv_r3d(kx1:kx2,ky1:ky2, :) = & 406 t_r3d(kstart(1):kstart(1)+kcount(1)-1, kstart(2):kstart(2)+kcount(2)-1, kstart(3):kstart(3)+kcount(3)-1) 407 deallocate(t_r3d) 408 ELSE 308 409 CALL iom_nf90_check( NF90_GET_VAR(if90id, ivid, pv_r3d(kx1:kx2,ky1:ky2,:), start = kstart(1:knbdim), & 309 410 & count = kcount(1:knbdim)), clinfo ) 310 ENDIF 411 ENDIF 412 ENDIF 413 if(lwm) write(*,*) 'IT took ', mpi_wtime() - astart ,' [s] to read ',TRIM(iom_file(kiomid)%cn_var(kvid)) 311 414 ! 312 415 END SUBROUTINE iom_nf90_g123d … … 327 430 CHARACTER(LEN=100) :: clinfo ! info character 328 431 !--------------------------------------------------------------------- 329 ! 330 if90id = iom_file(kiomid)%nfid 331 llok = NF90_Inquire_attribute(if90id, NF90_GLOBAL, cdatt) == nf90_noerr 332 IF( llok) THEN 333 clinfo = 'iom_nf90_getatt, file: '//TRIM(iom_file(kiomid)%name)//', att: '//TRIM(cdatt) 334 CALL iom_nf90_check(NF90_GET_ATT(if90id, NF90_GLOBAL, cdatt, values=pvar), clinfo) 335 ELSE 336 CALL ctl_warn('iom_nf90_getatt: no attribute '//cdatt//' found') 337 pvar = -999 338 ENDIF 432 ! 433 clinfo = 'iom_nf90_getatt, file: '//TRIM(iom_file(kiomid)%name)//', att: '//TRIM(cdatt) 434 IF(lwm) THEN 435 if90id = iom_file(kiomid)%nfid 436 llok = NF90_Inquire_attribute(if90id, NF90_GLOBAL, cdatt) == nf90_noerr 437 IF( llok) THEN 438 clinfo = 'iom_nf90_getatt, file: '//TRIM(iom_file(kiomid)%name)//', att: '//TRIM(cdatt) 439 CALL iom_nf90_check(NF90_GET_ATT(if90id, NF90_GLOBAL, cdatt, values=pvar), clinfo) 440 ELSE 441 pvar = -999 442 ENDIF 443 ENDIF 444 445 IF( lk_mpp ) call mpp_bcast(pvar) 446 447 IF( pvar .EQ. -999 ) CALL ctl_warn('iom_nf90_getatt: no attribute '//cdatt//' found') 339 448 ! 340 449 END SUBROUTINE iom_nf90_intatt … … 356 465 !--------------------------------------------------------------------- 357 466 clinfo = 'iom_nf90_gettime, file: '//TRIM(iom_file(kiomid)%name)//', var: '//TRIM(iom_file(kiomid)%cn_var(kvid)) 358 CALL iom_nf90_check(NF90_GET_VAR(iom_file(kiomid)%nfid, iom_file(kiomid)%nvid(kvid), ptime(:), & 359 & start=(/ 1 /), count=(/ iom_file(kiomid)%dimsz(1, kvid) /)), clinfo) 360 IF ( PRESENT(cdunits) ) THEN 361 CALL iom_nf90_check(NF90_GET_ATT(iom_file(kiomid)%nfid, iom_file(kiomid)%nvid(kvid), "units", & 362 & values=cdunits), clinfo) 363 ENDIF 364 IF ( PRESENT(cdcalendar) ) THEN 365 CALL iom_nf90_check(NF90_GET_ATT(iom_file(kiomid)%nfid, iom_file(kiomid)%nvid(kvid), "calendar", & 366 & values=cdcalendar), clinfo) 467 IF(lwm) THEN 468 CALL iom_nf90_check(NF90_GET_VAR(iom_file(kiomid)%nfid, iom_file(kiomid)%nvid(kvid), ptime(:), & 469 & start=(/ 1 /), count=(/ iom_file(kiomid)%dimsz(1, kvid) /)), clinfo) 470 IF( lk_mpp ) CALL mpp_bcast(ptime, SIZE(ptime)) 471 IF ( PRESENT(cdunits) ) THEN 472 CALL iom_nf90_check(NF90_GET_ATT(iom_file(kiomid)%nfid, iom_file(kiomid)%nvid(kvid), "units", & 473 & values=cdunits), clinfo) 474 IF( lk_mpp ) CALL mpp_bcast(cdunits, LEN(cdunits)) 475 ENDIF 476 IF ( PRESENT(cdcalendar) ) THEN 477 CALL iom_nf90_check(NF90_GET_ATT(iom_file(kiomid)%nfid, iom_file(kiomid)%nvid(kvid), "calendar", & 478 & values=cdcalendar), clinfo) 479 IF( lk_mpp ) CALL mpp_bcast(cdcalendar, LEN(cdcalendar)) 480 ENDIF 481 ELSE 482 IF( lk_mpp ) CALL mpp_bcast(ptime, SIZE(ptime)) 483 IF ( PRESENT(cdunits) .AND. lk_mpp ) CALL mpp_bcast(cdunits, LEN(cdunits)) 484 IF ( PRESENT(cdcalendar) .AND. lk_mpp ) CALL mpp_bcast(cdcalendar, LEN(cdcalendar)) 367 485 ENDIF 368 486 ! … … 576 694 CHARACTER(LEN=*), INTENT(in) :: cdinfo 577 695 !--------------------------------------------------------------------- 578 IF(kstatus /= nf90_noerr) CALL ctl_stop( 'iom_nf90_check : '//TRIM(nf90_strerror(kstatus)), TRIM(cdinfo) ) 696 IF(kstatus /= nf90_noerr) then 697 CALL ctl_stop( 'iom_nf90_check : '//TRIM(nf90_strerror(kstatus)), TRIM(cdinfo) ) 698 ENDIF 579 699 END SUBROUTINE iom_nf90_check 580 700 -
branches/UKMO/test_moci_test_suite/NEMOGCM/NEMO/OPA_SRC/IOM/restart.F90
r8161 r8243 26 26 USE divcur ! hor. divergence and curl (div & cur routines) 27 27 USE sbc_oce ! for icesheet freshwater input variables 28 USE iom_def, ONLY : lxios_read, lxios_set, lxios_sini 28 USE iom_def, ONLY : lxios_read, lxios_set, lxios_sini, lwxios 29 29 USE timing 30 30 … … 67 67 !!---------------------------------------------------------------------- 68 68 ! 69 69 70 IF( kt == nit000 ) THEN ! default definitions 70 71 lrst_oce = .FALSE. … … 105 106 IF(lwp) THEN 106 107 WRITE(numout,*) 107 SELECT CASE ( jprstlib ) 108 CASE ( jprstdimg ) ; WRITE(numout,*) & 109 ' open ocean restart binary file: ',TRIM(clpath)//clname 110 CASE DEFAULT ; WRITE(numout,*) & 111 ' open ocean restart NetCDF file: ',TRIM(clpath)//clname 112 END SELECT 113 IF ( snc4set%luse ) WRITE(numout,*) ' opened for NetCDF4 chunking and compression' 114 IF( kt == nitrst - 1 ) THEN ; WRITE(numout,*) ' kt = nitrst - 1 = ', kt 115 ELSE ; WRITE(numout,*) ' kt = ' , kt 108 IF(lwxios) THEN 109 WRITE(numout,*) & 110 ' XIOS open ocean restart NetCDF file: ',TRIM(clpath)//TRIM(clname) 111 ELSE 112 SELECT CASE ( jprstlib ) 113 CASE ( jprstdimg ) ; WRITE(numout,*) & 114 ' open ocean restart binary file: ',TRIM(clpath)//TRIM(clname) 115 CASE DEFAULT ; WRITE(numout,*) & 116 ' open ocean restart NetCDF file: ',TRIM(clpath)//TRIM(clname) 117 END SELECT 118 IF ( snc4set%luse ) WRITE(numout,*) ' opened for NetCDF4 chunking and compression' 119 IF( kt == nitrst - 1 ) THEN ; WRITE(numout,*) ' kt = nitrst - 1 = ', kt 120 ELSE ; WRITE(numout,*) ' kt = ' , kt 121 ENDIF 116 122 ENDIF 117 123 ENDIF 118 124 ! 119 CALL iom_open( TRIM(clpath)//TRIM(clname), numrow, ldwrt = .TRUE., kiolib = jprstlib ) 125 IF(.NOT.lwxios) THEN 126 CALL iom_open( TRIM(clpath)//TRIM(clname), numrow, ldwrt = .TRUE., kiolib = jprstlib ) 127 ELSE 128 CALL iom_init( wxios_context, TRIM(clpath)//TRIM(clname) ) 129 CALL xios_update_calendar(nitrst) 130 CALL iom_swap( cxios_context ) 131 ENDIF 120 132 lrst_oce = .TRUE. 121 133 ENDIF … … 136 148 INTEGER, INTENT(in) :: kt ! ocean time-step 137 149 !!---------------------------------------------------------------------- 138 139 CALL iom_rstput( kt, nitrst, numrow, 'rdt' , rdt ) ! dynamics time step140 CALL iom_rstput( kt, nitrst, numrow, 'rdttra1', rdttra(1) ) ! surface tracer time step141 142 CALL iom_rstput( kt, nitrst, numrow, 'ub' , ub ) ! before fields143 CALL iom_rstput( kt, nitrst, numrow, 'vb' , vb )144 CALL iom_rstput( kt, nitrst, numrow, 'tb' , tsb(:,:,:,jp_tem) )145 CALL iom_rstput( kt, nitrst, numrow, 'sb' , tsb(:,:,:,jp_sal) )146 CALL iom_rstput( kt, nitrst, numrow, 'rotb' , rotb )147 CALL iom_rstput( kt, nitrst, numrow, 'hdivb' , hdivb )148 CALL iom_rstput( kt, nitrst, numrow, 'sshb' , sshb )150 IF(lwxios) CALL iom_swap( wxios_context ) 151 CALL iom_rstput( kt, nitrst, numrow, 'rdt' , rdt , lxios = lwxios) ! dynamics time step 152 CALL iom_rstput( kt, nitrst, numrow, 'rdttra1', rdttra(1) , lxios = lwxios) ! surface tracer time step 153 154 CALL iom_rstput( kt, nitrst, numrow, 'ub' , ub , lxios = lwxios) ! before fields 155 CALL iom_rstput( kt, nitrst, numrow, 'vb' , vb , lxios = lwxios) 156 CALL iom_rstput( kt, nitrst, numrow, 'tb' , tsb(:,:,:,jp_tem) , lxios = lwxios) 157 CALL iom_rstput( kt, nitrst, numrow, 'sb' , tsb(:,:,:,jp_sal) , lxios = lwxios) 158 CALL iom_rstput( kt, nitrst, numrow, 'rotb' , rotb , lxios = lwxios) 159 CALL iom_rstput( kt, nitrst, numrow, 'hdivb' , hdivb , lxios = lwxios) 160 CALL iom_rstput( kt, nitrst, numrow, 'sshb' , sshb , lxios = lwxios) 149 161 ! 150 CALL iom_rstput( kt, nitrst, numrow, 'un' , un ) ! now fields151 CALL iom_rstput( kt, nitrst, numrow, 'vn' , vn )152 CALL iom_rstput( kt, nitrst, numrow, 'tn' , tsn(:,:,:,jp_tem) )153 CALL iom_rstput( kt, nitrst, numrow, 'sn' , tsn(:,:,:,jp_sal) )154 CALL iom_rstput( kt, nitrst, numrow, 'rotn' , rotn )155 CALL iom_rstput( kt, nitrst, numrow, 'hdivn' , hdivn )156 CALL iom_rstput( kt, nitrst, numrow, 'sshn' , sshn )157 CALL iom_rstput( kt, nitrst, numrow, 'rhop' , rhop )162 CALL iom_rstput( kt, nitrst, numrow, 'un' , un , lxios = lwxios) ! now fields 163 CALL iom_rstput( kt, nitrst, numrow, 'vn' , vn , lxios = lwxios) 164 CALL iom_rstput( kt, nitrst, numrow, 'tn' , tsn(:,:,:,jp_tem) , lxios = lwxios) 165 CALL iom_rstput( kt, nitrst, numrow, 'sn' , tsn(:,:,:,jp_sal) , lxios = lwxios) 166 CALL iom_rstput( kt, nitrst, numrow, 'rotn' , rotn , lxios = lwxios) 167 CALL iom_rstput( kt, nitrst, numrow, 'hdivn' , hdivn , lxios = lwxios) 168 CALL iom_rstput( kt, nitrst, numrow, 'sshn' , sshn , lxios = lwxios) 169 CALL iom_rstput( kt, nitrst, numrow, 'rhop' , rhop , lxios = lwxios) 158 170 #if defined key_zdfkpp 159 CALL iom_rstput( kt, nitrst, numrow, 'rhd' , rhd )171 CALL iom_rstput( kt, nitrst, numrow, 'rhd' , rhd , lxios = lwxios) 160 172 #endif 161 173 IF( lk_oasis) THEN 162 174 ! ln_coupled_iceshelf_fluxes uninitialised unless lk_oasis=true 163 175 IF( ln_coupled_iceshelf_fluxes ) THEN 164 CALL iom_rstput( kt, nitrst, numrow, 'greenland_icesheet_mass', greenland_icesheet_mass ) 165 CALL iom_rstput( kt, nitrst, numrow, 'greenland_icesheet_timelapsed', greenland_icesheet_timelapsed ) 166 CALL iom_rstput( kt, nitrst, numrow, 'greenland_icesheet_mass_roc', greenland_icesheet_mass_rate_of_change ) 167 CALL iom_rstput( kt, nitrst, numrow, 'antarctica_icesheet_mass', antarctica_icesheet_mass ) 168 CALL iom_rstput( kt, nitrst, numrow, 'antarctica_icesheet_timelapsed', antarctica_icesheet_timelapsed ) 169 CALL iom_rstput( kt, nitrst, numrow, 'antarctica_icesheet_mass_roc', antarctica_icesheet_mass_rate_of_change ) 176 CALL iom_rstput( kt, nitrst, numrow, 'greenland_icesheet_mass', greenland_icesheet_mass ,& 177 & lxios = lwxios) 178 CALL iom_rstput( kt, nitrst, numrow, 'greenland_icesheet_timelapsed', greenland_icesheet_timelapsed ,& 179 & lxios = lwxios) 180 CALL iom_rstput( kt, nitrst, numrow, 'greenland_icesheet_mass_roc', greenland_icesheet_mass_rate_of_change ,& 181 & lxios = lwxios) 182 CALL iom_rstput( kt, nitrst, numrow, 'antarctica_icesheet_mass', antarctica_icesheet_mass , & 183 & lxios = lwxios) 184 CALL iom_rstput( kt, nitrst, numrow, 'antarctica_icesheet_timelapsed', antarctica_icesheet_timelapsed ,& 185 & lxios = lwxios) 186 CALL iom_rstput( kt, nitrst, numrow, 'antarctica_icesheet_mass_roc', & 187 & antarctica_icesheet_mass_rate_of_change , lxios = lwxios) 170 188 ENDIF 171 189 ENDIF 172 190 173 191 IF( kt == nitrst ) THEN 174 CALL iom_close( numrow ) ! close the restart file (only at last time step) 192 IF(.NOT.lwxios) THEN 193 CALL iom_close( numrow ) ! close the restart file (only at last time step) 194 ELSE 195 CALL iom_context_finalize( wxios_context ) 196 CALL iom_swap( cxios_context ) 197 ENDIF 175 198 !!gm IF( .NOT. lk_trdmld ) lrst_oce = .FALSE. 176 199 !!gm not sure what to do here ===>>> ask to Sebastian … … 180 203 nitrst = nstocklist( nrst_lst ) 181 204 ENDIF 182 lrst_oce = .FALSE.183 205 ENDIF 184 206 ! … … 219 241 IF ( llok ) THEN ; jlibalt = jpnf90 ; ELSE ; jlibalt = jprstlib ; ENDIF 220 242 ENDIF 243 lspr = .FALSE. ! do not read restart using single processor 221 244 CALL iom_open( TRIM(clpath)//cn_ocerst_in, numror, kiolib = jlibalt ) 222 245 ! are we using XIOS to read the data? Part above will have to modified once XIOS … … 226 249 IF( lxios_read) THEN 227 250 if(.NOT.lxios_set) then 228 rxios_context = 'nemo_rst'229 251 call iom_init( rxios_context ) 230 252 lxios_set = .TRUE. … … 232 254 ENDIF 233 255 IF( TRIM(Agrif_CFixed()) /= '0' .AND. lxios_read) THEN 234 rxios_context = 'nemo_rst'235 256 call iom_init( rxios_context ) 236 257 ENDIF … … 339 360 ! 340 361 END SUBROUTINE rst_read 341 342 362 !!===================================================================== 343 363 END MODULE restart
Note: See TracChangeset
for help on using the changeset viewer.