Changeset 3695 for branches/2012/dev_MERGE_2012/NEMOGCM/NEMO
- Timestamp:
- 2012-11-28T09:46:30+01:00 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2012/dev_MERGE_2012/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90
r3294 r3695 32 32 USE phycst ! physical constants 33 33 USE dianam ! build name of file 34 USE mod_event_client 35 USE mod_attribut 34 USE xios 36 35 # endif 37 36 … … 51 50 PRIVATE iom_p1d, iom_p2d, iom_p3d 52 51 #if defined key_iomput 53 PRIVATE set_grid52 PRIVATE iom_set_domain_attr, iom_set_field_attr, iom_set_file_attr, set_grid, set_scalar, set_xmlatt, set_mooring 54 53 # endif 55 54 … … 68 67 #if defined key_iomput 69 68 INTERFACE iom_setkt 70 MODULE PROCEDURE event__set_timestep69 MODULE PROCEDURE xios_update_calendar 71 70 END INTERFACE 72 71 # endif … … 88 87 !!---------------------------------------------------------------------- 89 88 #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 CHARACTER(len=19) :: cldate 91 INTEGER :: ji 92 !!---------------------------------------------------------------------- 93 94 CALL xios_context_initialize("nemo", mpi_comm_opa) 94 95 CALL iom_swap 95 96 96 97 ! calendar parameters 97 98 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')99 CASE ( 1) ; CALL xios_set_context_attr("nemo", calendar_type= "Gregorian") 100 CASE ( 0) ; CALL xios_set_context_attr("nemo", calendar_type= "NoLeap") 101 CASE (30) ; CALL xios_set_context_attr("nemo", calendar_type= "D360") 101 102 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 ) 103 WRITE(cldate,"(i4.4,'-',i2.2,'-',i2.2,' 00:00:00')") nyear,nmonth,nday 104 CALL xios_set_context_attr("nemo", start_date=cldate ) 105 105 106 106 ! horizontal grid definition 107 107 CALL set_scalar 108 CALL set_grid( "grid_T", glamt, gphit ) 108 CALL set_grid( "grid_T", glamt, gphit ) 109 109 CALL set_grid( "grid_U", glamu, gphiu ) 110 110 CALL set_grid( "grid_V", glamv, gphiv ) … … 112 112 113 113 ! 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)114 CALL xios_set_axis_attr("deptht",size=size(gdept_0),value=gdept_0) 115 CALL xios_set_axis_attr("depthu",size=size(gdept_0),value=gdept_0) 116 CALL xios_set_axis_attr("depthv",size=size(gdept_0),value=gdept_0) 117 CALL xios_set_axis_attr("depthw",size=size(gdepw_0),value=gdepw_0) 118 118 # if defined key_floats 119 CALL event__set_vert_axis( "nfloat", REAL(nfloat,wp))119 CALL xios_set_axis_attr("nfloat",size=nfloat,value=(ji, ji=1,nfloat)) 120 120 # endif 121 121 … … 124 124 125 125 ! end file definition 126 CALL event__close_io_definition 126 dtime%second=rdt 127 CALL xios_set_timestep(dtime) 128 CALL xios_close_context_definition() 129 130 CALL xios_update_calendar(0) 127 131 #endif 128 132 … … 137 141 !!--------------------------------------------------------------------- 138 142 #if defined key_iomput 143 TYPE(xios_context) :: nemo_hdl 139 144 140 145 IF( TRIM(Agrif_CFixed()) == '0' ) THEN 141 CALL event__swap_context("nemo")146 CALL xios_get_handle("nemo",nemo_hdl) 142 147 ELSE 143 CALL event__swap_context(TRIM(Agrif_CFixed())//"_nemo")148 CALL xios_get_handle(TRIM(Agrif_CFixed())//"_nemo",nemo_hdl) 144 149 ENDIF 150 CALL xios_set_current_context(nemo_hdl) 145 151 146 152 #endif … … 349 355 i_e = jpmax_files 350 356 #if defined key_iomput 351 CALL event__stop_ioserver357 CALL xios_context_finalize() 352 358 #endif 353 359 ENDIF … … 960 966 REAL(wp) , INTENT(in) :: pfield0d 961 967 #if defined key_iomput 962 CALL event__write_field2D( cdname, RESHAPE( (/pfield0d/), (/1,1/) ))968 CALL xios_send_field(cdname, (/pfield0d/)) 963 969 #else 964 970 IF( .FALSE. ) WRITE(numout,*) cdname, pfield0d ! useless test to avoid compilation warnings … … 969 975 CHARACTER(LEN=*) , INTENT(in) :: cdname 970 976 REAL(wp), DIMENSION(:), INTENT(in) :: pfield1d 971 INTEGER :: jpz972 977 #if defined key_iomput 973 jpz=SIZE(pfield1d) 974 CALL event__write_field3D( cdname, RESHAPE( (/pfield1d/), (/1,1,jpz/) ) ) 978 CALL xios_send_field( cdname, RESHAPE( (/pfield1d/), (/1,1,SIZE(pfield1d)/) ) ) 975 979 #else 976 980 IF( .FALSE. ) WRITE(numout,*) cdname, pfield1d ! useless test to avoid compilation warnings … … 982 986 REAL(wp), DIMENSION(:,:), INTENT(in) :: pfield2d 983 987 #if defined key_iomput 984 CALL event__write_field2D( cdname, pfield2d(nldi:nlei, nldj:nlej))988 CALL xios_send_field(cdname, pfield2d) 985 989 #else 986 990 IF( .FALSE. ) WRITE(numout,*) cdname, pfield2d ! useless test to avoid compilation warnings … … 992 996 REAL(wp), DIMENSION(:,:,:), INTENT(in) :: pfield3d 993 997 #if defined key_iomput 994 CALL event__write_field3D( cdname, pfield3d(nldi:nlei, nldj:nlej, :))998 CALL xios_send_field(cdname, pfield3d) 995 999 #else 996 1000 IF( .FALSE. ) WRITE(numout,*) cdname, pfield3d ! useless test to avoid compilation warnings … … 1002 1006 #if defined key_iomput 1003 1007 1008 SUBROUTINE iom_set_domain_attr( cdname, ni_glo, nj_glo, ibegin, jbegin, ni, nj, zoom_ibegin, zoom_jbegin, zoom_ni, zoom_nj, & 1009 & data_dim, data_ibegin, data_ni, data_jbegin, data_nj, lonvalue, latvalue ) 1010 CHARACTER(LEN=*) , INTENT(in) :: cdname 1011 INTEGER , OPTIONAL, INTENT(in) :: ni_glo, nj_glo, ibegin, jbegin, ni, nj 1012 INTEGER , OPTIONAL, INTENT(in) :: data_dim, data_ibegin, data_ni, data_jbegin, data_nj 1013 INTEGER , OPTIONAL, INTENT(in) :: zoom_ibegin, zoom_jbegin, zoom_ni, zoom_nj 1014 REAL(wp), DIMENSION(:), OPTIONAL, INTENT(in) :: lonvalue, latvalue 1015 1016 IF ( xios_is_valid_domain(TRIM(cdname)) ) THEN 1017 CALL xios_set_domain_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 IF ( xios_is_valid_domaingroup(TRIM(cdname)) ) THEN 1024 CALL xios_set_domaingroup_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 END SUBROUTINE iom_set_domain_attr 1031 1032 1033 SUBROUTINE iom_set_field_attr( cdname, freq_op) 1034 CHARACTER(LEN=*) , INTENT(in) :: cdname 1035 CHARACTER(LEN=*),OPTIONAL , INTENT(in) :: freq_op 1036 1037 IF ( xios_is_valid_field(TRIM(cdname)) ) THEN 1038 CALL xios_set_field_attr( cdname, freq_op=freq_op ) 1039 ENDIF 1040 IF ( xios_is_valid_fieldgroup(TRIM(cdname)) ) THEN 1041 CALL xios_set_fieldgroup_attr( cdname, freq_op=freq_op ) 1042 ENDIF 1043 1044 END SUBROUTINE iom_set_field_attr 1045 1046 1047 SUBROUTINE iom_set_file_attr( cdname, name, name_suffix ) 1048 CHARACTER(LEN=*) , INTENT(in) :: cdname 1049 CHARACTER(LEN=*),OPTIONAL , INTENT(in) :: name, name_suffix 1050 1051 IF ( xios_is_valid_file(TRIM(cdname)) ) THEN 1052 CALL xios_set_file_attr( cdname, name=name, name_suffix=name_suffix ) 1053 ENDIF 1054 IF ( xios_is_valid_filegroup(TRIM(cdname)) ) THEN 1055 CALL xios_set_filegroup_attr( cdname, name=name, name_suffix=name_suffix ) 1056 ENDIF 1057 1058 END SUBROUTINE iom_set_file_attr 1059 1060 1004 1061 SUBROUTINE set_grid( cdname, plon, plat ) 1005 1062 !!---------------------------------------------------------------------- … … 1012 1069 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: plon 1013 1070 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 1071 INTEGER :: ni,nj 1072 1073 ni=nlei-nldi+1 ; nj=nlej-nldj+1 1074 1075 CALL iom_set_domain_attr(cdname, ni_glo=jpiglo, nj_glo=jpjglo, ibegin=nimpp+nldi-1, jbegin=njmpp+nldj-1, ni=ni, nj=nj) 1076 CALL iom_set_domain_attr(cdname, data_dim=2, data_ibegin = 1-nldi, data_ni = jpi, data_jbegin = 1-nldj, data_nj = jpj) 1077 CALL iom_set_domain_attr(cdname, lonvalue = RESHAPE(plon(nldi:nlei, nldj:nlej),(/ ni*nj /)), & 1078 & latvalue = RESHAPE(plat(nldi:nlei, nldj:nlej),(/ ni*nj /))) 1079 1020 1080 END SUBROUTINE set_grid 1021 1081 … … 1030 1090 REAL(wp), DIMENSION(1,1) :: zz = 1. 1031 1091 !!---------------------------------------------------------------------- 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')1092 CALL iom_set_domain_attr('scalarpoint', ni_glo=jpnij, nj_glo=1, ibegin=narea, jbegin=1, ni=1, nj=1) 1093 CALL iom_set_domain_attr('scalarpoint', data_dim=1) 1094 CALL iom_set_domain_attr('scalarpoint', lonvalue=(/ zz /), latvalue=(/ zz /)) 1035 1095 1036 1096 END SUBROUTINE set_scalar … … 1049 1109 CHARACTER(len=1) :: cl1 ! 1 character 1050 1110 CHARACTER(len=2) :: cl2 ! 1 character 1111 CHARACTER(len=255) :: tfo 1051 1112 INTEGER :: idt ! time-step in seconds 1052 1113 INTEGER :: iddss, ihhss ! number of seconds in 1 day, 1 hour and 1 year … … 1068 1129 1069 1130 ! 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 1131 tfo = TRIM(i2str(idt))//'s' 1132 CALL iom_set_field_attr('field_definition', freq_op=tfo) 1133 CALL iom_set_field_attr('SBC', freq_op=TRIM(i2str(idt* nn_fsbc))//'s') 1134 1073 1135 ! output file names (attribut: name) 1074 1136 clsuff(:) = (/ 'grid_T', 'grid_U', 'grid_V', 'grid_W', 'icemod', 'ptrc_T', 'diad_T', 'scalar' /) … … 1078 1140 WRITE(cl2,'(i2)') jh 1079 1141 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) ))1142 CALL iom_set_file_attr(TRIM(ADJUSTL(cl2))//'h_'//clsuff(jg), name=TRIM(clname)) 1081 1143 ENDIF 1082 1144 END DO … … 1084 1146 WRITE(cl1,'(i1)') jd 1085 1147 CALL dia_nam( clname, jd * iddss, clsuff(jg), ldfsec = .TRUE. ) 1086 CALL event__set_attribut( cl1//'d_'//clsuff(jg), attr( file__name, TRIM(clname) ))1148 CALL iom_set_file_attr(cl1//'d_'//clsuff(jg), name=TRIM(clname)) 1087 1149 END DO 1088 1150 DO jm = 1, 6 ! 1, 2, 3, 4, 6 months … … 1090 1152 WRITE(cl1,'(i1)') jm 1091 1153 CALL dia_nam( clname, -jm, clsuff(jg) ) 1092 CALL event__set_attribut( cl1//'m_'//clsuff(jg), attr( file__name, TRIM(clname) ))1154 CALL iom_set_file_attr(cl1//'m_'//clsuff(jg), name=TRIM(clname)) 1093 1155 ENDIF 1094 1156 END DO … … 1097 1159 WRITE(cl2,'(i2)') jy 1098 1160 CALL dia_nam( clname, -jy * iyymo, clsuff(jg) ) 1099 CALL event__set_attribut( TRIM(ADJUSTL(cl2))//'y_'//clsuff(jg), attr( file__name, TRIM(clname) ))1161 CALL iom_set_file_attr(TRIM(ADJUSTL(cl2))//'y_'//clsuff(jg), name=TRIM(clname)) 1100 1162 ENDIF 1101 1163 END DO … … 1108 1170 ! Equatorial section (attributs: jbegin, ni, name_suffix) 1109 1171 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' ) ) 1172 CALL iom_set_domain_attr('Eq'//cl1, zoom_jbegin=iy, zoom_ni=jpiglo) 1173 CALL iom_set_file_attr('Eq'//cl1, name_suffix= '_Eq') 1113 1174 END DO 1114 1175 ! TAO moorings (attributs: ibegin, jbegin, name_suffix) … … 1185 1246 ENDIF 1186 1247 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) ) ) 1248 CALL iom_set_domain_attr(TRIM(clname)//cl1, zoom_ibegin= ix, zoom_jbegin= iy) 1249 CALL iom_set_file_attr(TRIM(clname)//cl1, name_suffix= '_'//TRIM(clname)) 1190 1250 END DO 1191 1251 END DO … … 1203 1263 #endif 1204 1264 1205 1265 FUNCTION i2str(int) 1266 IMPLICIT NONE 1267 INTEGER, INTENT(IN) :: int 1268 CHARACTER(LEN=255) :: i2str 1269 1270 WRITE(i2str,*) int 1271 1272 END FUNCTION i2str 1273 1206 1274 !!====================================================================== 1207 1275 END MODULE iom
Note: See TracChangeset
for help on using the changeset viewer.