Changeset 3605 for LMDZ6/branches/Ocean_skin/libf/phylmd/iophy.F90
- Timestamp:
- Nov 21, 2019, 4:43:45 PM (4 years ago)
- Location:
- LMDZ6/branches/Ocean_skin
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/Ocean_skin
-
LMDZ6/branches/Ocean_skin/libf/phylmd/iophy.F90
r3266 r3605 18 18 #ifdef CPP_XIOS 19 19 INTERFACE histwrite_phy 20 !#ifdef CPP_XIOSnew21 20 MODULE PROCEDURE histwrite2d_phy,histwrite3d_phy,histwrite2d_phy_old,histwrite3d_phy_old,histwrite2d_xios,histwrite3d_xios,histwrite0d_xios 22 !#else23 ! MODULE PROCEDURE histwrite2d_phy,histwrite3d_phy,histwrite2d_phy_old,histwrite3d_phy_old,histwrite2d_xios,histwrite3d_xios24 !#endif25 26 21 END INTERFACE 27 22 #else … … 52 47 mpi_size, mpi_rank, klon_mpi, & 53 48 is_sequential, is_south_pole_dyn 54 USE mod_grid_phy_lmdz, ONLY: nbp_lon, nbp_lat, klon_glo55 49 USE mod_grid_phy_lmdz, ONLY: nbp_lon, nbp_lat, klon_glo, grid_type, unstructured 50 USE print_control_mod, ONLY: prt_level,lunout 56 51 #ifdef CPP_IOIPSL 57 52 USE ioipsl, ONLY: flio_dom_set 58 53 #endif 59 54 #ifdef CPP_XIOS 60 USE wxios, ONLY: wxios_domain_param55 use wxios, ONLY: wxios_domain_param, wxios_domain_param_unstructured, wxios_context_init 61 56 #endif 62 57 IMPLICIT NONE … … 77 72 INTEGER :: data_ibegin, data_iend 78 73 79 CALL gather(rlat,rlat_glo) 80 CALL bcast(rlat_glo) 81 CALL gather(rlon,rlon_glo) 82 CALL bcast(rlon_glo) 74 #ifdef CPP_XIOS 75 CALL wxios_context_init 76 #endif 77 78 79 IF (grid_type==unstructured) THEN 80 81 #ifdef CPP_XIOS 82 CALL wxios_domain_param_unstructured("dom_glo") 83 #endif 84 85 ELSE 86 87 CALL gather(rlat,rlat_glo) 88 CALL bcast(rlat_glo) 89 CALL gather(rlon,rlon_glo) 90 CALL bcast(rlon_glo) 83 91 84 92 !$OMP MASTER … … 133 141 #endif 134 142 #ifdef CPP_XIOS 135 ! Set values for the mask: 136 IF (mpi_rank == 0) THEN 137 data_ibegin = 0 138 ELSE 139 data_ibegin = ii_begin - 1 140 ENDIF 141 142 IF (mpi_rank == mpi_size-1) THEN 143 data_iend = nbp_lon 144 ELSE 145 data_iend = ii_end + 1 146 ENDIF 147 148 IF (prt_level>=10) THEN 149 write(lunout,*) "init_iophy_new: mpirank=",mpi_rank," iibegin=",ii_begin , " ii_end=",ii_end," jjbegin=",jj_begin," jj_nb=",jj_nb," jj_end=",jj_end 150 write(lunout,*) "init_iophy_new: mpirank=",mpi_rank," nbp_lon=",nbp_lon," nbp_lat=",nbp_lat 151 write(lunout,*) "init_iophy_new: mpirank=",mpi_rank," data_ibegin=",data_ibegin," data_iend=",data_iend 152 write(lunout,*) "init_iophy_new: mpirank=",mpi_rank," data_ibegin=",data_ibegin," data_iend=",data_iend 153 write(lunout,*) "init_iophy_new: mpirank=",mpi_rank," is_south_pole=",is_south_pole_dyn 154 ENDIF 155 156 ! Initialize the XIOS domain coreesponding to this process: 157 CALL wxios_domain_param("dom_glo", is_sequential, nbp_lon, jj_nb, nbp_lon, nbp_lat, & 158 1, nbp_lon, ii_begin, ii_end, jj_begin, jj_end, & 159 klon_mpi+2*(nbp_lon-1), data_ibegin, data_iend, & 160 io_lat, io_lon,is_south_pole_dyn,mpi_rank) 143 ! Set values for the mask: 144 IF (mpi_rank == 0) THEN 145 data_ibegin = 0 146 ELSE 147 data_ibegin = ii_begin - 1 148 END IF 149 150 IF (mpi_rank == mpi_size-1) THEN 151 data_iend = nbp_lon 152 ELSE 153 data_iend = ii_end + 1 154 END IF 155 156 IF (prt_level>=10) THEN 157 write(lunout,*) "init_iophy_new: mpirank=",mpi_rank," iibegin=",ii_begin , " ii_end=",ii_end," jjbegin=",jj_begin," jj_nb=",jj_nb," jj_end=",jj_end 158 write(lunout,*) "init_iophy_new: mpirank=",mpi_rank," nbp_lon=",nbp_lon," nbp_lat=",nbp_lat 159 write(lunout,*) "init_iophy_new: mpirank=",mpi_rank," data_ibegin=",data_ibegin," data_iend=",data_iend 160 write(lunout,*) "init_iophy_new: mpirank=",mpi_rank," data_ibegin=",data_ibegin," data_iend=",data_iend 161 write(lunout,*) "init_iophy_new: mpirank=",mpi_rank," is_south_pole_dyn=",is_south_pole_dyn 162 ENDIF 163 164 ! Initialize the XIOS domain coreesponding to this process: 161 165 #endif 162 166 !$OMP END MASTER 167 168 #ifdef CPP_XIOS 169 CALL wxios_domain_param("dom_glo") 170 #endif 171 172 ENDIF 163 173 164 174 END SUBROUTINE init_iophy_new … … 291 301 is_sequential, klon_mpi_begin, klon_mpi_end, & 292 302 mpi_rank 293 USE mod_grid_phy_lmdz, ONLY: klon_glo, nbp_lon, nbp_lat 303 USE mod_grid_phy_lmdz, ONLY: klon_glo, nbp_lon, nbp_lat, grid1dTo2d_glo 294 304 USE ioipsl, ONLY: histbeg 295 305 … … 366 376 ENDDO 367 377 368 CALL gr _fi_ecrit(1,klon,nbp_lon,nbp_lat,rlon_glo,zx_lon)378 CALL grid1dTo2d_glo(rlon_glo,zx_lon) 369 379 IF ((nbp_lon*nbp_lat).GT.1) THEN 370 380 DO i = 1, nbp_lon … … 373 383 ENDDO 374 384 ENDIF 375 CALL gr _fi_ecrit(1,klon,nbp_lon,nbp_lat,rlat_glo,zx_lat)385 CALL grid1dTo2d_glo(rlat_glo,zx_lat) 376 386 377 387 DO i=1,pim … … 963 973 nid_files, swaerofree_diag, swaero_diag, dryaod_diag, ok_4xCO2atm 964 974 USE print_control_mod, ONLY: prt_level,lunout 965 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat 975 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat, grid_type, unstructured, regular_lonlat 966 976 #ifdef CPP_XIOS 967 977 USE xios, ONLY: xios_send_field 968 978 #endif 979 USE print_control_mod, ONLY: lunout, prt_level 969 980 970 981 IMPLICIT NONE … … 1007 1018 IF (.not. ok_all_xml) THEN 1008 1019 IF (prt_level >= 10) THEN 1009 WRITE (lunout,*)"histwrite2d_phy: .not.vars_defined ; time to define ", trim(var%name) 1020 write(lunout,*)"histwrite2d_phy: .not.vars_defined ; time to define ", & 1021 trim(var%name) 1010 1022 ENDIF 1011 1023 DO iff=iff_beg, iff_end … … 1025 1037 1026 1038 !Et sinon on.... écrit 1027 IF (SIZE(field)/=klon .AND. SIZE(field)/=klev ) CALL abort_physic('iophy::histwrite2d_phy','Field first DIMENSION not equal to klon/klev',1)1039 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) 1028 1040 IF (prt_level >= 10) THEn 1029 1041 WRITE (lunout,*)"histwrite2d_phy: .not.vars_defined ; time to gather and write ", trim(var%name) … … 1037 1049 ENDIF 1038 1050 !$OMP MASTER 1039 CALL grid1Dto2D_mpi(buffer_omp,Field2d)1051 IF (grid_type==regular_lonlat) CALL grid1Dto2D_mpi(buffer_omp,Field2d) 1040 1052 1041 1053 ! La boucle sur les fichiers: … … 1047 1059 write(lunout,*)'Dans iophy histwrite2D,var%name ', trim(var%name) 1048 1060 ENDIF 1049 IF (SIZE(field) == klon) then 1061 1062 IF (grid_type==regular_lonlat) THEN 1063 IF (SIZE(field) == klon) then 1050 1064 CALL xios_send_field(var%name, Field2d) 1051 ELSE 1052 CALL xios_send_field(var%name, field) 1053 ENDIF 1065 ELSE 1066 CALL xios_send_field(var%name, field) 1067 ENDIF 1068 ELSE IF (grid_type==unstructured) THEN 1069 IF (SIZE(field) == klon) then 1070 CALL xios_send_field(var%name, buffer_omp) 1071 ELSE 1072 CALL xios_send_field(var%name, field) 1073 ENDIF 1074 1075 ENDIF 1054 1076 IF (prt_level >= 10) THEN 1055 WRITE (lunout,*)'Dans iophy histwrite2D,var%name apres xios_send ', trim(var%name) 1077 write(lunout,*)'Dans iophy histwrite2D,var%name apres xios_send ',& 1078 trim(var%name) 1056 1079 ENDIF 1057 1080 #else … … 1065 1088 IF (firstx) THEN 1066 1089 IF (prt_level >= 10) THEN 1067 WRITE (lunout,*)'Dans iophy histwrite2D,iff,var%name ', iff,trim(var%name) 1068 WRITE (lunout,*)"histwrite2d_phy:.NOT.clef_stations(iff)and iff==iff_beg, call xios_send_field" 1090 write(lunout,*)'Dans iophy histwrite2D,iff,var%name ',& 1091 iff,trim(var%name) 1092 write(lunout,*)"histwrite2d_phy:.NOT.clef_stations(iff)and iff==iff_beg, call xios_send_field" 1069 1093 ENDIF 1070 IF (SIZE(field) == klon) then 1071 CALL xios_send_field(var%name, Field2d) 1072 ELSE 1073 CALL xios_send_field(var%name, field) 1094 IF (grid_type==regular_lonlat) THEN 1095 IF (SIZE(field) == klon) then 1096 CALL xios_send_field(var%name, Field2d) 1097 ELSE 1098 CALL xios_send_field(var%name, field) 1099 ENDIF 1100 ELSE IF (grid_type==unstructured) THEN 1101 IF (SIZE(field) == klon) then 1102 CALL xios_send_field(var%name, buffer_omp) 1103 ELSE 1104 CALL xios_send_field(var%name, field) 1105 ENDIF 1074 1106 ENDIF 1107 1075 1108 firstx=.false. 1076 1109 ENDIF … … 1085 1118 !#ifdef CPP_XIOS 1086 1119 ! IF (iff == iff_beg) THEN 1087 ! if (prt_level >= 10) then1120 ! IF (prt_level >= 10) THEN 1088 1121 ! write(lunout,*)"histwrite2d_phy: .NOT.clef_stations(iff) and iff==iff_beg, call xios_send_field" 1089 ! endif1122 ! ENDIF 1090 1123 ! CALL xios_send_field(var%name, Field2d) 1091 1124 ! ENDIF … … 1109 1142 ENDIF ! of IF (is_sequential) 1110 1143 #ifndef CPP_IOIPSL_NO_OUTPUT 1111 IF (prt_level >= 10) THE n1144 IF (prt_level >= 10) THEN 1112 1145 write(lunout,*)"histwrite2d_phy: clef_stations(iff) and iff==iff_beg, call wxios_write_2D" 1113 1146 ENDIF … … 1141 1174 nfiles, vars_defined, clef_stations, & 1142 1175 nid_files, swaerofree_diag 1143 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat 1176 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat, grid_type, regular_lonlat, unstructured 1144 1177 #ifdef CPP_XIOS 1145 1178 USE xios, ONLY: xios_send_field … … 1191 1224 !Et sinon on.... écrit 1192 1225 1193 IF (SIZE(field,1)/=klon .AND. SIZE(field,1)/=klev ) CALL abort_physic('iophy::histwrite3d_xios','Field first DIMENSION not equal to klon/klev',1)1226 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) 1194 1227 1195 1228 nlev=SIZE(field,2) … … 1206 1239 ENDIF 1207 1240 !$OMP MASTER 1208 CALL grid1Dto2D_mpi(buffer_omp,field3d)1241 IF (grid_type==regular_lonlat) CALL grid1Dto2D_mpi(buffer_omp,field3d) 1209 1242 1210 1243 ! BOUCLE SUR LES FICHIERS … … 1213 1246 IF (ok_all_xml) THEN 1214 1247 #ifdef CPP_XIOS 1215 IF (prt_level >= 10) THEN 1216 write(lunout,*)'Dans iophy histwrite3D,var%name ',trim(var%name) 1248 IF (prt_level >= 10) THEN 1249 write(lunout,*)'Dans iophy histwrite3D,var%name ',& 1250 trim(var%name) 1251 ENDIF 1252 IF (grid_type==regular_lonlat) THEN 1253 IF (SIZE(field,1) == klon) then 1254 CALL xios_send_field(var%name, Field3d(:,:,1:nlevx)) 1255 ELSE 1256 CALL xios_send_field(var%name, field) 1257 ENDIF 1258 ELSE IF (grid_type==unstructured) THEN 1259 IF (SIZE(field,1) == klon) then 1260 CALL xios_send_field(var%name, buffer_omp(:,1:nlevx)) 1261 ELSE 1262 CALL xios_send_field(var%name, field) 1263 ENDIF 1217 1264 ENDIF 1218 IF (SIZE(field,1) == klon) then 1219 CALL xios_send_field(var%name, Field3d(:,:,1:nlevx)) 1220 ELSE 1221 CALL xios_send_field(var%name, field) 1222 ENDIF 1265 1223 1266 #else 1224 1267 CALL abort_physic ('iophy','cannot have ok_all_xml = .T. without CPP_XIOS defined' ,1) … … 1230 1273 #ifdef CPP_XIOS 1231 1274 IF (firstx) THEN 1232 IF (prt_level >= 10) THE n1233 WRITE(lunout,*)'Dans iophy, histwrite3D iff nlev klev firstx', &1275 IF (prt_level >= 10) THEN 1276 write(lunout,*)'Dans iophy, histwrite3D iff nlev klev firstx', & 1234 1277 iff,nlev,klev, firstx 1235 WRITE(lunout,*)'histwrite3d_phy: call xios_send_field for ', &1278 write(lunout,*)'histwrite3d_phy: call xios_send_field for ', & 1236 1279 trim(var%name), ' with iim jjm nlevx = ', & 1237 1280 nbp_lon,jj_nb,nlevx 1238 1281 ENDIF 1239 IF (SIZE(field,1) == klon) then 1240 CALL xios_send_field(var%name, Field3d(:,:,1:nlevx)) 1241 ELSE 1282 IF (grid_type==regular_lonlat) THEN 1283 IF (SIZE(field,1) == klon) then 1284 CALL xios_send_field(var%name, Field3d(:,:,1:nlevx)) 1285 ELSE 1286 CALL xios_send_field(var%name, field) 1287 ENDIF 1288 ELSE IF (grid_type==unstructured) THEN 1289 IF (SIZE(field,1) == klon) then 1290 CALL xios_send_field(var%name, buffer_omp(:,1:nlevx)) 1291 ELSE 1242 1292 CALL xios_send_field(var%name, field) 1293 ENDIF 1243 1294 ENDIF 1295 1244 1296 firstx=.false. 1245 1297 ENDIF … … 1305 1357 is_sequential, klon_mpi_begin, klon_mpi_end, & 1306 1358 jj_nb, klon_mpi, is_master 1307 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat 1359 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat, grid_type, unstructured 1308 1360 USE xios, ONLY: xios_send_field 1309 1361 USE print_control_mod, ONLY: prt_level,lunout … … 1325 1377 IF (prt_level >= 10) WRITE(lunout,*)'Begin histrwrite2d_xios ',field_name 1326 1378 1327 !Et sinon on.... écrit 1328 IF (SIZE(field)/=klon .AND. SIZE(field)/=klev) CALL abort_physic('iophy::histwrite2d_xios','Field first DIMENSION not equal to klon/klev',1) 1329 1330 IF (SIZE(field) == klev) then 1379 !Et sinon on.... écrit 1380 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) 1381 IF (SIZE(field) == klev .OR. SIZE(field) == klev+1) then 1331 1382 !$OMP MASTER 1383 1332 1384 CALL xios_send_field(field_name,field) 1333 1385 !$OMP END MASTER … … 1335 1387 CALL Gather_omp(field,buffer_omp) 1336 1388 !$OMP MASTER 1389 1390 IF (grid_type==unstructured) THEN 1391 1392 CALL xios_send_field(field_name, buffer_omp) 1393 1394 ELSE 1395 1337 1396 CALL grid1Dto2D_mpi(buffer_omp,Field2d) 1338 1397 … … 1342 1401 !IF(.NOT.clef_stations(iff)) THEN 1343 1402 IF (.TRUE.) THEN 1344 ALLOCATE(index2d(nbp_lon*jj_nb))1345 ALLOCATE(fieldok(nbp_lon*jj_nb))1346 1347 1403 1348 1404 CALL xios_send_field(field_name, Field2d) … … 1365 1421 ENDDO 1366 1422 ENDIF 1367 1368 ENDIF1369 1370 DEALLOCATE(index2d)1371 DEALLOCATE(fieldok)1423 DEALLOCATE(index2d) 1424 DEALLOCATE(fieldok) 1425 1426 ENDIF 1427 ENDIF 1372 1428 !$OMP END MASTER 1373 1429 ENDIF … … 1385 1441 jj_nb, klon_mpi, is_master 1386 1442 USE xios, ONLY: xios_send_field 1387 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat 1443 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat, grid_type, unstructured 1388 1444 USE print_control_mod, ONLY: prt_level,lunout 1389 1445 … … 1403 1459 IF (prt_level >= 10) write(lunout,*)'Begin histrwrite3d_xios ',field_name 1404 1460 1405 !Et on.... écrit 1406 IF (SIZE(field,1)/=klon .AND. SIZE(field,1)/=klev) CALL abort_physic('iophy::histwrite3d_xios','Field first DIMENSION not equal to klon/klev',1) 1407 1408 IF (SIZE(field,1) == klev) then 1461 !Et on.... écrit 1462 IF (SIZE(field,1)/=klon .AND. SIZE(field,1)/=klev .AND. SIZE(field,1)/=klev+1) then 1463 write(lunout,*)' histrwrite3d_xios ', field_name, SIZE(field) 1464 CALL abort_physic('iophy::histwrite3d_xios','Field first DIMENSION not equal to klon/klev',1) 1465 ENDIF 1466 1467 IF (SIZE(field,1) == klev .OR. SIZE(field,1) == klev+1) then 1409 1468 !$OMP MASTER 1410 1469 CALL xios_send_field(field_name,field) … … 1416 1475 CALL Gather_omp(field,buffer_omp) 1417 1476 !$OMP MASTER 1477 1478 IF (grid_type==unstructured) THEN 1479 1480 CALL xios_send_field(field_name, buffer_omp(:,1:nlev)) 1481 1482 ELSE 1418 1483 CALL grid1Dto2D_mpi(buffer_omp,field3d) 1419 1484 … … 1423 1488 !IF (.NOT.clef_stations(iff)) THEN 1424 1489 IF(.TRUE.)THEN 1425 ALLOCATE(index3d(nbp_lon*jj_nb*nlev)) 1426 ALLOCATE(fieldok(nbp_lon*jj_nb,nlev)) 1427 CALL xios_send_field(field_name, Field3d(:,:,1:nlev)) 1490 1491 CALL xios_send_field(field_name, Field3d(:,:,1:nlev)) 1428 1492 1429 1493 ELSE … … 1448 1512 ENDDO 1449 1513 ENDIF 1514 DEALLOCATE(index3d) 1515 DEALLOCATE(fieldok) 1450 1516 ENDIF 1451 DEALLOCATE(index3d) 1452 DEALLOCATE(fieldok) 1517 ENDIF 1453 1518 !$OMP END MASTER 1454 1519 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.