Changeset 44 for vendor/nemo/current/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90
- Timestamp:
- 08/31/12 15:41:37 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
vendor/nemo/current/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90
r4 r44 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 … … 74 73 !!---------------------------------------------------------------------- 75 74 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 76 !! $Id: iom.F90 3 294 2012-01-28 16:44:18Z rblod $75 !! $Id: iom.F90 3415 2012-06-15 13:29:37Z rblod $ 77 76 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 78 77 !!---------------------------------------------------------------------- … … 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 !!---------------------------------------------------------------------- 92 93 CALL xios_context_initialize("nemo", mpi_comm_opa) 94 94 CALL iom_swap 95 95 96 96 ! calendar parameters 97 97 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')98 CASE ( 1) ; CALL xios_set_context_attr("nemo", calendar_type= "Gregorian") 99 CASE ( 0) ; CALL xios_set_context_attr("nemo", calendar_type= "NoLeap") 100 CASE (30) ; CALL xios_set_context_attr("nemo", calendar_type= "D360") 101 101 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 ) 102 WRITE(cldate,"(i4.4,'-',i2.2,'-',i2.2,' 00:00:00')") nyear,nmonth,nday 103 CALL xios_set_context_attr("nemo", start_date=cldate ) 105 104 106 105 ! horizontal grid definition 107 106 CALL set_scalar 108 CALL set_grid( "grid_T", glamt, gphit ) 107 CALL set_grid( "grid_T", glamt, gphit ) 109 108 CALL set_grid( "grid_U", glamu, gphiu ) 110 109 CALL set_grid( "grid_V", glamv, gphiv ) … … 112 111 113 112 ! 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 113 CALL xios_set_axis_attr("deptht",size=size(gdept_0),value=gdept_0) 114 CALL xios_set_axis_attr("depthu",size=size(gdept_0),value=gdept_0) 115 CALL xios_set_axis_attr("depthv",size=size(gdept_0),value=gdept_0) 116 CALL xios_set_axis_attr("depthw",size=size(gdepw_0),value=gdepw_0) 121 117 122 118 ! automatic definitions of some of the xml attributs … … 124 120 125 121 ! end file definition 126 CALL event__close_io_definition 122 dtime%second=rdt 123 CALL xios_set_timestep(dtime) 124 CALL xios_close_context_definition() 125 126 CALL xios_update_calendar(0) 127 127 #endif 128 128 … … 137 137 !!--------------------------------------------------------------------- 138 138 #if defined key_iomput 139 TYPE(xios_context) :: nemo_hdl 139 140 140 141 IF( TRIM(Agrif_CFixed()) == '0' ) THEN 141 CALL event__swap_context("nemo")142 CALL xios_get_handle("nemo",nemo_hdl) 142 143 ELSE 143 CALL event__swap_context(TRIM(Agrif_CFixed())//"_nemo")144 CALL xios_get_handle(TRIM(Agrif_CFixed())//"_nemo",nemo_hdl) 144 145 ENDIF 146 CALL xios_set_current_context(nemo_hdl) 145 147 146 148 #endif … … 339 341 INTEGER :: i_s, i_e ! temporary integer 340 342 CHARACTER(LEN=100) :: clinfo ! info character 343 INTEGER :: inb_period_initial, inb_period_final, inb_period_sec, inb_period_max, inb_period 341 344 !--------------------------------------------------------------------- 342 345 ! … … 349 352 i_e = jpmax_files 350 353 #if defined key_iomput 351 CALL event__stop_ioserver354 CALL xios_context_finalize() 352 355 #endif 353 356 ENDIF … … 960 963 REAL(wp) , INTENT(in) :: pfield0d 961 964 #if defined key_iomput 962 CALL event__write_field2D( cdname, RESHAPE( (/pfield0d/), (/1,1/) ))965 CALL xios_send_field(cdname, (/pfield0d/)) 963 966 #else 964 967 IF( .FALSE. ) WRITE(numout,*) cdname, pfield0d ! useless test to avoid compilation warnings … … 969 972 CHARACTER(LEN=*) , INTENT(in) :: cdname 970 973 REAL(wp), DIMENSION(:), INTENT(in) :: pfield1d 971 INTEGER :: jpz972 974 #if defined key_iomput 973 jpz=SIZE(pfield1d) 974 CALL event__write_field3D( cdname, RESHAPE( (/pfield1d/), (/1,1,jpz/) ) ) 975 CALL xios_send_field( cdname, RESHAPE( (/pfield1d/), (/1,1,SIZE(pfield1d)/) ) ) 975 976 #else 976 977 IF( .FALSE. ) WRITE(numout,*) cdname, pfield1d ! useless test to avoid compilation warnings … … 982 983 REAL(wp), DIMENSION(:,:), INTENT(in) :: pfield2d 983 984 #if defined key_iomput 984 CALL event__write_field2D( cdname, pfield2d(nldi:nlei, nldj:nlej))985 CALL xios_send_field(cdname, pfield2d) 985 986 #else 986 987 IF( .FALSE. ) WRITE(numout,*) cdname, pfield2d ! useless test to avoid compilation warnings … … 992 993 REAL(wp), DIMENSION(:,:,:), INTENT(in) :: pfield3d 993 994 #if defined key_iomput 994 CALL event__write_field3D( cdname, pfield3d(nldi:nlei, nldj:nlej, :))995 CALL xios_send_field(cdname, pfield3d) 995 996 #else 996 997 IF( .FALSE. ) WRITE(numout,*) cdname, pfield3d ! useless test to avoid compilation warnings … … 1002 1003 #if defined key_iomput 1003 1004 1005 SUBROUTINE iom_set_domain_attr( cdname, ni_glo, nj_glo, ibegin, jbegin, ni, nj, zoom_ibegin, zoom_jbegin, zoom_ni, zoom_nj, & 1006 & data_dim, data_ibegin, data_ni, data_jbegin, data_nj, lonvalue, latvalue ) 1007 CHARACTER(LEN=*) , INTENT(in) :: cdname 1008 INTEGER , OPTIONAL, INTENT(in) :: ni_glo, nj_glo, ibegin, jbegin, ni, nj 1009 INTEGER , OPTIONAL, INTENT(in) :: data_dim, data_ibegin, data_ni, data_jbegin, data_nj 1010 INTEGER , OPTIONAL, INTENT(in) :: zoom_ibegin, zoom_jbegin, zoom_ni, zoom_nj 1011 REAL(wp), DIMENSION(:), OPTIONAL, INTENT(in) :: lonvalue, latvalue 1012 1013 IF ( xios_is_valid_domain(TRIM(cdname)) ) THEN 1014 CALL xios_set_domain_attr( cdname, ni_glo=ni_glo, nj_glo=nj_glo, ibegin=ibegin, jbegin=jbegin, ni=ni, nj=nj , & 1015 & data_dim=data_dim, data_ibegin=data_ibegin, data_ni=data_ni, data_jbegin=data_jbegin, data_nj=data_nj, & 1016 & zoom_ibegin=zoom_ibegin, zoom_jbegin=zoom_jbegin, zoom_ni=zoom_ni, zoom_nj=zoom_nj, & 1017 & lonvalue=lonvalue, latvalue=latvalue ) 1018 ENDIF 1019 1020 IF ( xios_is_valid_domaingroup(TRIM(cdname)) ) THEN 1021 CALL xios_set_domaingroup_attr( cdname, ni_glo=ni_glo, nj_glo=nj_glo, ibegin=ibegin, jbegin=jbegin, ni=ni, nj=nj, & 1022 & data_dim=data_dim, data_ibegin=data_ibegin, data_ni=data_ni, data_jbegin=data_jbegin, data_nj=data_nj , & 1023 & zoom_ibegin=zoom_ibegin, zoom_jbegin=zoom_jbegin, zoom_ni=zoom_ni, zoom_nj=zoom_nj, & 1024 & lonvalue=lonvalue, latvalue=latvalue ) 1025 ENDIF 1026 1027 END SUBROUTINE iom_set_domain_attr 1028 1029 1030 SUBROUTINE iom_set_field_attr( cdname, freq_op) 1031 CHARACTER(LEN=*) , INTENT(in) :: cdname 1032 CHARACTER(LEN=*),OPTIONAL , INTENT(in) :: freq_op 1033 1034 IF ( xios_is_valid_field(TRIM(cdname)) ) THEN 1035 CALL xios_set_field_attr( cdname, freq_op=freq_op ) 1036 ENDIF 1037 IF ( xios_is_valid_fieldgroup(TRIM(cdname)) ) THEN 1038 CALL xios_set_fieldgroup_attr( cdname, freq_op=freq_op ) 1039 ENDIF 1040 1041 END SUBROUTINE iom_set_field_attr 1042 1043 1044 SUBROUTINE iom_set_file_attr( cdname, name, name_suffix ) 1045 CHARACTER(LEN=*) , INTENT(in) :: cdname 1046 CHARACTER(LEN=*),OPTIONAL , INTENT(in) :: name, name_suffix 1047 1048 IF ( xios_is_valid_file(TRIM(cdname)) ) THEN 1049 CALL xios_set_file_attr( cdname, name=name, name_suffix=name_suffix ) 1050 ENDIF 1051 IF ( xios_is_valid_filegroup(TRIM(cdname)) ) THEN 1052 CALL xios_set_filegroup_attr( cdname, name=name, name_suffix=name_suffix ) 1053 ENDIF 1054 1055 END SUBROUTINE iom_set_file_attr 1056 1057 1004 1058 SUBROUTINE set_grid( cdname, plon, plat ) 1005 1059 !!---------------------------------------------------------------------- … … 1012 1066 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: plon 1013 1067 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 1068 INTEGER :: ni,nj 1069 1070 ni=nlei-nldi+1 ; nj=nlej-nldj+1 1071 1072 CALL iom_set_domain_attr(cdname, ni_glo=jpiglo, nj_glo=jpjglo, ibegin=nimpp+nldi-1, jbegin=njmpp+nldj-1, ni=ni, nj=nj) 1073 CALL iom_set_domain_attr(cdname, data_dim=2, data_ibegin = 1-nldi, data_ni = jpi, data_jbegin = 1-nldj, data_nj = jpj) 1074 CALL iom_set_domain_attr(cdname, lonvalue = RESHAPE(plon(nldi:nlei, nldj:nlej),(/ ni*nj /)), & 1075 & latvalue = RESHAPE(plat(nldi:nlei, nldj:nlej),(/ ni*nj /))) 1076 1020 1077 END SUBROUTINE set_grid 1021 1078 … … 1030 1087 REAL(wp), DIMENSION(1,1) :: zz = 1. 1031 1088 !!---------------------------------------------------------------------- 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')1089 CALL iom_set_domain_attr('scalarpoint', ni_glo=jpnij, nj_glo=1, ibegin=narea, jbegin=1, ni=1, nj=1) 1090 CALL iom_set_domain_attr('scalarpoint', data_dim=1) 1091 CALL iom_set_domain_attr('scalarpoint', lonvalue=(/ zz /), latvalue=(/ zz /)) 1035 1092 1036 1093 END SUBROUTINE set_scalar … … 1049 1106 CHARACTER(len=1) :: cl1 ! 1 character 1050 1107 CHARACTER(len=2) :: cl2 ! 1 character 1108 CHARACTER(len=255) :: tfo 1051 1109 INTEGER :: idt ! time-step in seconds 1052 1110 INTEGER :: iddss, ihhss ! number of seconds in 1 day, 1 hour and 1 year … … 1068 1126 1069 1127 ! 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 1128 tfo = TRIM(i2str(idt))//'s' 1129 CALL iom_set_field_attr('field_definition', freq_op=tfo) 1130 CALL iom_set_field_attr('SBC', freq_op=TRIM(i2str(idt* nn_fsbc))//'s') 1131 1073 1132 ! output file names (attribut: name) 1074 1133 clsuff(:) = (/ 'grid_T', 'grid_U', 'grid_V', 'grid_W', 'icemod', 'ptrc_T', 'diad_T', 'scalar' /) … … 1078 1137 WRITE(cl2,'(i2)') jh 1079 1138 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) ))1139 CALL iom_set_file_attr(TRIM(ADJUSTL(cl2))//'h_'//clsuff(jg), name=TRIM(clname)) 1081 1140 ENDIF 1082 1141 END DO … … 1084 1143 WRITE(cl1,'(i1)') jd 1085 1144 CALL dia_nam( clname, jd * iddss, clsuff(jg), ldfsec = .TRUE. ) 1086 CALL event__set_attribut( cl1//'d_'//clsuff(jg), attr( file__name, TRIM(clname) ))1145 CALL iom_set_file_attr(cl1//'d_'//clsuff(jg), name=TRIM(clname)) 1087 1146 END DO 1088 1147 DO jm = 1, 6 ! 1, 2, 3, 4, 6 months … … 1090 1149 WRITE(cl1,'(i1)') jm 1091 1150 CALL dia_nam( clname, -jm, clsuff(jg) ) 1092 CALL event__set_attribut( cl1//'m_'//clsuff(jg), attr( file__name, TRIM(clname) ))1151 CALL iom_set_file_attr(cl1//'m_'//clsuff(jg), name=TRIM(clname)) 1093 1152 ENDIF 1094 1153 END DO … … 1097 1156 WRITE(cl2,'(i2)') jy 1098 1157 CALL dia_nam( clname, -jy * iyymo, clsuff(jg) ) 1099 CALL event__set_attribut( TRIM(ADJUSTL(cl2))//'y_'//clsuff(jg), attr( file__name, TRIM(clname) ))1158 CALL iom_set_file_attr(TRIM(ADJUSTL(cl2))//'y_'//clsuff(jg), name=TRIM(clname)) 1100 1159 ENDIF 1101 1160 END DO … … 1108 1167 ! Equatorial section (attributs: jbegin, ni, name_suffix) 1109 1168 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' ) ) 1169 CALL iom_set_domain_attr('Eq'//cl1, zoom_jbegin=iy, zoom_ni=jpiglo) 1170 CALL iom_set_file_attr('Eq'//cl1, name_suffix= '_Eq') 1113 1171 END DO 1114 1172 ! TAO moorings (attributs: ibegin, jbegin, name_suffix) … … 1185 1243 ENDIF 1186 1244 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) ) ) 1245 CALL iom_set_domain_attr(TRIM(clname)//cl1, zoom_ibegin= ix, zoom_jbegin= iy) 1246 CALL iom_set_file_attr(TRIM(clname)//cl1, name_suffix= '_'//TRIM(clname)) 1190 1247 END DO 1191 1248 END DO … … 1203 1260 #endif 1204 1261 1205 1262 FUNCTION i2str(int) 1263 IMPLICIT NONE 1264 INTEGER, INTENT(IN) :: int 1265 CHARACTER(LEN=255) :: i2str 1266 1267 WRITE(i2str,*) int 1268 1269 END FUNCTION i2str 1270 1206 1271 !!====================================================================== 1207 1272 END MODULE iom
Note: See TracChangeset
for help on using the changeset viewer.