New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 3771 for branches/2012/dev_MERGE_2012/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90 – NEMO

Ignore:
Timestamp:
2013-02-05T15:02:22+01:00 (11 years ago)
Author:
smasson
Message:

dev_MERGE_2012: activate ln_mskland with XIOS, see #1047

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2012/dev_MERGE_2012/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90

    r3770 r3771  
    5252   PRIVATE iom_p1d, iom_p2d, iom_p3d 
    5353#if defined key_iomput 
    54    PRIVATE iom_set_domain_attr, iom_set_axis_attr, iom_set_field_attr, iom_set_file_attr 
     54   PRIVATE iom_set_domain_attr, iom_set_axis_attr, iom_set_field_attr, iom_set_file_attr, iom_set_grid_attr 
    5555   PRIVATE set_grid, set_scalar, set_xmlatt, set_mooring 
    5656# endif 
     
    112112      ! horizontal grid definition 
    113113      CALL set_scalar 
    114       CALL set_grid( "grid_T", glamt, gphit )  
    115       CALL set_grid( "grid_U", glamu, gphiu ) 
    116       CALL set_grid( "grid_V", glamv, gphiv ) 
    117       CALL set_grid( "grid_W", glamt, gphit ) 
     114      CALL set_grid( "T", glamt, gphit )  
     115      CALL set_grid( "U", glamu, gphiu ) 
     116      CALL set_grid( "V", glamv, gphiv ) 
     117      CALL set_grid( "W", glamt, gphit ) 
    118118 
    119119      ! vertical grid definition 
     
    10141014 
    10151015   SUBROUTINE iom_set_domain_attr( cdname, ni_glo, nj_glo, ibegin, jbegin, ni, nj, zoom_ibegin, zoom_jbegin, zoom_ni, zoom_nj,   & 
    1016       &                                    data_dim, data_ibegin, data_ni, data_jbegin, data_nj, lonvalue, latvalue ) 
    1017       CHARACTER(LEN=*)                , INTENT(in) ::   cdname 
    1018       INTEGER               , OPTIONAL, INTENT(in) ::   ni_glo, nj_glo, ibegin, jbegin, ni, nj 
    1019       INTEGER               , OPTIONAL, INTENT(in) ::   data_dim, data_ibegin, data_ni, data_jbegin, data_nj 
    1020       INTEGER               , OPTIONAL, INTENT(in) ::   zoom_ibegin, zoom_jbegin, zoom_ni, zoom_nj 
    1021       REAL(wp), DIMENSION(:), OPTIONAL, INTENT(in) ::   lonvalue, latvalue 
    1022  
    1023       IF ( xios_is_valid_domain(TRIM(cdname)) ) THEN 
    1024          CALL xios_set_domain_attr( cdname, ni_glo=ni_glo, nj_glo=nj_glo, ibegin=ibegin, jbegin=jbegin, ni=ni, nj=nj  ,   & 
    1025             &    data_dim=data_dim, data_ibegin=data_ibegin, data_ni=data_ni, data_jbegin=data_jbegin, data_nj=data_nj,   & 
    1026             &    zoom_ibegin=zoom_ibegin, zoom_jbegin=zoom_jbegin, zoom_ni=zoom_ni, zoom_nj=zoom_nj,                      & 
    1027             &    lonvalue=lonvalue, latvalue=latvalue ) 
    1028       ENDIF 
    1029  
    1030       IF ( xios_is_valid_domaingroup(TRIM(cdname)) ) THEN 
     1016      &                                    data_dim, data_ibegin, data_ni, data_jbegin, data_nj, lonvalue, latvalue, mask ) 
     1017      CHARACTER(LEN=*)                 , INTENT(in) ::   cdname 
     1018      INTEGER                , OPTIONAL, INTENT(in) ::   ni_glo, nj_glo, ibegin, jbegin, ni, nj 
     1019      INTEGER                , OPTIONAL, INTENT(in) ::   data_dim, data_ibegin, data_ni, data_jbegin, data_nj 
     1020      INTEGER                , OPTIONAL, INTENT(in) ::   zoom_ibegin, zoom_jbegin, zoom_ni, zoom_nj 
     1021      REAL(wp), DIMENSION(:) , OPTIONAL, INTENT(in) ::   lonvalue, latvalue 
     1022      LOGICAL, DIMENSION(:,:), OPTIONAL, INTENT(in) ::   mask 
     1023 
     1024      IF ( xios_is_valid_domain     (cdname) ) THEN 
     1025         CALL xios_set_domain_attr     ( cdname, ni_glo=ni_glo, nj_glo=nj_glo, ibegin=ibegin, jbegin=jbegin, ni=ni, nj=nj,   & 
     1026            &    data_dim=data_dim, data_ibegin=data_ibegin, data_ni=data_ni, data_jbegin=data_jbegin, data_nj=data_nj   ,   & 
     1027            &    zoom_ibegin=zoom_ibegin, zoom_jbegin=zoom_jbegin, zoom_ni=zoom_ni, zoom_nj=zoom_nj,                         & 
     1028            &    lonvalue=lonvalue, latvalue=latvalue,mask=mask ) 
     1029      ENDIF 
     1030 
     1031      IF ( xios_is_valid_domaingroup(cdname) ) THEN 
    10311032         CALL xios_set_domaingroup_attr( cdname, ni_glo=ni_glo, nj_glo=nj_glo, ibegin=ibegin, jbegin=jbegin, ni=ni, nj=nj,   & 
    10321033            &    data_dim=data_dim, data_ibegin=data_ibegin, data_ni=data_ni, data_jbegin=data_jbegin, data_nj=data_nj   ,   & 
    10331034            &    zoom_ibegin=zoom_ibegin, zoom_jbegin=zoom_jbegin, zoom_ni=zoom_ni, zoom_nj=zoom_nj,                         & 
    1034             &    lonvalue=lonvalue, latvalue=latvalue ) 
     1035            &    lonvalue=lonvalue, latvalue=latvalue,mask=mask ) 
    10351036      ENDIF 
    10361037 
     
    10411042      CHARACTER(LEN=*)      , INTENT(in) ::   cdname 
    10421043      REAL(wp), DIMENSION(:), INTENT(in) ::   paxis 
    1043  
    1044       IF ( xios_is_valid_axis(TRIM(cdname)) ) THEN 
    1045          CALL xios_set_axis_attr( cdname, size=size(paxis),value=paxis ) 
    1046       ENDIF 
    1047       IF ( xios_is_valid_axisgroup(TRIM(cdname)) ) THEN 
    1048          CALL xios_set_axisgroup_attr( cdname, size=size(paxis),value=paxis ) 
    1049       ENDIF 
    1050  
     1044      IF ( xios_is_valid_axis     (cdname) )   CALL xios_set_axis_attr     ( cdname, size=size(paxis),value=paxis ) 
     1045      IF ( xios_is_valid_axisgroup(cdname) )   CALL xios_set_axisgroup_attr( cdname, size=size(paxis),value=paxis ) 
    10511046   END SUBROUTINE iom_set_axis_attr 
    10521047 
     
    10551050      CHARACTER(LEN=*)          , INTENT(in) ::   cdname 
    10561051      CHARACTER(LEN=*),OPTIONAL , INTENT(in) ::   freq_op 
    1057  
    1058       IF ( xios_is_valid_field(TRIM(cdname)) ) THEN 
    1059          CALL xios_set_field_attr( cdname, freq_op=freq_op ) 
    1060       ENDIF 
    1061       IF ( xios_is_valid_fieldgroup(TRIM(cdname)) ) THEN 
    1062          CALL xios_set_fieldgroup_attr( cdname, freq_op=freq_op ) 
    1063       ENDIF 
    1064  
     1052      IF ( xios_is_valid_field     (cdname) )   CALL xios_set_field_attr     ( cdname, freq_op=freq_op ) 
     1053      IF ( xios_is_valid_fieldgroup(cdname) )   CALL xios_set_fieldgroup_attr( cdname, freq_op=freq_op ) 
    10651054   END SUBROUTINE iom_set_field_attr 
    10661055 
     
    10691058      CHARACTER(LEN=*)          , INTENT(in) ::   cdname 
    10701059      CHARACTER(LEN=*),OPTIONAL , INTENT(in) ::   name, name_suffix 
    1071  
    1072       IF ( xios_is_valid_file(TRIM(cdname)) ) THEN 
    1073          CALL xios_set_file_attr( cdname, name=name, name_suffix=name_suffix ) 
    1074       ENDIF 
    1075       IF ( xios_is_valid_filegroup(TRIM(cdname)) ) THEN 
    1076          CALL xios_set_filegroup_attr( cdname, name=name, name_suffix=name_suffix ) 
    1077       ENDIF 
    1078  
     1060      IF ( xios_is_valid_file     (cdname) )   CALL xios_set_file_attr     ( cdname, name=name, name_suffix=name_suffix ) 
     1061      IF ( xios_is_valid_filegroup(cdname) )   CALL xios_set_filegroup_attr( cdname, name=name, name_suffix=name_suffix ) 
    10791062   END SUBROUTINE iom_set_file_attr 
    10801063 
    10811064 
    1082    SUBROUTINE set_grid( cdname, plon, plat ) 
     1065   SUBROUTINE iom_set_grid_attr( cdname, mask ) 
     1066      CHARACTER(LEN=*)                   , INTENT(in) ::   cdname 
     1067      LOGICAL, DIMENSION(:,:,:), OPTIONAL, INTENT(in) ::   mask 
     1068      IF ( xios_is_valid_grid     (cdname) )   CALL xios_set_grid_attr     ( cdname, mask=mask ) 
     1069      IF ( xios_is_valid_gridgroup(cdname) )   CALL xios_set_gridgroup_attr( cdname, mask=mask ) 
     1070   END SUBROUTINE iom_set_grid_attr 
     1071 
     1072 
     1073   SUBROUTINE set_grid( cdgrd, plon, plat ) 
    10831074      !!---------------------------------------------------------------------- 
    10841075      !!                     ***  ROUTINE   *** 
     
    10871078      !! 
    10881079      !!---------------------------------------------------------------------- 
    1089       CHARACTER(LEN=*)            , INTENT(in) ::   cdname 
     1080      CHARACTER(LEN=1)            , INTENT(in) ::   cdgrd 
    10901081      REAL(wp), DIMENSION(jpi,jpj), INTENT(in) ::   plon 
    10911082      REAL(wp), DIMENSION(jpi,jpj), INTENT(in) ::   plat 
     1083      ! 
     1084      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zmask 
    10921085      INTEGER  :: ni,nj 
    10931086       
    10941087      ni=nlei-nldi+1 ; nj=nlej-nldj+1 
    10951088 
    1096       CALL iom_set_domain_attr(cdname, ni_glo=jpiglo, nj_glo=jpjglo, ibegin=nimpp+nldi-1, jbegin=njmpp+nldj-1, ni=ni, nj=nj) 
    1097       CALL iom_set_domain_attr(cdname, data_dim=2, data_ibegin = 1-nldi, data_ni = jpi, data_jbegin = 1-nldj, data_nj = jpj) 
    1098       CALL iom_set_domain_attr(cdname, lonvalue = RESHAPE(plon(nldi:nlei, nldj:nlej),(/ ni*nj /)),   & 
    1099          &                             latvalue = RESHAPE(plat(nldi:nlei, nldj:nlej),(/ ni*nj /)))    
     1089      CALL iom_set_domain_attr("grid_"//cdgrd, ni_glo=jpiglo, nj_glo=jpjglo, ibegin=nimpp+nldi-1, jbegin=njmpp+nldj-1, ni=ni, nj=nj) 
     1090      CALL iom_set_domain_attr("grid_"//cdgrd, data_dim=2, data_ibegin = 1-nldi, data_ni = jpi, data_jbegin = 1-nldj, data_nj = jpj) 
     1091      CALL iom_set_domain_attr("grid_"//cdgrd, lonvalue = RESHAPE(plon(nldi:nlei, nldj:nlej),(/ ni*nj /)),   & 
     1092         &                                     latvalue = RESHAPE(plat(nldi:nlei, nldj:nlej),(/ ni*nj /)))   
     1093 
     1094      IF ( ln_mskland ) THEN 
     1095         ! mask land points, keep values on coast line -> specific mask for U, V and W points 
     1096         SELECT CASE ( cdgrd ) 
     1097         CASE('T')   ;   zmask(:,:,:)       = tmask(:,:,:) 
     1098         CASE('U')   ;   zmask(2:jpim1,:,:) = tmask(2:jpim1,:,:) + tmask(3:jpi,:,:)   ;   CALL lbc_lnk( zmask, 'U', 1. ) 
     1099         CASE('V')   ;   zmask(:,2:jpjm1,:) = tmask(:,2:jpjm1,:) + tmask(:,3:jpi,:)   ;   CALL lbc_lnk( zmask, 'V', 1. ) 
     1100         CASE('W')   ;   zmask(:,:,2:jpk  ) = tmask(:,:,1:jpkm1) + tmask(:,:,2:jpk)   ;   zmask(:,:,1) = tmask(:,:,1) 
     1101         END SELECT 
     1102         ! 
     1103         CALL iom_set_domain_attr( "grid_"//cdgrd       , mask = zmask(:,:,1) /= 0. ) 
     1104         CALL iom_set_grid_attr  ( "grid_"//cdgrd//"_3D", mask = zmask(:,:,:) /= 0. ) 
     1105      ENDIF 
    11001106       
    11011107   END SUBROUTINE set_grid 
     
    11591165      clsuff(:) = (/ 'grid_T', 'grid_U', 'grid_V', 'grid_W', 'icemod', 'ptrc_T', 'diad_T', 'scalar' /)       
    11601166      DO jg = 1, SIZE(clsuff)                                                                  ! grid type 
    1161          DO jh = 1, 12                                                                         ! 1, 2, 3, 4, 6, 12 hours 
    1162             IF( MOD(12,jh) == 0 ) THEN  
    1163                WRITE(cl2,'(i2)') jh  
    1164                CALL dia_nam( clname, jh * ihhss, clsuff(jg), ldfsec = .TRUE. ) 
    1165                CALL iom_set_file_attr(TRIM(ADJUSTL(cl2))//'h_'//clsuff(jg), name=TRIM(clname)) 
    1166             ENDIF 
     1167         DO jh = 1, 24                                                                         ! 1-24 hours 
     1168            WRITE(cl2,'(i2)') jh  
     1169            CALL dia_nam( clname, jh * ihhss, clsuff(jg), ldfsec = .TRUE. ) 
     1170            CALL iom_set_file_attr(TRIM(ADJUSTL(cl2))//'h_'//clsuff(jg), name=TRIM(clname)) 
    11671171         END DO 
    1168          DO jd = 1, 5, 2                                                                       ! 1, 3, 5 days 
     1172         DO jd = 1, 30                                                                         ! 1-30 days 
    11691173            WRITE(cl1,'(i1)') jd  
    11701174            CALL dia_nam( clname, jd * iddss, clsuff(jg), ldfsec = .TRUE. ) 
    11711175            CALL iom_set_file_attr(cl1//'d_'//clsuff(jg), name=TRIM(clname)) 
    11721176         END DO 
    1173          DO jm = 1, 6                                                                          ! 1, 2, 3, 4, 6 months 
    1174             IF( MOD(6,jm) == 0 ) THEN  
    1175                WRITE(cl1,'(i1)') jm  
    1176                CALL dia_nam( clname, -jm, clsuff(jg) ) 
    1177                CALL iom_set_file_attr(cl1//'m_'//clsuff(jg), name=TRIM(clname)) 
    1178             ENDIF 
     1177         DO jm = 1, 11                                                                         ! 1-11 months 
     1178            WRITE(cl1,'(i1)') jm  
     1179            CALL dia_nam( clname, -jm, clsuff(jg) ) 
     1180            CALL iom_set_file_attr(cl1//'m_'//clsuff(jg), name=TRIM(clname)) 
    11791181         END DO 
    1180          DO jy = 1, 10                                                                         ! 1, 2, 5, 10 years   
    1181             IF( MOD(10,jy) == 0 ) THEN  
    1182                WRITE(cl2,'(i2)') jy  
    1183                CALL dia_nam( clname, -jy * iyymo, clsuff(jg) ) 
    1184                CALL iom_set_file_attr(TRIM(ADJUSTL(cl2))//'y_'//clsuff(jg), name=TRIM(clname)) 
    1185             ENDIF 
     1182         DO jy = 1, 50                                                                         ! 1-50 years   
     1183            WRITE(cl2,'(i2)') jy  
     1184            CALL dia_nam( clname, -jy * iyymo, clsuff(jg) ) 
     1185            CALL iom_set_file_attr(TRIM(ADJUSTL(cl2))//'y_'//clsuff(jg), name=TRIM(clname)) 
    11861186         END DO 
    11871187      END DO 
Note: See TracChangeset for help on using the changeset viewer.