Changeset 1320 for palm/trunk/SOURCE/poismg.f90
- Timestamp:
- Mar 20, 2014 8:40:49 AM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/poismg.f90
r1319 r1320 23 23 ! Current revisions: 24 24 ! ----------------- 25 ! 25 ! ONLY-attribute added to USE-statements, 26 ! kind-parameters added to all INTEGER and REAL declaration statements, 27 ! kinds are defined in new module kinds, 28 ! old module precision_kind is removed, 29 ! revision history before 2012 removed, 30 ! comment fields (!:) to be used for variable explanations added to 31 ! all variable declaration statements 26 32 ! 27 33 ! Former revisions: … … 108 114 !------------------------------------------------------------------------------! 109 115 110 USE arrays_3d 111 USE control_parameters 112 USE cpulog 113 USE grid_variables 114 USE indices 116 USE arrays_3d, & 117 ONLY: d, p_loc 118 119 USE control_parameters, & 120 ONLY: gathered_size, grid_level, grid_level_count, & 121 maximum_grid_level, message_string, mgcycles, mg_cycles, & 122 mg_switch_to_pe0_level, residual_limit, subdomain_size 123 124 USE cpulog, & 125 ONLY: cpu_log, log_point_s 126 127 USE indices, & 128 ONLY: nxl, nxlg, nxl_mg, nxr, nxrg, nxr_mg, nys, nysg, nys_mg, nyn, & 129 nyng, nyn_mg, nzb, nzt, nzt_mg 130 131 USE kinds 132 115 133 USE pegrid 116 134 117 135 IMPLICIT NONE 118 136 119 REAL :: maxerror, maximum_mgcycles, residual_norm 120 121 REAL, DIMENSION(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1) :: r 122 123 REAL, DIMENSION(:,:,:), ALLOCATABLE :: p3 137 REAL(wp) :: maxerror !: 138 REAL(wp) :: maximum_mgcycles !: 139 REAL(wp) :: residual_norm !: 140 141 REAL(wp), DIMENSION(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1) :: r !: 142 143 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: p3 !: 124 144 125 145 … … 220 240 !------------------------------------------------------------------------------! 221 241 222 USE arrays_3d 223 USE control_parameters 224 USE grid_variables 225 USE indices 226 USE pegrid 242 USE arrays_3d, & 243 ONLY: f1_mg, f2_mg, f3_mg 244 245 USE control_parameters, & 246 ONLY: bc_lr_cyc, bc_ns_cyc, grid_level, ibc_p_b, ibc_p_t, inflow_l, & 247 inflow_n, inflow_r, inflow_s, outflow_l, outflow_n, outflow_r, & 248 outflow_s 249 250 USE grid_variables, & 251 ONLY: ddx2_mg, ddy2_mg 252 253 USE indices, & 254 ONLY: flags, wall_flags_1, wall_flags_2, wall_flags_3, wall_flags_4, & 255 wall_flags_5, wall_flags_6, wall_flags_7, wall_flags_8, & 256 wall_flags_9, wall_flags_10, nxl_mg, nxr_mg, nys_mg, nyn_mg, & 257 nzb, nzt_mg 258 259 USE kinds 227 260 228 261 IMPLICIT NONE 229 262 230 INTEGER :: i, j, k, l 231 232 REAL, DIMENSION(nzb:nzt_mg(grid_level)+1, & 263 INTEGER(iwp) :: i 264 INTEGER(iwp) :: j 265 INTEGER(iwp) :: k 266 INTEGER(iwp) :: l 267 268 REAL(wp), DIMENSION(nzb:nzt_mg(grid_level)+1, & 233 269 nys_mg(grid_level)-1:nyn_mg(grid_level)+1, & 234 nxl_mg(grid_level)-1:nxr_mg(grid_level)+1) :: f_mg, p_mg, r 270 nxl_mg(grid_level)-1:nxr_mg(grid_level)+1) :: f_mg !: 271 REAL(wp), DIMENSION(nzb:nzt_mg(grid_level)+1, & 272 nys_mg(grid_level)-1:nyn_mg(grid_level)+1, & 273 nxl_mg(grid_level)-1:nxr_mg(grid_level)+1) :: p_mg !: 274 REAL(wp), DIMENSION(nzb:nzt_mg(grid_level)+1, & 275 nys_mg(grid_level)-1:nyn_mg(grid_level)+1, & 276 nxl_mg(grid_level)-1:nxr_mg(grid_level)+1) :: r !: 235 277 236 278 ! … … 336 378 !------------------------------------------------------------------------------! 337 379 338 USE control_parameters 339 USE grid_variables 340 USE indices 341 USE pegrid 380 USE control_parameters, & 381 ONLY: bc_lr_cyc, bc_ns_cyc, grid_level, ibc_p_b, ibc_p_t, inflow_l, & 382 inflow_n, inflow_r, inflow_s, outflow_l, outflow_n, outflow_r, & 383 outflow_s 384 385 USE indices, & 386 ONLY: flags, wall_flags_1, wall_flags_2, wall_flags_3, wall_flags_4, & 387 wall_flags_5, wall_flags_6, wall_flags_7, wall_flags_8, & 388 wall_flags_9, wall_flags_10, nxl_mg, nxr_mg, nys_mg, nyn_mg, & 389 nzb, nzt_mg 390 391 USE kinds 342 392 343 393 IMPLICIT NONE 344 394 345 INTEGER :: i, ic, j, jc, k, kc, l 346 347 REAL :: rkjim, rkjip, rkjmi, rkjmim, rkjmip, rkjpi, rkjpim, rkjpip, & 348 rkmji, rkmjim, rkmjip, rkmjmi, rkmjmim, rkmjmip, rkmjpi, rkmjpim, & 349 rkmjpip 350 351 REAL, DIMENSION(nzb:nzt_mg(grid_level)+1, & 352 nys_mg(grid_level)-1:nyn_mg(grid_level)+1, & 353 nxl_mg(grid_level)-1:nxr_mg(grid_level)+1) :: f_mg 354 355 REAL, DIMENSION(nzb:nzt_mg(grid_level+1)+1, & 356 nys_mg(grid_level+1)-1:nyn_mg(grid_level+1)+1, & 357 nxl_mg(grid_level+1)-1:nxr_mg(grid_level+1)+1) :: r 395 INTEGER(iwp) :: i !: 396 INTEGER(iwp) :: ic !: 397 INTEGER(iwp) :: j !: 398 INTEGER(iwp) :: jc !: 399 INTEGER(iwp) :: k !: 400 INTEGER(iwp) :: kc !: 401 INTEGER(iwp) :: l !: 402 403 REAL(wp) :: rkjim !: 404 REAL(wp) :: rkjip !: 405 REAL(wp) :: rkjmi !: 406 REAL(wp) :: rkjmim !: 407 REAL(wp) :: rkjmip !: 408 REAL(wp) :: rkjpi !: 409 REAL(wp) :: rkjpim !: 410 REAL(wp) :: rkjpip !: 411 REAL(wp) :: rkmji !: 412 REAL(wp) :: rkmjim !: 413 REAL(wp) :: rkmjip !: 414 REAL(wp) :: rkmjmi !: 415 REAL(wp) :: rkmjmim !: 416 REAL(wp) :: rkmjmip !: 417 REAL(wp) :: rkmjpi !: 418 REAL(wp) :: rkmjpim !: 419 REAL(wp) :: rkmjpip !: 420 421 REAL(wp), DIMENSION(nzb:nzt_mg(grid_level)+1, & 422 nys_mg(grid_level)-1:nyn_mg(grid_level)+1, & 423 nxl_mg(grid_level)-1:nxr_mg(grid_level)+1) :: f_mg !: 424 425 REAL(wp), DIMENSION(nzb:nzt_mg(grid_level+1)+1, & 426 nys_mg(grid_level+1)-1:nyn_mg(grid_level+1)+1, & 427 nxl_mg(grid_level+1)-1:nxr_mg(grid_level+1)+1) :: r !: 358 428 359 429 ! … … 516 586 !------------------------------------------------------------------------------! 517 587 518 USE control_parameters 519 USE pegrid 520 USE indices 588 USE control_parameters, & 589 ONLY: bc_lr_cyc, bc_ns_cyc, grid_level, ibc_p_b, ibc_p_t, inflow_l, & 590 inflow_n, inflow_r, inflow_s, outflow_l, outflow_n, outflow_r, & 591 outflow_s 592 593 USE indices, & 594 ONLY: nxl_mg, nxr_mg, nys_mg, nyn_mg, nzb, nzt_mg 595 596 USE kinds 521 597 522 598 IMPLICIT NONE 523 599 524 INTEGER :: i, j, k, l 525 526 REAL, DIMENSION(nzb:nzt_mg(grid_level-1)+1, & 527 nys_mg(grid_level-1)-1:nyn_mg(grid_level-1)+1, & 528 nxl_mg(grid_level-1)-1:nxr_mg(grid_level-1)+1 ) :: p 529 530 REAL, DIMENSION(nzb:nzt_mg(grid_level)+1, & 531 nys_mg(grid_level)-1:nyn_mg(grid_level)+1, & 532 nxl_mg(grid_level)-1:nxr_mg(grid_level)+1) :: temp 600 INTEGER(iwp) :: i !: 601 INTEGER(iwp) :: j !: 602 INTEGER(iwp) :: k !: 603 INTEGER(iwp) :: l !: 604 605 REAL(wp), DIMENSION(nzb:nzt_mg(grid_level-1)+1, & 606 nys_mg(grid_level-1)-1:nyn_mg(grid_level-1)+1, & 607 nxl_mg(grid_level-1)-1:nxr_mg(grid_level-1)+1 ) :: p !: 608 609 REAL(wp), DIMENSION(nzb:nzt_mg(grid_level)+1, & 610 nys_mg(grid_level)-1:nyn_mg(grid_level)+1, & 611 nxl_mg(grid_level)-1:nxr_mg(grid_level)+1) :: temp !: 533 612 534 613 … … 613 692 !------------------------------------------------------------------------------! 614 693 615 USE arrays_3d 616 USE control_parameters 617 USE cpulog 618 USE grid_variables 619 USE indices 620 USE pegrid 694 USE arrays_3d, & 695 ONLY: f1_mg, f2_mg, f3_mg 696 697 USE control_parameters, & 698 ONLY: bc_lr_cyc, bc_ns_cyc, grid_level, ibc_p_b, ibc_p_t, inflow_l, & 699 inflow_n, inflow_r, inflow_s, ngsrb, outflow_l, outflow_n, & 700 outflow_r, outflow_s 701 702 USE cpulog, & 703 ONLY: cpu_log, log_point_s 704 705 USE grid_variables, & 706 ONLY: ddx2_mg, ddy2_mg 707 708 USE indices, & 709 ONLY: flags, wall_flags_1, wall_flags_2, wall_flags_3, wall_flags_4, & 710 wall_flags_5, wall_flags_6, wall_flags_7, wall_flags_8, & 711 wall_flags_9, wall_flags_10, nxl_mg, nxr_mg, nys_mg, nyn_mg, & 712 nzb, nzt_mg 713 714 USE kinds 621 715 622 716 IMPLICIT NONE 623 717 624 INTEGER :: colour, i, ic, j, jc, jj, k, l, n 625 626 LOGICAL :: unroll 627 628 REAL :: wall_left, wall_north, wall_right, wall_south, wall_total, wall_top 629 630 REAL, DIMENSION(nzb:nzt_mg(grid_level)+1, & 631 nys_mg(grid_level)-1:nyn_mg(grid_level)+1, & 632 nxl_mg(grid_level)-1:nxr_mg(grid_level)+1) :: f_mg, p_mg 718 INTEGER(iwp) :: color !: 719 INTEGER(iwp) :: i !: 720 INTEGER(iwp) :: ic !: 721 INTEGER(iwp) :: j !: 722 INTEGER(iwp) :: jc !: 723 INTEGER(iwp) :: jj !: 724 INTEGER(iwp) :: k !: 725 INTEGER(iwp) :: l !: 726 INTEGER(iwp) :: n !: 727 728 LOGICAL :: unroll !: 729 730 REAL(wp) :: wall_left !: 731 REAL(wp) :: wall_north !: 732 REAL(wp) :: wall_right !: 733 REAL(wp) :: wall_south !: 734 REAL(wp) :: wall_total !: 735 REAL(wp) :: wall_top !: 736 737 REAL(wp), DIMENSION(nzb:nzt_mg(grid_level)+1, & 738 nys_mg(grid_level)-1:nyn_mg(grid_level)+1, & 739 nxl_mg(grid_level)-1:nxr_mg(grid_level)+1) :: f_mg !: 740 REAL(wp), DIMENSION(nzb:nzt_mg(grid_level)+1, & 741 nys_mg(grid_level)-1:nyn_mg(grid_level)+1, & 742 nxl_mg(grid_level)-1:nxr_mg(grid_level)+1) :: p_mg !: 633 743 634 744 l = grid_level … … 664 774 DO n = 1, ngsrb 665 775 666 DO colo ur = 1, 2776 DO color = 1, 2 667 777 668 778 IF ( .NOT. unroll ) THEN … … 673 783 !-- Without unrolling of loops, no cache optimization 674 784 DO i = nxl_mg(l), nxr_mg(l), 2 675 DO j = nys_mg(l) + 2 - colo ur, nyn_mg(l), 2785 DO j = nys_mg(l) + 2 - color, nyn_mg(l), 2 676 786 DO k = nzb+1, nzt_mg(l), 2 677 787 ! p_mg(k,j,i) = 1.0 / f1_mg(k,l) * ( & … … 703 813 704 814 DO i = nxl_mg(l)+1, nxr_mg(l), 2 705 DO j = nys_mg(l) + (colo ur-1), nyn_mg(l), 2815 DO j = nys_mg(l) + (color-1), nyn_mg(l), 2 706 816 DO k = nzb+1, nzt_mg(l), 2 707 817 p_mg(k,j,i) = 1.0 / f1_mg(k,l) * ( & … … 726 836 727 837 DO i = nxl_mg(l), nxr_mg(l), 2 728 DO j = nys_mg(l) + (colo ur-1), nyn_mg(l), 2838 DO j = nys_mg(l) + (color-1), nyn_mg(l), 2 729 839 DO k = nzb+2, nzt_mg(l), 2 730 840 p_mg(k,j,i) = 1.0 / f1_mg(k,l) * ( & … … 749 859 750 860 DO i = nxl_mg(l)+1, nxr_mg(l), 2 751 DO j = nys_mg(l) + 2 - colo ur, nyn_mg(l), 2861 DO j = nys_mg(l) + 2 - color, nyn_mg(l), 2 752 862 DO k = nzb+2, nzt_mg(l), 2 753 863 p_mg(k,j,i) = 1.0 / f1_mg(k,l) * ( & … … 780 890 DO jc = nys_mg(l), nyn_mg(l), 4 781 891 i = ic 782 jj = jc+2-colo ur892 jj = jc+2-color 783 893 DO k = nzb+1, nzt_mg(l), 2 784 894 j = jj … … 819 929 820 930 i = ic+1 821 jj = jc+colo ur-1931 jj = jc+color-1 822 932 DO k = nzb+1, nzt_mg(l), 2 823 933 j =jj … … 858 968 859 969 i = ic 860 jj = jc+colo ur-1970 jj = jc+color-1 861 971 DO k = nzb+2, nzt_mg(l), 2 862 972 j =jj … … 897 1007 898 1008 i = ic+1 899 jj = jc+2-colo ur1009 jj = jc+2-color 900 1010 DO k = nzb+2, nzt_mg(l), 2 901 1011 j =jj … … 1027 1137 SUBROUTINE mg_gather( f2, f2_sub ) 1028 1138 1029 USE control_parameters 1030 USE cpulog 1031 USE indices 1139 USE control_parameters, & 1140 ONLY: grid_level 1141 1142 USE cpulog, & 1143 ONLY: cpu_log, log_point_s 1144 1145 USE indices, & 1146 ONLY: mg_loc_ind, nxl_mg, nxr_mg, nys_mg, nyn_mg, nzb, nzt_mg 1147 1148 USE kinds 1149 1032 1150 USE pegrid 1033 1151 1034 1152 IMPLICIT NONE 1035 1153 1036 INTEGER :: i, il, ir, j, jn, js, k, nwords 1037 1038 REAL, DIMENSION(nzb:nzt_mg(grid_level)+1, & 1039 nys_mg(grid_level)-1:nyn_mg(grid_level)+1, & 1040 nxl_mg(grid_level)-1:nxr_mg(grid_level)+1) :: f2, f2_l 1041 1042 REAL, DIMENSION(nzb:mg_loc_ind(5,myid)+1, & 1043 mg_loc_ind(3,myid)-1:mg_loc_ind(4,myid)+1, & 1044 mg_loc_ind(1,myid)-1:mg_loc_ind(2,myid)+1) :: f2_sub 1154 INTEGER(iwp) :: i !: 1155 INTEGER(iwp) :: il !: 1156 INTEGER(iwp) :: ir !: 1157 INTEGER(iwp) :: j !: 1158 INTEGER(iwp) :: jn !: 1159 INTEGER(iwp) :: js !: 1160 INTEGER(iwp) :: k !: 1161 INTEGER(iwp) :: nwords !: 1162 1163 REAL(wp), DIMENSION(nzb:nzt_mg(grid_level)+1, & 1164 nys_mg(grid_level)-1:nyn_mg(grid_level)+1, & 1165 nxl_mg(grid_level)-1:nxr_mg(grid_level)+1) :: f2 !: 1166 REAL(wp), DIMENSION(nzb:nzt_mg(grid_level)+1, & 1167 nys_mg(grid_level)-1:nyn_mg(grid_level)+1, & 1168 nxl_mg(grid_level)-1:nxr_mg(grid_level)+1) :: f2_l !: 1169 1170 REAL(wp), DIMENSION(nzb:mg_loc_ind(5,myid)+1, & 1171 mg_loc_ind(3,myid)-1:mg_loc_ind(4,myid)+1, & 1172 mg_loc_ind(1,myid)-1:mg_loc_ind(2,myid)+1) :: f2_sub !: 1045 1173 1046 1174 … … 1091 1219 !-- non-blocking communication 1092 1220 1093 USE control_parameters 1094 USE cpulog 1095 USE indices 1221 USE control_parameters, & 1222 ONLY: grid_level 1223 1224 USE cpulog, & 1225 ONLY: cpu_log, log_point_s 1226 1227 USE indices, & 1228 ONLY: mg_loc_ind, nxl_mg, nxr_mg, nys_mg, nyn_mg, nzb, nzt_mg 1229 1230 USE kinds 1231 1096 1232 USE pegrid 1097 1233 1098 1234 IMPLICIT NONE 1099 1235 1100 INTEGER :: nwords1101 1102 REAL , DIMENSION(nzb:nzt_mg(grid_level-1)+1, &1103 nys_mg(grid_level-1)-1:nyn_mg(grid_level-1)+1, &1104 nxl_mg(grid_level-1)-1:nxr_mg(grid_level-1)+1) :: p21105 1106 REAL , DIMENSION(nzb:mg_loc_ind(5,myid)+1, &1107 mg_loc_ind(3,myid)-1:mg_loc_ind(4,myid)+1, &1108 mg_loc_ind(1,myid)-1:mg_loc_ind(2,myid)+1) :: p2_sub1236 INTEGER(iwp) :: nwords !: 1237 1238 REAL(wp), DIMENSION(nzb:nzt_mg(grid_level-1)+1, & 1239 nys_mg(grid_level-1)-1:nyn_mg(grid_level-1)+1, & 1240 nxl_mg(grid_level-1)-1:nxr_mg(grid_level-1)+1) :: p2 !: 1241 1242 REAL(wp), DIMENSION(nzb:mg_loc_ind(5,myid)+1, & 1243 mg_loc_ind(3,myid)-1:mg_loc_ind(4,myid)+1, & 1244 mg_loc_ind(1,myid)-1:mg_loc_ind(2,myid)+1) :: p2_sub !: 1109 1245 1110 1246 ! … … 1138 1274 !------------------------------------------------------------------------------! 1139 1275 1140 USE arrays_3d 1141 USE control_parameters 1142 USE grid_variables 1143 USE indices 1276 USE control_parameters, & 1277 ONLY: bc_lr_dirrad, bc_lr_raddir, bc_ns_dirrad, bc_ns_raddir, & 1278 gamma_mg, grid_level, grid_level_count, ibc_p_b, ibc_p_t, & 1279 inflow_l, inflow_n, inflow_r, inflow_s, maximum_grid_level, & 1280 mg_switch_to_pe0_level, mg_switch_to_pe0, ngsrb, outflow_l, & 1281 outflow_n, outflow_r, outflow_s 1282 1283 1284 USE indices, & 1285 ONLY: mg_loc_ind, nxl, nxl_mg, nxr, nxr_mg, nys, nys_mg, nyn, & 1286 nyn_mg, nzb, nzt, nzt_mg 1287 1288 USE kinds 1289 1144 1290 USE pegrid 1145 1291 1146 1292 IMPLICIT NONE 1147 1293 1148 INTEGER :: i, j, k, nxl_mg_save, nxr_mg_save, nyn_mg_save, nys_mg_save, & 1149 nzt_mg_save 1150 1151 REAL, DIMENSION(nzb:nzt_mg(grid_level)+1, & 1152 nys_mg(grid_level)-1:nyn_mg(grid_level)+1, & 1153 nxl_mg(grid_level)-1:nxr_mg(grid_level)+1) :: f_mg, p_mg, p3, r 1154 1155 REAL, DIMENSION(nzb:nzt_mg(grid_level-1)+1, & 1156 nys_mg(grid_level-1)-1:nyn_mg(grid_level-1)+1, & 1157 nxl_mg(grid_level-1)-1:nxr_mg(grid_level-1)+1) :: f2, p2 1158 1159 REAL, DIMENSION(:,:,:), ALLOCATABLE :: f2_sub, p2_sub 1294 INTEGER(iwp) :: i !: 1295 INTEGER(iwp) :: j !: 1296 INTEGER(iwp) :: k !: 1297 INTEGER(iwp) :: nxl_mg_save !: 1298 INTEGER(iwp) :: nxr_mg_save !: 1299 INTEGER(iwp) :: nyn_mg_save !: 1300 INTEGER(iwp) :: nys_mg_save !: 1301 INTEGER(iwp) :: nzt_mg_save !: 1302 1303 REAL(wp), DIMENSION(nzb:nzt_mg(grid_level)+1, & 1304 nys_mg(grid_level)-1:nyn_mg(grid_level)+1, & 1305 nxl_mg(grid_level)-1:nxr_mg(grid_level)+1) :: f_mg !: 1306 REAL(wp), DIMENSION(nzb:nzt_mg(grid_level)+1, & 1307 nys_mg(grid_level)-1:nyn_mg(grid_level)+1, & 1308 nxl_mg(grid_level)-1:nxr_mg(grid_level)+1) :: p_mg !: 1309 REAL(wp), DIMENSION(nzb:nzt_mg(grid_level)+1, & 1310 nys_mg(grid_level)-1:nyn_mg(grid_level)+1, & 1311 nxl_mg(grid_level)-1:nxr_mg(grid_level)+1) :: p3 !: 1312 REAL(wp), DIMENSION(nzb:nzt_mg(grid_level)+1, & 1313 nys_mg(grid_level)-1:nyn_mg(grid_level)+1, & 1314 nxl_mg(grid_level)-1:nxr_mg(grid_level)+1) :: r !: 1315 1316 REAL(wp), DIMENSION(nzb:nzt_mg(grid_level-1)+1, & 1317 nys_mg(grid_level-1)-1:nyn_mg(grid_level-1)+1, & 1318 nxl_mg(grid_level-1)-1:nxr_mg(grid_level-1)+1) :: f2 !: 1319 REAL(wp), DIMENSION(nzb:nzt_mg(grid_level-1)+1, & 1320 nys_mg(grid_level-1)-1:nyn_mg(grid_level-1)+1, & 1321 nxl_mg(grid_level-1)-1:nxr_mg(grid_level-1)+1) :: p2 !: 1322 1323 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: f2_sub !: 1324 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: p2_sub !: 1160 1325 1161 1326 !
Note: See TracChangeset
for help on using the changeset viewer.