Changeset 14 for trunk


Ignore:
Timestamp:
02/10/12 16:16:46 (12 years ago)
Author:
cholod
Message:

change interface to new ioserver

Location:
trunk/NEMOGCM/NEMO/OPA_SRC
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90

    r7 r14  
    3232   USE phycst          ! physical constants 
    3333   USE dianam          ! build name of file 
    34    USE mod_event_client 
    35    USE mod_attribut 
     34   USE xios 
    3635# endif 
    3736 
     
    5150   PRIVATE iom_p1d, iom_p2d, iom_p3d 
    5251#if defined key_iomput 
    53    PRIVATE set_grid 
     52   PRIVATE iom_set_domain_attr, iom_set_field_attr, iom_set_file_attr, set_grid, set_scalar, set_xmlatt, set_mooring 
    5453# endif 
    5554 
     
    6867#if defined key_iomput 
    6968   INTERFACE iom_setkt 
    70       MODULE PROCEDURE event__set_timestep 
     69      MODULE PROCEDURE xios_update_calendar 
    7170   END INTERFACE 
    7271# endif 
     
    7473   !!---------------------------------------------------------------------- 
    7574   !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
    76    !! $Id: iom.F90 3294 2012-01-28 16:44:18Z rblod $ 
     75   !! $Id: iom.F90 3104 2011-11-15 10:08:25Z cetlod $ 
    7776   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    7877   !!---------------------------------------------------------------------- 
     
    8887      !!---------------------------------------------------------------------- 
    8988#if defined key_iomput 
    90       REAL(wp) ::   ztmp 
    91       !!---------------------------------------------------------------------- 
    92       ! read the xml file 
    93       IF( Agrif_Root() ) CALL event__parse_xml_file( 'iodef.xml' )   ! <- to get from the nameliste (namrun)... 
     89      TYPE(xios_time) :: dtime    = xios_time(0, 0, 0, 0, 0, 0) 
     90      !!---------------------------------------------------------------------- 
     91 
    9492      CALL iom_swap 
    9593 
    9694      ! calendar parameters 
    9795      SELECT CASE ( nleapy )        ! Choose calendar for IOIPSL 
    98       CASE ( 1)   ;   CALL event__set_calendar('gregorian') 
    99       CASE ( 0)   ;   CALL event__set_calendar('noleap'   ) 
    100       CASE (30)   ;   CALL event__set_calendar('360d'     ) 
     96      CASE ( 1)   ;   CALL xios_set_context_attr("nemo", calendar_type= "Gregorian") 
     97      CASE ( 0)   ;   CALL xios_set_context_attr("nemo", calendar_type= "NoLeap") 
     98      CASE ( 30)   ;  CALL xios_set_context_attr("nemo", calendar_type= "D360") 
    10199      END SELECT 
    102       ztmp = fjulday - adatrj 
    103       IF( ABS(ztmp  - REAL(NINT(ztmp),wp)) < 0.1 / rday )   ztmp = REAL(NINT(ztmp),wp)   ! avoid truncation error 
    104       CALL event__set_time_parameters( nit000 - 1, ztmp, rdt ) 
    105100 
    106101      ! horizontal grid definition 
    107102      CALL set_scalar 
    108       CALL set_grid( "grid_T", glamt, gphit ) 
     103      CALL set_grid( "grid_T", glamt, gphit )  
    109104      CALL set_grid( "grid_U", glamu, gphiu ) 
    110105      CALL set_grid( "grid_V", glamv, gphiv ) 
     
    112107 
    113108      ! vertical grid definition 
    114       CALL event__set_vert_axis( "deptht", gdept_0 ) 
    115       CALL event__set_vert_axis( "depthu", gdept_0 ) 
    116       CALL event__set_vert_axis( "depthv", gdept_0 ) 
    117       CALL event__set_vert_axis( "depthw", gdepw_0 ) 
    118 # if defined key_floats 
    119       CALL event__set_vert_axis( "nfloat", REAL(nfloat,wp)  ) 
    120 # endif 
     109      CALL xios_set_axis_attr("deptht",size=size(gdept_0),value=gdept_0) 
     110      CALL xios_set_axis_attr("depthu",size=size(gdept_0),value=gdept_0) 
     111      CALL xios_set_axis_attr("depthv",size=size(gdept_0),value=gdept_0) 
     112      CALL xios_set_axis_attr("depthw",size=size(gdepw_0),value=gdepw_0) 
    121113       
    122114      ! automatic definitions of some of the xml attributs 
     
    124116 
    125117      ! end file definition 
    126       CALL event__close_io_definition 
     118       dtime%second=rdt 
     119       CALL xios_set_timestep(dtime) 
     120       CALL xios_close_context_definition() 
     121 
     122       CALL xios_update_calendar(nit000-1) 
    127123#endif 
    128124 
     
    137133      !!--------------------------------------------------------------------- 
    138134#if defined key_iomput 
     135      TYPE(xios_context) :: nemo_hdl 
    139136 
    140137     IF( TRIM(Agrif_CFixed()) == '0' ) THEN 
    141         CALL event__swap_context("nemo") 
     138        CALL xios_get_handle("nemo",nemo_hdl) 
    142139     ELSE 
    143         CALL event__swap_context(TRIM(Agrif_CFixed())//"_nemo") 
     140        CALL xios_get_handle(TRIM(Agrif_CFixed())//"_nemo",nemo_hdl) 
    144141     ENDIF 
     142     CALL xios_set_current_context(nemo_hdl) 
    145143 
    146144#endif 
     
    339337      INTEGER ::   i_s, i_e   ! temporary integer 
    340338      CHARACTER(LEN=100)    ::   clinfo    ! info character 
     339      INTEGER :: inb_period_initial, inb_period_final, inb_period_sec, inb_period_max, inb_period 
    341340      !--------------------------------------------------------------------- 
    342341      ! 
     
    349348         i_e = jpmax_files 
    350349#if defined key_iomput 
    351          CALL event__stop_ioserver 
     350         CALL xios_context_finalize() 
    352351#endif 
    353352      ENDIF 
     
    960959      REAL(wp)        , INTENT(in) ::   pfield0d 
    961960#if defined key_iomput 
    962       CALL event__write_field2D( cdname, RESHAPE( (/pfield0d/), (/1,1/) ) ) 
     961      CALL xios_send_field(cdname, (/pfield0d/)) 
    963962#else 
    964963      IF( .FALSE. )   WRITE(numout,*) cdname, pfield0d   ! useless test to avoid compilation warnings 
     
    969968      CHARACTER(LEN=*)          , INTENT(in) ::   cdname 
    970969      REAL(wp),     DIMENSION(:), INTENT(in) ::   pfield1d 
    971       INTEGER :: jpz 
    972970#if defined key_iomput 
    973       jpz=SIZE(pfield1d) 
    974       CALL event__write_field3D( cdname, RESHAPE( (/pfield1d/), (/1,1,jpz/) ) ) 
     971      CALL xios_send_field( cdname, RESHAPE( (/pfield1d/), (/1,1,SIZE(pfield1d)/) ) ) 
    975972#else 
    976973      IF( .FALSE. )   WRITE(numout,*) cdname, pfield1d   ! useless test to avoid compilation warnings 
     
    982979      REAL(wp),     DIMENSION(:,:), INTENT(in) ::   pfield2d 
    983980#if defined key_iomput 
    984       CALL event__write_field2D( cdname, pfield2d(nldi:nlei, nldj:nlej) ) 
     981      CALL xios_send_field(cdname, pfield2d) 
    985982#else 
    986983      IF( .FALSE. )   WRITE(numout,*) cdname, pfield2d   ! useless test to avoid compilation warnings 
     
    992989      REAL(wp),       DIMENSION(:,:,:), INTENT(in) ::   pfield3d 
    993990#if defined key_iomput 
    994       CALL event__write_field3D( cdname, pfield3d(nldi:nlei, nldj:nlej, :) ) 
     991      CALL xios_send_field(cdname, pfield3d) 
    995992#else 
    996993      IF( .FALSE. )   WRITE(numout,*) cdname, pfield3d   ! useless test to avoid compilation warnings 
     
    1002999#if defined key_iomput 
    10031000 
     1001   SUBROUTINE iom_set_domain_attr( cdname, ni_glo, nj_glo, ibegin, jbegin, ni, nj, zoom_ibegin, zoom_jbegin, zoom_ni, zoom_nj,   & 
     1002      &                                    data_dim, data_ibegin, data_ni, data_jbegin, data_nj, lonvalue, latvalue ) 
     1003      CHARACTER(LEN=*)                , INTENT(in) ::   cdname 
     1004      INTEGER               , OPTIONAL, INTENT(in) ::   ni_glo, nj_glo, ibegin, jbegin, ni, nj 
     1005      INTEGER               , OPTIONAL, INTENT(in) ::   data_dim, data_ibegin, data_ni, data_jbegin, data_nj 
     1006      INTEGER               , OPTIONAL, INTENT(in) ::   zoom_ibegin, zoom_jbegin, zoom_ni, zoom_nj 
     1007      REAL(wp), DIMENSION(:), OPTIONAL, INTENT(in) ::   lonvalue, latvalue 
     1008 
     1009      IF ( xios_is_valid_domain(TRIM(cdname)) ) THEN 
     1010         CALL xios_set_domain_attr( cdname, ni_glo=ni_glo, nj_glo=nj_glo, ibegin=ibegin, jbegin=jbegin, ni=ni, nj=nj  ,   & 
     1011            &    data_dim=data_dim, data_ibegin=data_ibegin, data_ni=data_ni, data_jbegin=data_jbegin, data_nj=data_nj,   & 
     1012            &    zoom_ibegin=zoom_ibegin, zoom_jbegin=zoom_jbegin, zoom_ni=zoom_ni, zoom_nj=zoom_nj,                      & 
     1013            &    lonvalue=lonvalue, latvalue=latvalue ) 
     1014      ENDIF 
     1015 
     1016      IF ( xios_is_valid_domaingroup(TRIM(cdname)) ) THEN 
     1017         CALL xios_set_domaingroup_attr( cdname, ni_glo=ni_glo, nj_glo=nj_glo, ibegin=ibegin, jbegin=jbegin, ni=ni, nj=nj,   & 
     1018            &    data_dim=data_dim, data_ibegin=data_ibegin, data_ni=data_ni, data_jbegin=data_jbegin, data_nj=data_nj   ,   & 
     1019            &    zoom_ibegin=zoom_ibegin, zoom_jbegin=zoom_jbegin, zoom_ni=zoom_ni, zoom_nj=zoom_nj,                         & 
     1020            &    lonvalue=lonvalue, latvalue=latvalue ) 
     1021      ENDIF 
     1022 
     1023   END SUBROUTINE iom_set_domain_attr 
     1024 
     1025 
     1026   SUBROUTINE iom_set_field_attr( cdname, freq_op) 
     1027      CHARACTER(LEN=*)          , INTENT(in) ::   cdname 
     1028      CHARACTER(LEN=*),OPTIONAL , INTENT(in) ::   freq_op 
     1029 
     1030      IF ( xios_is_valid_field(TRIM(cdname)) ) THEN 
     1031         CALL xios_set_field_attr( cdname, freq_op=freq_op ) 
     1032      ENDIF 
     1033      IF ( xios_is_valid_fieldgroup(TRIM(cdname)) ) THEN 
     1034         CALL xios_set_fieldgroup_attr( cdname, freq_op=freq_op ) 
     1035      ENDIF 
     1036 
     1037   END SUBROUTINE iom_set_field_attr 
     1038 
     1039 
     1040   SUBROUTINE iom_set_file_attr( cdname, name, name_suffix ) 
     1041      CHARACTER(LEN=*)          , INTENT(in) ::   cdname 
     1042      CHARACTER(LEN=*),OPTIONAL , INTENT(in) ::   name, name_suffix 
     1043 
     1044      IF ( xios_is_valid_file(TRIM(cdname)) ) THEN 
     1045         CALL xios_set_file_attr( cdname, name=name, name_suffix=name_suffix ) 
     1046      ENDIF 
     1047      IF ( xios_is_valid_filegroup(TRIM(cdname)) ) THEN 
     1048         CALL xios_set_filegroup_attr( cdname, name=name, name_suffix=name_suffix ) 
     1049      ENDIF 
     1050 
     1051   END SUBROUTINE iom_set_file_attr 
     1052 
     1053 
    10041054   SUBROUTINE set_grid( cdname, plon, plat ) 
    10051055      !!---------------------------------------------------------------------- 
     
    10121062      REAL(wp), DIMENSION(jpi,jpj), INTENT(in) ::   plon 
    10131063      REAL(wp), DIMENSION(jpi,jpj), INTENT(in) ::   plat 
    1014  
    1015       CALL event__set_grid_dimension( cdname, jpiglo, jpjglo) 
    1016       CALL event__set_grid_domain( cdname, nlei-nldi+1, nlej-nldj+1, nimpp+nldi-1, njmpp+nldj-1, & 
    1017          &                         plon(nldi:nlei, nldj:nlej), plat(nldi:nlei, nldj:nlej) ) 
    1018       CALL event__set_grid_type_nemo( cdname ) 
    1019  
     1064      INTEGER  :: ni,nj 
     1065       
     1066      ni=nlei-nldi+1 ; nj=nlej-nldj+1 
     1067 
     1068      CALL iom_set_domain_attr(cdname, ni_glo=jpiglo, nj_glo=jpjglo, ibegin=nimpp+nldi-1, jbegin=njmpp+nldj-1, ni=ni, nj=nj) 
     1069      CALL iom_set_domain_attr(cdname, data_dim=2, data_ibegin = 1-nldi, data_ni = jpi, data_jbegin = 1-nldj, data_nj = jpj) 
     1070      CALL iom_set_domain_attr(cdname, lonvalue = RESHAPE(plon(nldi:nlei, nldj:nlej),(/ ni*nj /)),   & 
     1071         &                             latvalue = RESHAPE(plat(nldi:nlei, nldj:nlej),(/ ni*nj /)))    
     1072       
    10201073   END SUBROUTINE set_grid 
    10211074 
     
    10301083      REAL(wp), DIMENSION(1,1) ::   zz = 1. 
    10311084      !!---------------------------------------------------------------------- 
    1032       CALL event__set_grid_dimension( 'scalarpoint', jpnij, 1) 
    1033       CALL event__set_grid_domain   ( 'scalarpoint', 1, 1, narea, 1, zz, zz ) 
    1034       CALL event__set_grid_type_nemo( 'scalarpoint' ) 
     1085      CALL iom_set_domain_attr('scalarpoint', ni_glo=jpnij, nj_glo=1, ibegin=narea, jbegin=1, ni=1, nj=1) 
     1086      CALL iom_set_domain_attr('scalarpoint', data_dim=1) 
     1087      CALL iom_set_domain_attr('scalarpoint', lonvalue=(/ zz /), latvalue=(/ zz /)) 
    10351088 
    10361089   END SUBROUTINE set_scalar 
     
    10491102      CHARACTER(len=1)               ::   cl1                      ! 1 character 
    10501103      CHARACTER(len=2)               ::   cl2                      ! 1 character 
     1104      CHARACTER(len=255)             ::   tfo 
    10511105      INTEGER                        ::   idt                      ! time-step in seconds 
    10521106      INTEGER                        ::   iddss, ihhss             ! number of seconds in 1 day, 1 hour and 1 year 
     
    10681122 
    10691123      ! frequency of the call of iom_put (attribut: freq_op) 
    1070       CALL event__set_attribut( 'field_definition', attr( field__freq_op, idt           ) )    ! model time-step 
    1071       CALL event__set_attribut( 'SBC'             , attr( field__freq_op, idt * nn_fsbc ) )    ! SBC time-step 
    1072        
     1124      tfo = TRIM(i2str(idt))//'s' 
     1125      CALL iom_set_field_attr('field_definition', freq_op=tfo) 
     1126      CALL iom_set_field_attr('SBC', freq_op=TRIM(i2str(idt* nn_fsbc))//'s') 
     1127        
    10731128      ! output file names (attribut: name) 
    10741129      clsuff(:) = (/ 'grid_T', 'grid_U', 'grid_V', 'grid_W', 'icemod', 'ptrc_T', 'diad_T', 'scalar' /)       
     
    10781133               WRITE(cl2,'(i2)') jh  
    10791134               CALL dia_nam( clname, jh * ihhss, clsuff(jg), ldfsec = .TRUE. ) 
    1080                CALL event__set_attribut( TRIM(ADJUSTL(cl2))//'h_'//clsuff(jg), attr( file__name, TRIM(clname) ) ) 
     1135               CALL iom_set_file_attr(TRIM(ADJUSTL(cl2))//'h_'//clsuff(jg), name=TRIM(clname)) 
    10811136            ENDIF 
    10821137         END DO 
     
    10841139            WRITE(cl1,'(i1)') jd  
    10851140            CALL dia_nam( clname, jd * iddss, clsuff(jg), ldfsec = .TRUE. ) 
    1086             CALL event__set_attribut( cl1//'d_'//clsuff(jg), attr( file__name, TRIM(clname) ) ) 
     1141            CALL iom_set_file_attr(cl1//'d_'//clsuff(jg), name=TRIM(clname)) 
    10871142         END DO 
    10881143         DO jm = 1, 6                                                                          ! 1, 2, 3, 4, 6 months 
     
    10901145               WRITE(cl1,'(i1)') jm  
    10911146               CALL dia_nam( clname, -jm, clsuff(jg) ) 
    1092                CALL event__set_attribut( cl1//'m_'//clsuff(jg), attr( file__name, TRIM(clname) ) ) 
     1147               CALL iom_set_file_attr(cl1//'m_'//clsuff(jg), name=TRIM(clname)) 
    10931148            ENDIF 
    10941149         END DO 
     
    10971152               WRITE(cl2,'(i2)') jy  
    10981153               CALL dia_nam( clname, -jy * iyymo, clsuff(jg) ) 
    1099                CALL event__set_attribut( TRIM(ADJUSTL(cl2))//'y_'//clsuff(jg), attr( file__name, TRIM(clname) ) ) 
     1154               CALL iom_set_file_attr(TRIM(ADJUSTL(cl2))//'y_'//clsuff(jg), name=TRIM(clname)) 
    11001155            ENDIF 
    11011156         END DO 
     
    11081163         ! Equatorial section (attributs: jbegin, ni, name_suffix) 
    11091164         CALL dom_ngb( 0., 0., ix, iy, cl1 ) 
    1110          CALL event__set_attribut( 'Eq'//cl1, attr( zoom__jbegin     , iy     ) ) 
    1111          CALL event__set_attribut( 'Eq'//cl1, attr( zoom__ni         , jpiglo ) ) 
    1112          CALL event__set_attribut( 'Eq'//cl1, attr( file__name_suffix, '_Eq'  ) ) 
     1165         CALL iom_set_domain_attr('Eq'//cl1, zoom_jbegin=iy, zoom_ni=jpiglo) 
     1166         CALL iom_set_file_attr('Eq'//cl1, name_suffix= '_Eq') 
    11131167      END DO 
    11141168      ! TAO moorings (attributs: ibegin, jbegin, name_suffix) 
     
    11851239               ENDIF 
    11861240               clname = TRIM(ADJUSTL(clat))//TRIM(ADJUSTL(clon)) 
    1187                CALL event__set_attribut( TRIM(clname)//cl1, attr( zoom__ibegin     , ix                ) ) 
    1188                CALL event__set_attribut( TRIM(clname)//cl1, attr( zoom__jbegin     , iy                ) ) 
    1189                CALL event__set_attribut( TRIM(clname)//cl1, attr( file__name_suffix, '_'//TRIM(clname) ) )       
     1241               CALL iom_set_domain_attr(TRIM(clname)//cl1, zoom_ibegin= ix, zoom_jbegin= iy) 
     1242               CALL iom_set_file_attr(TRIM(clname)//cl1, name_suffix= '_'//TRIM(clname)) 
    11901243            END DO 
    11911244         END DO 
     
    12031256#endif 
    12041257 
    1205  
     1258   FUNCTION i2str(int) 
     1259   IMPLICIT NONE 
     1260      INTEGER, INTENT(IN) :: int 
     1261      CHARACTER(LEN=255) :: i2str 
     1262 
     1263      WRITE(i2str,*) int 
     1264       
     1265   END FUNCTION i2str   
     1266    
    12061267   !!====================================================================== 
    12071268END MODULE iom 
  • trunk/NEMOGCM/NEMO/OPA_SRC/nemogcm.F90

    r7 r14  
    7373   USE lib_mpp         ! distributed memory computing 
    7474#if defined key_iomput 
    75    USE mod_ioclient 
     75   USE xios 
    7676#endif 
    7777 
     
    8686   !!---------------------------------------------------------------------- 
    8787   !! NEMO/OPA 4.0 , NEMO Consortium (2011) 
    88    !! $Id: nemogcm.F90 3294 2012-01-28 16:44:18Z rblod $ 
     88   !! $Id: nemogcm.F90 3289 2012-01-27 14:37:34Z rblod $ 
    8989   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
    9090   !!---------------------------------------------------------------------- 
     
    185185      CALL cpl_prism_finalize           ! end coupling and mpp communications with OASIS 
    186186#else 
     187# if defined key_iomput 
     188      IF( Agrif_Root() ) THEN 
     189         CALL xios_finalize             ! end mpp communications 
     190      ENDIF 
     191# else 
    187192      IF( lk_mpp )   CALL mppstop       ! end mpp communications 
     193# endif 
    188194#endif 
    189195      ! 
     
    219225      IF( Agrif_Root() ) THEN 
    220226# if defined key_oasis3 || defined key_oasis4 
    221          CALL cpl_prism_init( ilocal_comm )                 ! nemo local communicator given by oasis 
     227         CALL cpl_prism_init( ilocal_comm )                  ! nemo local communicator given by oasis 
     228         CALL xios_initialize(  local_comm = ilocal_comm )   ! xios local communicator given by oasis 
     229# else 
     230         CALL xios_initialize( return_comm = ilocal_comm )   ! nemo local communicator given by xios 
    222231# endif 
    223          CALL  init_ioclient( ilocal_comm )                 ! exchange io_server nemo local communicator with the io_server 
    224232      ENDIF 
    225233      narea = mynode( cltxt, numnam, nstop, ilocal_comm )   ! Nodes selection 
Note: See TracChangeset for help on using the changeset viewer.