- Timestamp:
- 2013-02-05T15:02:22+01:00 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2012/dev_MERGE_2012/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90
r3770 r3771 52 52 PRIVATE iom_p1d, iom_p2d, iom_p3d 53 53 #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 55 55 PRIVATE set_grid, set_scalar, set_xmlatt, set_mooring 56 56 # endif … … 112 112 ! horizontal grid definition 113 113 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 ) 118 118 119 119 ! vertical grid definition … … 1014 1014 1015 1015 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 1031 1032 CALL xios_set_domaingroup_attr( cdname, ni_glo=ni_glo, nj_glo=nj_glo, ibegin=ibegin, jbegin=jbegin, ni=ni, nj=nj, & 1032 1033 & data_dim=data_dim, data_ibegin=data_ibegin, data_ni=data_ni, data_jbegin=data_jbegin, data_nj=data_nj , & 1033 1034 & 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 ) 1035 1036 ENDIF 1036 1037 … … 1041 1042 CHARACTER(LEN=*) , INTENT(in) :: cdname 1042 1043 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 ) 1051 1046 END SUBROUTINE iom_set_axis_attr 1052 1047 … … 1055 1050 CHARACTER(LEN=*) , INTENT(in) :: cdname 1056 1051 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 ) 1065 1054 END SUBROUTINE iom_set_field_attr 1066 1055 … … 1069 1058 CHARACTER(LEN=*) , INTENT(in) :: cdname 1070 1059 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 ) 1079 1062 END SUBROUTINE iom_set_file_attr 1080 1063 1081 1064 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 ) 1083 1074 !!---------------------------------------------------------------------- 1084 1075 !! *** ROUTINE *** … … 1087 1078 !! 1088 1079 !!---------------------------------------------------------------------- 1089 CHARACTER(LEN= *) , INTENT(in) :: cdname1080 CHARACTER(LEN=1) , INTENT(in) :: cdgrd 1090 1081 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: plon 1091 1082 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: plat 1083 ! 1084 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zmask 1092 1085 INTEGER :: ni,nj 1093 1086 1094 1087 ni=nlei-nldi+1 ; nj=nlej-nldj+1 1095 1088 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 1100 1106 1101 1107 END SUBROUTINE set_grid … … 1159 1165 clsuff(:) = (/ 'grid_T', 'grid_U', 'grid_V', 'grid_W', 'icemod', 'ptrc_T', 'diad_T', 'scalar' /) 1160 1166 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)) 1167 1171 END DO 1168 DO jd = 1, 5, 2 ! 1, 3, 5days1172 DO jd = 1, 30 ! 1-30 days 1169 1173 WRITE(cl1,'(i1)') jd 1170 1174 CALL dia_nam( clname, jd * iddss, clsuff(jg), ldfsec = .TRUE. ) 1171 1175 CALL iom_set_file_attr(cl1//'d_'//clsuff(jg), name=TRIM(clname)) 1172 1176 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)) 1179 1181 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)) 1186 1186 END DO 1187 1187 END DO
Note: See TracChangeset
for help on using the changeset viewer.