- Timestamp:
- 2019-11-13T09:48:43+01:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11756_SI3restart_XIOS/src/OCE/IOM/iom.F90
r11870 r11893 64 64 PUBLIC iom_use, iom_context_finalize, iom_miss_val 65 65 66 PRIVATE iom_rp0d, iom_rp1d, iom_rp2d, iom_rp3d 66 PRIVATE iom_rp0d, iom_rp1d, iom_rp2d, iom_rp3d, iom_rp4d 67 67 PRIVATE iom_g0d, iom_g1d, iom_g2d, iom_g3d, iom_g4d, iom_get_123d 68 68 PRIVATE iom_p1d, iom_p2d, iom_p3d … … 89 89 END INTERFACE 90 90 INTERFACE iom_rstput 91 MODULE PROCEDURE iom_rp0d, iom_rp1d, iom_rp2d, iom_rp3d 91 MODULE PROCEDURE iom_rp0d, iom_rp1d, iom_rp2d, iom_rp3d, iom_rp4d 92 92 END INTERFACE 93 93 INTERFACE iom_put … … 451 451 CALL xios_add_child(file_hdl, field_hdl, TRIM(rst_rfields(i)%vname)) 452 452 SELECT CASE (TRIM(rst_rfields(i)%grid)) 453 ! CASE ("grid_Ni_4D") 454 ! CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 455 ! domain_ref="grid_N", axis_ref="nlay_i", axis_ref="numcat", operation = "instant") 456 ! CASE ("grid_Ns_4D") 457 ! CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 458 ! domain_ref="grid_N", axis_ref="nlay_s", axis_ref="numcat", operation = "instant") 453 #if defined key_si3 454 CASE ("grid_Ni_4D") 455 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 456 grid_ref="grid_Ni_4D", operation = "instant") 457 CASE ("grid_Ns_4D") 458 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 459 grid_ref="grid_Ns_4D", operation = "instant") 459 460 CASE ("grid_Ni_3D") 460 461 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 461 domain_ref="grid_N", axis_ref="numcat", operation = "instant") 462 domain_ref="grid_N", axis_ref="numcat", operation = "instant") 463 #endif 462 464 CASE ("grid_N_3D") 463 465 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 464 domain_ref="grid_N", axis_ref="nav_lev", operation = "instant")466 domain_ref="grid_N", axis_ref="nav_lev", operation = "instant") 465 467 CASE ("grid_N") 466 468 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 467 domain_ref="grid_N", operation = "instant")469 domain_ref="grid_N", operation = "instant") 468 470 CASE ("grid_vector") 469 471 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & … … 471 473 CASE ("grid_scalar") 472 474 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(rst_rfields(i)%vname), & 473 scalar_ref = "grid_scalar", operation = "instant")475 scalar_ref = "grid_scalar", operation = "instant") 474 476 END SELECT 475 477 IF(lwp) WRITE(numout,*) 'XIOS read: ', TRIM(rst_rfields(i)%vname), ' enabled in ', TRIM(rst_file) … … 526 528 CALL iom_set_rstw_var_active(drst_wfields, 'sbc_sc_b') 527 529 ELSE IF(cdmdl == "SI3") THEN 530 #if defined key_si3 528 531 CALL iom_set_rstw_var_active(drst_wfields, 'nn_fsbc_ice') 529 CALL iom_set_rstw_var_active(drst_wfields, 'kt_ice') 530 CALL iom_set_rstw_var_active(drst_wfields, 'v_i') 531 CALL iom_set_rstw_var_active(drst_wfields, 'v_s') 532 CALL iom_set_rstw_var_active(drst_wfields, 'sv_i') 533 CALL iom_set_rstw_var_active(drst_wfields, 'a_i') 534 CALL iom_set_rstw_var_active(drst_wfields, 't_su') 535 CALL iom_set_rstw_var_active(drst_wfields, 'u_ice') 536 CALL iom_set_rstw_var_active(drst_wfields, 'v_ice') 537 CALL iom_set_rstw_var_active(drst_wfields, 'oa_i') 538 CALL iom_set_rstw_var_active(drst_wfields, 'a_ip') 539 CALL iom_set_rstw_var_active(drst_wfields, 'v_ip') 540 DO jk = 1, nlay_s 541 WRITE(zchar1,'(I2.2)') jk 542 znam = 'e_s'//'_l'//zchar1 543 CALL iom_set_rstw_var_active(drst_wfields, znam ) 544 END DO 545 ! Ice enthalpy 546 DO jk = 1, nlay_i 547 WRITE(zchar1,'(I2.2)') jk 548 znam = 'e_i'//'_l'//zchar1 549 CALL iom_set_rstw_var_active(drst_wfields, znam ) 550 END DO 532 CALL iom_set_rstw_var_active(drst_wfields, 'kt_ice' ) 533 CALL iom_set_rstw_var_active(drst_wfields, 'v_i' ) 534 CALL iom_set_rstw_var_active(drst_wfields, 'v_s' ) 535 CALL iom_set_rstw_var_active(drst_wfields, 'sv_i' ) 536 CALL iom_set_rstw_var_active(drst_wfields, 'a_i' ) 537 CALL iom_set_rstw_var_active(drst_wfields, 't_su' ) 538 CALL iom_set_rstw_var_active(drst_wfields, 'u_ice' ) 539 CALL iom_set_rstw_var_active(drst_wfields, 'v_ice' ) 540 CALL iom_set_rstw_var_active(drst_wfields, 'oa_i' ) 541 CALL iom_set_rstw_var_active(drst_wfields, 'a_ip' ) 542 CALL iom_set_rstw_var_active(drst_wfields, 'v_ip' ) 543 CALL iom_set_rstw_var_active(drst_wfields, 'e_s' ) 544 CALL iom_set_rstw_var_active(drst_wfields, 'e_i' ) 545 #endif 551 546 ENDIF 552 547 #else … … 707 702 i = iom_add(i); fields(i)%vname="syyage"; fields(i)%grid="grid_Ni_3D" 708 703 i = iom_add(i); fields(i)%vname="sxyage"; fields(i)%grid="grid_Ni_3D" 709 !this part is in addition to 4D grids, to handle old format ofSI3 resart704 !this part is in addition to 4D grids, to handle old format for SI3 resart 710 705 !NEMO format restart 711 706 DO jk = 1, nlay_s … … 727 722 i = iom_add(i); fields(i)%vname="sxxc0"; fields(i)%grid="grid_Ns_4D" 728 723 i = iom_add(i); fields(i)%vname="syyc0"; fields(i)%grid="grid_Ns_4D" 729 i = iom_add(i); fields(i)%vname="sx xc0"; fields(i)%grid="grid_Ns_4D"724 i = iom_add(i); fields(i)%vname="sxyc0"; fields(i)%grid="grid_Ns_4D" 730 725 ! 731 726 !NEMO format restart … … 839 834 CALL xios_add_child(file_hdl, field_hdl, TRIM(drst_wfields(i)%vname)//"_"//TRIM(ADJUSTL(snr))) 840 835 SELECT CASE (TRIM(drst_wfields(i)%grid)) 836 #if defined key_si3 837 CASE ("grid_Ni_4D") 838 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(drst_wfields(i)%vname), & 839 grid_ref="grid_Ni_4D", prec = 8, operation = "instant") 840 CASE ("grid_Ns_4D") 841 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(drst_wfields(i)%vname), & 842 grid_ref="grid_Ns_4D", prec = 8, operation = "instant") 841 843 CASE ("grid_Ni_3D") 842 844 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(drst_wfields(i)%vname), & 843 domain_ref="grid_N", axis_ref="numcat", prec = 8, operation = "once", &844 freq_offset=(kdstep -1) * xios_timestep) 845 domain_ref="grid_N", axis_ref="numcat", prec = 8, operation = "instant") 846 #endif 845 847 CASE ("grid_N_3D") 846 848 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(drst_wfields(i)%vname), & 847 domain_ref="grid_N", axis_ref="nav_lev", prec = 8, operation = "once", & 848 freq_offset=(kdstep -1) * xios_timestep) 849 domain_ref="grid_N", axis_ref="nav_lev", prec = 8, operation = "instant") 849 850 CASE ("grid_N") 850 851 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(drst_wfields(i)%vname), & 851 domain_ref="grid_N", prec = 8, operation = "once", & 852 freq_offset=(kdstep -1) * xios_timestep) 852 domain_ref="grid_N", prec = 8, operation = "instant") 853 853 CASE ("grid_vector") 854 854 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(drst_wfields(i)%vname), & 855 axis_ref="nav_lev", prec = 8, operation = "once", & 856 freq_offset=(kdstep -1) * xios_timestep) 855 axis_ref="nav_lev", prec = 8, operation = "instant") 857 856 CASE ("grid_scalar") 858 857 CALL xios_set_attr (field_hdl, enabled = .TRUE., name = TRIM(drst_wfields(i)%vname), & 859 scalar_ref = "grid_scalar", prec = 8, operation = "once", & 860 freq_offset=(kdstep -1) * xios_timestep) 858 scalar_ref = "grid_scalar", prec = 8, operation = "instant") 861 859 END SELECT 862 860 ENDIF … … 1953 1951 END SUBROUTINE iom_rp3d 1954 1952 1955 1956 SUBROUTINE iom_delay_rst( cdaction, cdcpnt, kncid ) 1953 SUBROUTINE iom_rp4d( kt, kwrite, kiomid, cdvar, pvar, ktype, ldxios ) 1954 INTEGER , INTENT(in) :: kt ! ocean time-step 1955 INTEGER , INTENT(in) :: kwrite ! writing time-step 1956 INTEGER , INTENT(in) :: kiomid ! Identifier of the file 1957 CHARACTER(len=*), INTENT(in) :: cdvar ! time axis name 1958 REAL(wp) , INTENT(in), DIMENSION(:,:,:,:) :: pvar ! written field 1959 INTEGER , INTENT(in), OPTIONAL :: ktype ! variable external type 1960 LOGICAL, OPTIONAL :: ldxios ! xios write flag 1961 LOGICAL :: llx ! local xios write flag 1962 INTEGER :: ivid ! variable id 1963 1964 llx = .FALSE. 1965 IF(PRESENT(ldxios)) llx = ldxios 1966 IF( llx ) THEN 1967 #ifdef key_iomput 1968 IF( kt == kwrite ) THEN 1969 IF(lwp) write(numout,*) 'RESTART: write (XIOS 4D) ',trim(cdvar) 1970 write(snr, *) nitrst 1971 CALL xios_send_field(trim(cdvar)//"_"//TRIM(ADJUSTL(snr)), pvar) 1972 ENDIF 1973 #endif 1974 ELSE 1975 CALL ctl_stop('Error in the name iom_rp4d for variable '//TRIM(cdvar), & 1976 & 'Restart with iom_nf90_rstput can not handle 4D cases' ) 1977 ENDIF 1978 END SUBROUTINE iom_rp4d 1979 1980 SUBROUTINE iom_delay_rst( cdaction, cdcpnt, kncid ) 1957 1981 !!--------------------------------------------------------------------- 1958 1982 !! Routine iom_delay_rst: used read/write restart related to mpp_delay … … 1970 1994 ! 1971 1995 !return for now. When XIOS is used to write restart it also should be used to write this attribute 1972 IF(lwxios) return 1996 IF(lwxios) THEN 1997 CALL ctl_warn( 'From iom_delay_rst: ', 'Can not '//cdaction//' mpp_delay information with XIOS') 1998 RETURN 1999 ENDIF 2000 1973 2001 ! =================================== 1974 2002 IF( TRIM(cdaction) == 'READ' ) THEN ! read restart related to mpp_delay ! … … 2740 2768 IF( iom_add > max_rst_fields) THEN 2741 2769 WRITE(ctmp1,*) 'E R R O R : iom_set_rst_vars SIZE of RST_FIELD array is too small' 2742 CALL ctl_stop( 'iom_add:', ctmp1 2770 CALL ctl_stop( 'iom_add:', ctmp1, 'Increase parameter max_rst_fields') 2743 2771 ENDIF 2744 2772
Note: See TracChangeset
for help on using the changeset viewer.