Changeset 3629 for LMDZ5/branches/IPSLCM5A2.1/libf/phylmd/iophy.F90
- Timestamp:
- Feb 10, 2020, 9:54:26 AM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/branches/IPSLCM5A2.1/libf/phylmd/iophy.F90
r2529 r3629 884 884 ! ug NOUVELLE VERSION DES WRITE AVEC LA BOUCLE DO RENTREE 885 885 SUBROUTINE histwrite2d_phy(var,field, STD_iff) 886 USE dimphy, only: klon887 USE mod_phys_lmdz_para, only: gather_omp, grid1dto2d_mpi, &886 USE dimphy, ONLY: klon, klev 887 USE mod_phys_lmdz_para, ONLY: gather_omp, grid1dto2d_mpi, & 888 888 jj_nb, klon_mpi, klon_mpi_begin, & 889 889 klon_mpi_end, is_sequential … … 917 917 REAL, ALLOCATABLE, DIMENSION(:) :: fieldok 918 918 919 IF (prt_level >= 10) THEN919 ! IF (prt_level >= 10) THEN 920 920 WRITE(lunout,*)'Begin histwrite2d_phy for ',trim(var%name) 921 ENDIF921 ! ENDIF 922 922 ! ug RUSTINE POUR LES STD LEVS..... 923 923 IF (PRESENT(STD_iff)) THEN … … 948 948 949 949 !Et sinon on.... écrit 950 IF (SIZE(field)/=klon) CALL abort_physic('iophy::histwrite2d_phy','Field first DIMENSION not equal to klon',1) 950 IF (SIZE(field)/=klon .AND. SIZE(field)/=klev .AND. SIZE(field)/=klev+1) CALL abort_physic('iophy::histwrite2d_phy','Field first DIMENSION not equal to klon/klev',1) 951 IF (prt_level >= 10) THEn 952 WRITE (lunout,*)"histwrite2d_phy: .not.vars_defined ; time to gather and write ", trim(var%name) 953 ENDIF 951 954 952 if (prt_level >= 10) then953 write(lunout,*)"histwrite2d_phy: .not.vars_defined ; time to gather and write ", &954 trim(var%name)955 endif956 955 957 CALL Gather_omp(field,buffer_omp) 956 IF (SIZE(field) == klon) then 957 CALL Gather_omp(field,buffer_omp) 958 ELSE 959 buffer_omp(:)=0. 960 ENDIF 958 961 !$OMP MASTER 959 962 CALL grid1Dto2D_mpi(buffer_omp,Field2d) … … 964 967 IF (ok_all_xml) THEN 965 968 #ifdef CPP_XIOS 966 if (prt_level >= 10) then 967 write(lunout,*)'Dans iophy histwrite2D,var%name ',& 968 trim(var%name) 969 endif 970 CALL xios_send_field(var%name, Field2d) 971 if (prt_level >= 10) then 972 write(lunout,*)'Dans iophy histwrite2D,var%name apres xios_send ',& 973 trim(var%name) 974 endif 969 IF (prt_level >= 10) THEN 970 write(lunout,*)'Dans iophy histwrite2D,var%name ', trim(var%name) 971 ENDIF 972 IF (SIZE(field) == klon) then 973 CALL xios_send_field(var%name, Field2d) 974 ELSE 975 CALL xios_send_field(var%name, field) 976 ENDIF 977 IF (prt_level >= 10) THEN 978 WRITE (lunout,*)'Dans iophy histwrite2D,var%name apres xios_send ', trim(var%name) 979 ENDIF 975 980 #else 976 981 CALL abort_physic ('iophy','cannot have ok_all_xml = .T. without CPP_XIOS defined' ,1) … … 982 987 #ifdef CPP_XIOS 983 988 IF (firstx) THEN 984 if (prt_level >= 10) then 985 write(lunout,*)'Dans iophy histwrite2D,iff,var%name ',& 986 iff,trim(var%name) 987 write(lunout,*)"histwrite2d_phy:.NOT.clef_stations(iff)and iff==iff_beg, call xios_send_field" 988 endif 989 CALL xios_send_field(var%name, Field2d) 989 IF (prt_level >= 10) THEN 990 WRITE (lunout,*)'Dans iophy histwrite2D,iff,var%name ', iff,trim(var%name) 991 WRITE (lunout,*)"histwrite2d_phy:.NOT.clef_stations(iff)and iff==iff_beg, call xios_send_field" 992 ENDIF 993 IF (SIZE(field) == klon) then 994 CALL xios_send_field(var%name, Field2d) 995 ELSE 996 CALL xios_send_field(var%name, field) 997 ENDIF 990 998 firstx=.false. 991 999 ENDIF … … 1083 1091 iff_beg = 1 1084 1092 iff_end = nfiles 1085 END 1093 ENDIF 1086 1094 1087 1095 ! On regarde si on est dans la phase de définition ou d'écriture: … … 1097 1105 ELSE 1098 1106 !Et sinon on.... écrit 1099 IF (SIZE(field,1)/=klon) CALL abort_physic('iophy::histwrite3d','Field first DIMENSION not equal to klon',1) 1107 1108 IF (SIZE(field,1)/=klon .AND. SIZE(field,1)/=klev .AND. SIZE(field,1)/=klev+1) CALL abort_physic('iophy::histwrite3d_phy','Field first DIMENSION not equal to klon/klev',1) 1109 1100 1110 nlev=SIZE(field,2) 1101 1111 if (nlev.eq.klev+1) then … … 1105 1115 endif 1106 1116 1107 CALL Gather_omp(field,buffer_omp) 1117 IF (SIZE(field,1) == klon) then 1118 CALL Gather_omp(field,buffer_omp) 1119 ELSE 1120 buffer_omp(:,:)=0. 1121 ENDIF 1108 1122 !$OMP MASTER 1109 1123 CALL grid1Dto2D_mpi(buffer_omp,field3d) … … 1118 1132 write(lunout,*)'Dans iophy histwrite3D,var%name ',& 1119 1133 trim(var%name) 1120 endif 1121 CALL xios_send_field(var%name, Field3d(:,:,1:nlevx)) 1134 ENDIF 1135 IF (SIZE(field,1) == klon) then 1136 CALL xios_send_field(var%name, Field3d(:,:,1:nlevx)) 1137 ELSE 1138 CALL xios_send_field(var%name, field) 1139 ENDIF 1122 1140 #else 1123 1141 CALL abort_physic ('iophy','cannot have ok_all_xml = .T. without CPP_XIOS defined' ,1) … … 1136 1154 trim(var%name), ' with iim jjm nlevx = ', & 1137 1155 nbp_lon,jj_nb,nlevx 1138 endif 1139 CALL xios_send_field(var%name, Field3d(:,:,1:nlevx)) 1140 firstx=.false. 1156 ENDIF 1157 IF (SIZE(field,1) == klon) then 1158 CALL xios_send_field(var%name, Field3d(:,:,1:nlevx)) 1159 ELSE 1160 CALL xios_send_field(var%name, field) 1161 ENDIF 1162 firstx=.false. 1141 1163 ENDIF 1142 1164 #endif … … 1194 1216 #ifdef CPP_XIOS 1195 1217 SUBROUTINE histwrite2d_xios(field_name,field) 1196 USE dimphy, only: klon1197 USE mod_phys_lmdz_para, only: gather_omp, grid1Dto2D_mpi, &1218 USE dimphy, ONLY: klon, klev 1219 USE mod_phys_lmdz_para, ONLY: gather_omp, grid1Dto2D_mpi, & 1198 1220 is_sequential, klon_mpi_begin, klon_mpi_end, & 1199 1221 jj_nb, klon_mpi … … 1217 1239 1218 1240 !Et sinon on.... écrit 1219 IF (SIZE(field)/=klon ) CALL abort_physic('iophy::histwrite2d_xios','Field first DIMENSION not equal to klon',1)1241 IF (SIZE(field)/=klon .AND. SIZE(field)/=klev .AND. SIZE(field)/=klev+1) CALL abort_physic('iophy::histwrite2d_xios','Field first DIMENSION not equal to klon/klev',1) 1220 1242 1221 CALL Gather_omp(field,buffer_omp) 1243 IF (SIZE(field) == klev .OR. SIZE(field) == klev+1) then 1244 !$OMP MASTER 1245 CALL xios_send_field(field_name,field) 1246 !$OMP END MASTER 1247 ELSE 1248 CALL Gather_omp(field,buffer_omp) 1222 1249 !$OMP MASTER 1223 1250 CALL grid1Dto2D_mpi(buffer_omp,Field2d) … … 1257 1284 deallocate(fieldok) 1258 1285 !$OMP END MASTER 1286 ENDIF 1259 1287 1260 1288 IF (prt_level >= 10) WRITE(lunout,*)'End histrwrite2d_xios ',field_name … … 1286 1314 1287 1315 !Et on.... écrit 1288 IF (SIZE(field,1)/=klon) CALL abort_physic('iophy::histwrite3d','Field first DIMENSION not equal to klon',1) 1289 nlev=SIZE(field,2) 1316 IF (SIZE(field,1)/=klon .AND. SIZE(field,1)/=klev .AND. SIZE(field,1)/=klev+1) then 1317 write(lunout,*)' histrwrite3d_xios ', field_name, SIZE(field) 1318 CALL abort_physic('iophy::histwrite3d_xios','Field first DIMENSION not equal to klon/klev',1) 1319 ENDIF 1320 1321 IF (SIZE(field,1) == klev .OR. SIZE(field,1) == klev+1) then 1322 !$OMP MASTER 1323 CALL xios_send_field(field_name,field) 1324 !$OMP END MASTER 1325 ELSE 1326 nlev=SIZE(field,2) 1290 1327 1291 1328 … … 1328 1365 deallocate(fieldok) 1329 1366 !$OMP END MASTER 1367 ENDIF 1330 1368 1331 1369 IF (prt_level >= 10) write(lunout,*)'End histrwrite3d_xios ',field_name 1332 1370 END SUBROUTINE histwrite3d_xios 1371 1372 #ifdef CPP_XIOS 1373 SUBROUTINE histwrite0d_xios(field_name, field) 1374 USE xios, ONLY: xios_send_field 1375 IMPLICIT NONE 1376 1377 CHARACTER(LEN=*), INTENT(IN) :: field_name 1378 REAL, INTENT(IN) :: field ! --> scalar 1379 1380 !$OMP MASTER 1381 CALL xios_send_field(field_name, field) 1382 !$OMP END MASTER 1383 1384 END SUBROUTINE histwrite0d_xios 1385 #endif 1386 1333 1387 #endif 1334 1388 end module iophy
Note: See TracChangeset
for help on using the changeset viewer.