Changeset 4346 for palm/trunk/SOURCE/advec_ws.f90
- Timestamp:
- Dec 18, 2019 11:55:56 AM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/advec_ws.f90
r4340 r4346 25 25 ! ----------------- 26 26 ! $Id$ 27 ! Introduction of wall_flags_total_0, which currently sets bits based on static 28 ! topography information used in wall_flags_static_0 29 ! 30 ! 4340 2019-12-16 08:17:03Z Giersch 27 31 ! Topography closed channel flow with symmetric boundaries implemented 28 32 ! … … 196 200 nzb_max, & 197 201 nzt, & 198 wall_flags_ static_0202 wall_flags_total_0 199 203 200 204 USE grid_variables, & … … 418 422 !-- u component - x-direction 419 423 !-- WS1 (0), WS3 (1), WS5 (2) 420 IF ( .NOT. BTEST(wall_flags_ static_0(k,j,i+1),1) .OR.&424 IF ( .NOT. BTEST(wall_flags_total_0(k,j,i+1),1) .OR. & 421 425 ( ( bc_dirichlet_l .OR. bc_radiation_l ) & 422 426 .AND. i <= nxlu ) .OR. & … … 425 429 THEN 426 430 advc_flags_m(k,j,i) = IBSET( advc_flags_m(k,j,i), 0 ) 427 ELSEIF ( ( .NOT. BTEST(wall_flags_ static_0(k,j,i+2),1) .AND.&428 BTEST(wall_flags_ static_0(k,j,i+1),1) .OR.&429 .NOT. BTEST(wall_flags_ static_0(k,j,i-1),1) )&431 ELSEIF ( ( .NOT. BTEST(wall_flags_total_0(k,j,i+2),1) .AND. & 432 BTEST(wall_flags_total_0(k,j,i+1),1) .OR. & 433 .NOT. BTEST(wall_flags_total_0(k,j,i-1),1) ) & 430 434 .OR. & 431 435 ( ( bc_dirichlet_r .OR. bc_radiation_r ) & … … 438 442 !-- Clear flag for WS1 439 443 advc_flags_m(k,j,i) = IBCLR( advc_flags_m(k,j,i), 0 ) 440 ELSEIF ( BTEST(wall_flags_ static_0(k,j,i+1),1) .AND. &441 BTEST(wall_flags_ static_0(k,j,i+2),1) .AND. &442 BTEST(wall_flags_ static_0(k,j,i-1),1) ) &444 ELSEIF ( BTEST(wall_flags_total_0(k,j,i+1),1) .AND. & 445 BTEST(wall_flags_total_0(k,j,i+2),1) .AND. & 446 BTEST(wall_flags_total_0(k,j,i-1),1) ) & 443 447 THEN 444 448 advc_flags_m(k,j,i) = IBSET( advc_flags_m(k,j,i), 2 ) … … 449 453 ! 450 454 !-- u component - y-direction 451 !-- WS1 (3), WS3 (4), WS5 (5) 452 IF ( .NOT. BTEST(wall_flags_ static_0(k,j+1,i),1) .OR.&455 !-- WS1 (3), WS3 (4), WS5 (5) 456 IF ( .NOT. BTEST(wall_flags_total_0(k,j+1,i),1) .OR. & 453 457 ( ( bc_dirichlet_s .OR. bc_radiation_s ) & 454 458 .AND. j == nys ) .OR. & … … 457 461 THEN 458 462 advc_flags_m(k,j,i) = IBSET( advc_flags_m(k,j,i), 3 ) 459 ELSEIF ( ( .NOT. BTEST(wall_flags_ static_0(k,j+2,i),1) .AND.&460 BTEST(wall_flags_ static_0(k,j+1,i),1) .OR.&461 .NOT. BTEST(wall_flags_ static_0(k,j-1,i),1) )&463 ELSEIF ( ( .NOT. BTEST(wall_flags_total_0(k,j+2,i),1) .AND. & 464 BTEST(wall_flags_total_0(k,j+1,i),1) .OR. & 465 .NOT. BTEST(wall_flags_total_0(k,j-1,i),1) ) & 462 466 .OR. & 463 467 ( ( bc_dirichlet_s .OR. bc_radiation_s ) & … … 470 474 !-- Clear flag for WS1 471 475 advc_flags_m(k,j,i) = IBCLR( advc_flags_m(k,j,i), 3 ) 472 ELSEIF ( BTEST(wall_flags_ static_0(k,j+1,i),1) .AND. &473 BTEST(wall_flags_ static_0(k,j+2,i),1) .AND. &474 BTEST(wall_flags_ static_0(k,j-1,i),1) ) &476 ELSEIF ( BTEST(wall_flags_total_0(k,j+1,i),1) .AND. & 477 BTEST(wall_flags_total_0(k,j+2,i),1) .AND. & 478 BTEST(wall_flags_total_0(k,j-1,i),1) ) & 475 479 THEN 476 480 advc_flags_m(k,j,i) = IBSET( advc_flags_m(k,j,i), 5 ) … … 500 504 501 505 flag_set = .FALSE. 502 IF ( ( .NOT. BTEST(wall_flags_ static_0(k-1,j,i),1) .AND. &503 BTEST(wall_flags_ static_0(k,j,i),1) .AND. &504 BTEST(wall_flags_ static_0(k+1,j,i),1) ) .OR. &505 ( .NOT. BTEST(wall_flags_ static_0(k_pp,j,i),1) .AND. &506 BTEST(wall_flags_ static_0(k+1,j,i),1) .AND. &507 BTEST(wall_flags_ static_0(k,j,i),1) ) .OR. &508 ( k == nzt .AND. symmetry_flag == 0 ) ) 506 IF ( ( .NOT. BTEST(wall_flags_total_0(k-1,j,i),1) .AND. & 507 BTEST(wall_flags_total_0(k,j,i),1) .AND. & 508 BTEST(wall_flags_total_0(k+1,j,i),1) ) .OR. & 509 ( .NOT. BTEST(wall_flags_total_0(k_pp,j,i),1) .AND. & 510 BTEST(wall_flags_total_0(k+1,j,i),1) .AND. & 511 BTEST(wall_flags_total_0(k,j,i),1) ) .OR. & 512 ( k == nzt .AND. symmetry_flag == 0 ) ) & 509 513 THEN 510 514 advc_flags_m(k,j,i) = IBSET( advc_flags_m(k,j,i), 6 ) 511 515 flag_set = .TRUE. 512 ELSEIF ( ( .NOT. BTEST(wall_flags_ static_0(k_mm,j,i),1) .OR. &513 .NOT. BTEST(wall_flags_ static_0(k_ppp,j,i),1) ) .AND. &514 BTEST(wall_flags_ static_0(k-1,j,i),1) .AND. &515 BTEST(wall_flags_ static_0(k,j,i),1) .AND. &516 BTEST(wall_flags_ static_0(k+1,j,i),1) .AND. &517 BTEST(wall_flags_ static_0(k_pp,j,i),1) .AND. &518 .NOT. flag_set .OR. 519 ( k == nzt - 1 .AND. symmetry_flag == 0 ) ) 516 ELSEIF ( ( .NOT. BTEST(wall_flags_total_0(k_mm,j,i),1) .OR. & 517 .NOT. BTEST(wall_flags_total_0(k_ppp,j,i),1) ) .AND. & 518 BTEST(wall_flags_total_0(k-1,j,i),1) .AND. & 519 BTEST(wall_flags_total_0(k,j,i),1) .AND. & 520 BTEST(wall_flags_total_0(k+1,j,i),1) .AND. & 521 BTEST(wall_flags_total_0(k_pp,j,i),1) .AND. & 522 .NOT. flag_set .OR. & 523 ( k == nzt - 1 .AND. symmetry_flag == 0 ) ) & 520 524 THEN 521 525 advc_flags_m(k,j,i) = IBSET( advc_flags_m(k,j,i), 7 ) 522 526 flag_set = .TRUE. 523 ELSEIF ( BTEST(wall_flags_ static_0(k_mm,j,i),1) .AND. &524 BTEST(wall_flags_ static_0(k-1,j,i),1) .AND. &525 BTEST(wall_flags_ static_0(k,j,i),1) .AND. &526 BTEST(wall_flags_ static_0(k+1,j,i),1) .AND. &527 BTEST(wall_flags_ static_0(k_pp,j,i),1) .AND. &528 BTEST(wall_flags_ static_0(k_ppp,j,i),1) .AND. &529 .NOT. flag_set ) 527 ELSEIF ( BTEST(wall_flags_total_0(k_mm,j,i),1) .AND. & 528 BTEST(wall_flags_total_0(k-1,j,i),1) .AND. & 529 BTEST(wall_flags_total_0(k,j,i),1) .AND. & 530 BTEST(wall_flags_total_0(k+1,j,i),1) .AND. & 531 BTEST(wall_flags_total_0(k_pp,j,i),1) .AND. & 532 BTEST(wall_flags_total_0(k_ppp,j,i),1) .AND. & 533 .NOT. flag_set ) & 530 534 THEN 531 535 advc_flags_m(k,j,i) = IBSET( advc_flags_m(k,j,i), 8 ) … … 549 553 !-- v component - x-direction 550 554 !-- WS1 (9), WS3 (10), WS5 (11) 551 IF ( .NOT. BTEST(wall_flags_ static_0(k,j,i+1),2) .OR.&555 IF ( .NOT. BTEST(wall_flags_total_0(k,j,i+1),2) .OR. & 552 556 ( ( bc_dirichlet_l .OR. bc_radiation_l ) & 553 557 .AND. i == nxl ) .OR. & … … 558 562 ! 559 563 !-- WS3 560 ELSEIF ( ( .NOT. BTEST(wall_flags_ static_0(k,j,i+2),2) .AND.&561 BTEST(wall_flags_ static_0(k,j,i+1),2) ) .OR.&562 .NOT. BTEST(wall_flags_ static_0(k,j,i-1),2)&564 ELSEIF ( ( .NOT. BTEST(wall_flags_total_0(k,j,i+2),2) .AND. & 565 BTEST(wall_flags_total_0(k,j,i+1),2) ) .OR. & 566 .NOT. BTEST(wall_flags_total_0(k,j,i-1),2) & 563 567 .OR. & 564 568 ( ( bc_dirichlet_r .OR. bc_radiation_r ) & … … 571 575 !-- Clear flag for WS1 572 576 advc_flags_m(k,j,i) = IBCLR( advc_flags_m(k,j,i), 9 ) 573 ELSEIF ( BTEST(wall_flags_ static_0(k,j,i+1),2) .AND.&574 BTEST(wall_flags_ static_0(k,j,i+2),2) .AND.&575 BTEST(wall_flags_ static_0(k,j,i-1),2) )&577 ELSEIF ( BTEST(wall_flags_total_0(k,j,i+1),2) .AND. & 578 BTEST(wall_flags_total_0(k,j,i+2),2) .AND. & 579 BTEST(wall_flags_total_0(k,j,i-1),2) ) & 576 580 THEN 577 581 advc_flags_m(k,j,i) = IBSET( advc_flags_m(k,j,i), 11 ) … … 583 587 !-- v component - y-direction 584 588 !-- WS1 (12), WS3 (13), WS5 (14) 585 IF ( .NOT. BTEST(wall_flags_ static_0(k,j+1,i),2) .OR.&589 IF ( .NOT. BTEST(wall_flags_total_0(k,j+1,i),2) .OR. & 586 590 ( ( bc_dirichlet_s .OR. bc_radiation_s ) & 587 591 .AND. j <= nysv ) .OR. & … … 590 594 THEN 591 595 advc_flags_m(k,j,i) = IBSET( advc_flags_m(k,j,i), 12 ) 592 ELSEIF ( ( .NOT. BTEST(wall_flags_ static_0(k,j+2,i),2) .AND.&593 BTEST(wall_flags_ static_0(k,j+1,i),2) .OR.&594 .NOT. BTEST(wall_flags_ static_0(k,j-1,i),2) )&596 ELSEIF ( ( .NOT. BTEST(wall_flags_total_0(k,j+2,i),2) .AND. & 597 BTEST(wall_flags_total_0(k,j+1,i),2) .OR. & 598 .NOT. BTEST(wall_flags_total_0(k,j-1,i),2) ) & 595 599 .OR. & 596 600 ( ( bc_dirichlet_s .OR. bc_radiation_s ) & … … 603 607 !-- Clear flag for WS1 604 608 advc_flags_m(k,j,i) = IBCLR( advc_flags_m(k,j,i), 12 ) 605 ELSEIF ( BTEST(wall_flags_ static_0(k,j+1,i),2) .AND.&606 BTEST(wall_flags_ static_0(k,j+2,i),2) .AND.&607 BTEST(wall_flags_ static_0(k,j-1,i),2) )&608 THEN 609 ELSEIF ( BTEST(wall_flags_total_0(k,j+1,i),2) .AND. & 610 BTEST(wall_flags_total_0(k,j+2,i),2) .AND. & 611 BTEST(wall_flags_total_0(k,j-1,i),2) ) & 612 THEN 609 613 advc_flags_m(k,j,i) = IBSET( advc_flags_m(k,j,i), 14 ) 610 614 ! … … 633 637 634 638 flag_set = .FALSE. 635 IF ( ( .NOT. BTEST(wall_flags_ static_0(k-1,j,i),2) .AND.&636 BTEST(wall_flags_ static_0(k,j,i),2) .AND.&637 BTEST(wall_flags_ static_0(k+1,j,i),2) ) .OR.&638 ( .NOT. BTEST(wall_flags_ static_0(k_pp,j,i),2) .AND.&639 BTEST(wall_flags_ static_0(k+1,j,i),2) .AND.&640 BTEST(wall_flags_ static_0(k,j,i),2) ) .OR.&641 ( k == nzt .AND. symmetry_flag == 0 ) ) 639 IF ( ( .NOT. BTEST(wall_flags_total_0(k-1,j,i),2) .AND. & 640 BTEST(wall_flags_total_0(k,j,i),2) .AND. & 641 BTEST(wall_flags_total_0(k+1,j,i),2) ) .OR. & 642 ( .NOT. BTEST(wall_flags_total_0(k_pp,j,i),2) .AND. & 643 BTEST(wall_flags_total_0(k+1,j,i),2) .AND. & 644 BTEST(wall_flags_total_0(k,j,i),2) ) .OR. & 645 ( k == nzt .AND. symmetry_flag == 0 ) ) & 642 646 THEN 643 647 advc_flags_m(k,j,i) = IBSET( advc_flags_m(k,j,i), 15 ) 644 648 flag_set = .TRUE. 645 ELSEIF ( ( .NOT. BTEST(wall_flags_ static_0(k_mm,j,i),2) .OR.&646 .NOT. BTEST(wall_flags_ static_0(k_ppp,j,i),2) ) .AND.&647 BTEST(wall_flags_ static_0(k-1,j,i),2) .AND.&648 BTEST(wall_flags_ static_0(k,j,i),2) .AND.&649 BTEST(wall_flags_ static_0(k+1,j,i),2) .AND.&650 BTEST(wall_flags_ static_0(k_pp,j,i),2) .AND.&651 .NOT. flag_set .OR. 652 ( k == nzt - 1 .AND. symmetry_flag == 0 ) ) 649 ELSEIF ( ( .NOT. BTEST(wall_flags_total_0(k_mm,j,i),2) .OR. & 650 .NOT. BTEST(wall_flags_total_0(k_ppp,j,i),2) ) .AND. & 651 BTEST(wall_flags_total_0(k-1,j,i),2) .AND. & 652 BTEST(wall_flags_total_0(k,j,i),2) .AND. & 653 BTEST(wall_flags_total_0(k+1,j,i),2) .AND. & 654 BTEST(wall_flags_total_0(k_pp,j,i),2) .AND. & 655 .NOT. flag_set .OR. & 656 ( k == nzt - 1 .AND. symmetry_flag == 0 ) ) & 653 657 THEN 654 658 advc_flags_m(k,j,i) = IBSET( advc_flags_m(k,j,i), 16 ) 655 659 flag_set = .TRUE. 656 ELSEIF ( BTEST(wall_flags_ static_0(k_mm,j,i),2) .AND.&657 BTEST(wall_flags_ static_0(k-1,j,i),2) .AND.&658 BTEST(wall_flags_ static_0(k,j,i),2) .AND.&659 BTEST(wall_flags_ static_0(k+1,j,i),2) .AND.&660 BTEST(wall_flags_ static_0(k_pp,j,i),2) .AND.&661 BTEST(wall_flags_ static_0(k_ppp,j,i),2) .AND.&662 .NOT. flag_set ) 660 ELSEIF ( BTEST(wall_flags_total_0(k_mm,j,i),2) .AND. & 661 BTEST(wall_flags_total_0(k-1,j,i),2) .AND. & 662 BTEST(wall_flags_total_0(k,j,i),2) .AND. & 663 BTEST(wall_flags_total_0(k+1,j,i),2) .AND. & 664 BTEST(wall_flags_total_0(k_pp,j,i),2) .AND. & 665 BTEST(wall_flags_total_0(k_ppp,j,i),2) .AND. & 666 .NOT. flag_set ) & 663 667 THEN 664 668 advc_flags_m(k,j,i) = IBSET( advc_flags_m(k,j,i), 17 ) … … 682 686 !-- w component - x-direction 683 687 !-- WS1 (18), WS3 (19), WS5 (20) 684 IF ( .NOT. BTEST(wall_flags_ static_0(k,j,i+1),3) .OR.&688 IF ( .NOT. BTEST(wall_flags_total_0(k,j,i+1),3) .OR. & 685 689 ( ( bc_dirichlet_l .OR. bc_radiation_l ) & 686 690 .AND. i == nxl ) .OR. & … … 689 693 THEN 690 694 advc_flags_m(k,j,i) = IBSET( advc_flags_m(k,j,i), 18 ) 691 ELSEIF ( ( .NOT. BTEST(wall_flags_ static_0(k,j,i+2),3) .AND.&692 BTEST(wall_flags_ static_0(k,j,i+1),3) .OR.&693 .NOT. BTEST(wall_flags_ static_0(k,j,i-1),3) )&695 ELSEIF ( ( .NOT. BTEST(wall_flags_total_0(k,j,i+2),3) .AND. & 696 BTEST(wall_flags_total_0(k,j,i+1),3) .OR. & 697 .NOT. BTEST(wall_flags_total_0(k,j,i-1),3) ) & 694 698 .OR. & 695 699 ( ( bc_dirichlet_r .OR. bc_radiation_r ) & … … 702 706 !-- Clear flag for WS1 703 707 advc_flags_m(k,j,i) = IBCLR( advc_flags_m(k,j,i), 18 ) 704 ELSEIF ( BTEST(wall_flags_ static_0(k,j,i+1),3) .AND.&705 BTEST(wall_flags_ static_0(k,j,i+2),3) .AND.&706 BTEST(wall_flags_ static_0(k,j,i-1),3) )&708 ELSEIF ( BTEST(wall_flags_total_0(k,j,i+1),3) .AND. & 709 BTEST(wall_flags_total_0(k,j,i+2),3) .AND. & 710 BTEST(wall_flags_total_0(k,j,i-1),3) ) & 707 711 THEN 708 712 advc_flags_m(k,j,i) = IBSET( advc_flags_m(k,j,i),20 ) … … 714 718 !-- w component - y-direction 715 719 !-- WS1 (21), WS3 (22), WS5 (23) 716 IF ( .NOT. BTEST(wall_flags_ static_0(k,j+1,i),3) .OR.&720 IF ( .NOT. BTEST(wall_flags_total_0(k,j+1,i),3) .OR. & 717 721 ( ( bc_dirichlet_s .OR. bc_radiation_s ) & 718 722 .AND. j == nys ) .OR. & … … 721 725 THEN 722 726 advc_flags_m(k,j,i) = IBSET( advc_flags_m(k,j,i), 21 ) 723 ELSEIF ( ( .NOT. BTEST(wall_flags_ static_0(k,j+2,i),3) .AND.&724 BTEST(wall_flags_ static_0(k,j+1,i),3) .OR.&725 .NOT. BTEST(wall_flags_ static_0(k,j-1,i),3) )&727 ELSEIF ( ( .NOT. BTEST(wall_flags_total_0(k,j+2,i),3) .AND. & 728 BTEST(wall_flags_total_0(k,j+1,i),3) .OR. & 729 .NOT. BTEST(wall_flags_total_0(k,j-1,i),3) ) & 726 730 .OR. & 727 731 ( ( bc_dirichlet_s .OR. bc_radiation_s ) & … … 733 737 ! 734 738 !-- Clear flag for WS1 735 advc_flags_m(k,j,i) = IBCLR( advc_flags_m(k,j,i), 21 ) 736 ELSEIF ( BTEST(wall_flags_ static_0(k,j+1,i),3) .AND.&737 BTEST(wall_flags_ static_0(k,j+2,i),3) .AND.&738 BTEST(wall_flags_ static_0(k,j-1,i),3) )&739 advc_flags_m(k,j,i) = IBCLR( advc_flags_m(k,j,i), 21 ) 740 ELSEIF ( BTEST(wall_flags_total_0(k,j+1,i),3) .AND. & 741 BTEST(wall_flags_total_0(k,j+2,i),3) .AND. & 742 BTEST(wall_flags_total_0(k,j-1,i),3) ) & 739 743 THEN 740 744 advc_flags_m(k,j,i) = IBSET( advc_flags_m(k,j,i), 23 ) … … 765 769 766 770 flag_set = .FALSE. 767 IF ( ( .NOT. BTEST(wall_flags_ static_0(k,j,i),3) .AND.&768 BTEST(wall_flags_ static_0(k+1,j,i),3) ) .OR.&769 ( .NOT. BTEST(wall_flags_ static_0(k+1,j,i),3) .AND.&770 BTEST(wall_flags_ static_0(k,j,i),3) ) .OR.&771 k == nzt -1 ) 771 IF ( ( .NOT. BTEST(wall_flags_total_0(k,j,i),3) .AND. & 772 BTEST(wall_flags_total_0(k+1,j,i),3) ) .OR. & 773 ( .NOT. BTEST(wall_flags_total_0(k+1,j,i),3) .AND. & 774 BTEST(wall_flags_total_0(k,j,i),3) ) .OR. & 775 k == nzt -1 ) & 772 776 THEN 773 777 ! … … 779 783 advc_flags_m(k,j,i) = IBSET( advc_flags_m(k,j,i), 24 ) 780 784 flag_set = .TRUE. 781 ELSEIF ( ( .NOT. BTEST(wall_flags_ static_0(k-1,j,i),3) .AND.&782 BTEST(wall_flags_ static_0(k,j,i),3) .AND.&783 BTEST(wall_flags_ static_0(k+1,j,i),3) .AND.&784 BTEST(wall_flags_ static_0(k_pp,j,i),3) ) .OR.&785 ( .NOT. BTEST(wall_flags_ static_0(k_pp,j,i),3) .AND.&786 BTEST(wall_flags_ static_0(k+1,j,i),3) .AND.&787 BTEST(wall_flags_ static_0(k,j,i),3) .AND.&788 BTEST(wall_flags_ static_0(k-1,j,i),3) ) .AND.&789 .NOT. flag_set .OR. 790 k == nzt - 2 ) 785 ELSEIF ( ( .NOT. BTEST(wall_flags_total_0(k-1,j,i),3) .AND. & 786 BTEST(wall_flags_total_0(k,j,i),3) .AND. & 787 BTEST(wall_flags_total_0(k+1,j,i),3) .AND. & 788 BTEST(wall_flags_total_0(k_pp,j,i),3) ) .OR. & 789 ( .NOT. BTEST(wall_flags_total_0(k_pp,j,i),3) .AND. & 790 BTEST(wall_flags_total_0(k+1,j,i),3) .AND. & 791 BTEST(wall_flags_total_0(k,j,i),3) .AND. & 792 BTEST(wall_flags_total_0(k-1,j,i),3) ) .AND. & 793 .NOT. flag_set .OR. & 794 k == nzt - 2 ) & 791 795 THEN 792 796 advc_flags_m(k,j,i) = IBSET( advc_flags_m(k,j,i), 25 ) 793 797 flag_set = .TRUE. 794 ELSEIF ( BTEST(wall_flags_ static_0(k-1,j,i),3) .AND.&795 BTEST(wall_flags_ static_0(k,j,i),3) .AND.&796 BTEST(wall_flags_ static_0(k+1,j,i),3) .AND.&797 BTEST(wall_flags_ static_0(k_pp,j,i),3) .AND.&798 .NOT. flag_set ) 798 ELSEIF ( BTEST(wall_flags_total_0(k-1,j,i),3) .AND. & 799 BTEST(wall_flags_total_0(k,j,i),3) .AND. & 800 BTEST(wall_flags_total_0(k+1,j,i),3) .AND. & 801 BTEST(wall_flags_total_0(k_pp,j,i),3) .AND. & 802 .NOT. flag_set ) & 799 803 THEN 800 804 advc_flags_m(k,j,i) = IBSET( advc_flags_m(k,j,i), 26 ) … … 867 871 DO j = nys, nyn 868 872 DO k = nzb+1, nzt 869 IF ( .NOT. BTEST(wall_flags_ static_0(k,j,i),0) ) CYCLE873 IF ( .NOT. BTEST(wall_flags_total_0(k,j,i),0) ) CYCLE 870 874 ! 871 875 !-- scalar - x-direction 872 876 !-- WS1 (0), WS3 (1), WS5 (2) 873 IF ( ( .NOT. BTEST(wall_flags_ static_0(k,j,i+1),0) .OR.&874 .NOT. BTEST(wall_flags_ static_0(k,j,i+2),0) .OR.&875 .NOT. BTEST(wall_flags_ static_0(k,j,i-1),0) ) .OR.&876 ( non_cyclic_l .AND. i == 0 ) .OR.&877 IF ( ( .NOT. BTEST(wall_flags_total_0(k,j,i+1),0) .OR. & 878 .NOT. BTEST(wall_flags_total_0(k,j,i+2),0) .OR. & 879 .NOT. BTEST(wall_flags_total_0(k,j,i-1),0) ) .OR. & 880 ( non_cyclic_l .AND. i == 0 ) .OR. & 877 881 ( non_cyclic_r .AND. i == nx ) ) THEN 878 882 advc_flag(k,j,i) = IBSET( advc_flag(k,j,i), 0 ) 879 ELSEIF ( ( .NOT. BTEST(wall_flags_ static_0(k,j,i+3),0) .AND.&880 BTEST(wall_flags_ static_0(k,j,i+1),0) .AND.&881 BTEST(wall_flags_ static_0(k,j,i+2),0) .AND.&882 BTEST(wall_flags_ static_0(k,j,i-1),0)&883 ) .OR. 884 ( .NOT. BTEST(wall_flags_ static_0(k,j,i-2),0) .AND.&885 BTEST(wall_flags_ static_0(k,j,i+1),0) .AND.&886 BTEST(wall_flags_ static_0(k,j,i+2),0) .AND.&887 BTEST(wall_flags_ static_0(k,j,i-1),0)&888 ) 889 .OR. 890 ( non_cyclic_r .AND. i == nx-1 ) .OR. 883 ELSEIF ( ( .NOT. BTEST(wall_flags_total_0(k,j,i+3),0) .AND. & 884 BTEST(wall_flags_total_0(k,j,i+1),0) .AND. & 885 BTEST(wall_flags_total_0(k,j,i+2),0) .AND. & 886 BTEST(wall_flags_total_0(k,j,i-1),0) & 887 ) .OR. & 888 ( .NOT. BTEST(wall_flags_total_0(k,j,i-2),0) .AND. & 889 BTEST(wall_flags_total_0(k,j,i+1),0) .AND. & 890 BTEST(wall_flags_total_0(k,j,i+2),0) .AND. & 891 BTEST(wall_flags_total_0(k,j,i-1),0) & 892 ) & 893 .OR. & 894 ( non_cyclic_r .AND. i == nx-1 ) .OR. & 891 895 ( non_cyclic_l .AND. i == 1 ) ) THEN 892 896 advc_flag(k,j,i) = IBSET( advc_flag(k,j,i), 1 ) 893 ELSEIF ( BTEST(wall_flags_ static_0(k,j,i+1),0) .AND.&894 BTEST(wall_flags_ static_0(k,j,i+2),0) .AND.&895 BTEST(wall_flags_ static_0(k,j,i+3),0) .AND.&896 BTEST(wall_flags_ static_0(k,j,i-1),0) .AND.&897 BTEST(wall_flags_ static_0(k,j,i-2),0) )&897 ELSEIF ( BTEST(wall_flags_total_0(k,j,i+1),0) .AND. & 898 BTEST(wall_flags_total_0(k,j,i+2),0) .AND. & 899 BTEST(wall_flags_total_0(k,j,i+3),0) .AND. & 900 BTEST(wall_flags_total_0(k,j,i-1),0) .AND. & 901 BTEST(wall_flags_total_0(k,j,i-2),0) ) & 898 902 THEN 899 903 advc_flag(k,j,i) = IBSET( advc_flag(k,j,i), 2 ) … … 902 906 !-- scalar - y-direction 903 907 !-- WS1 (3), WS3 (4), WS5 (5) 904 IF ( ( .NOT. BTEST(wall_flags_ static_0(k,j+1,i),0) .OR.&905 .NOT. BTEST(wall_flags_ static_0(k,j+2,i),0) .OR.&906 .NOT. BTEST(wall_flags_ static_0(k,j-1,i),0)) .OR.&907 ( non_cyclic_s .AND. j == 0 ) .OR.&908 IF ( ( .NOT. BTEST(wall_flags_total_0(k,j+1,i),0) .OR. & 909 .NOT. BTEST(wall_flags_total_0(k,j+2,i),0) .OR. & 910 .NOT. BTEST(wall_flags_total_0(k,j-1,i),0)) .OR. & 911 ( non_cyclic_s .AND. j == 0 ) .OR. & 908 912 ( non_cyclic_n .AND. j == ny ) ) THEN 909 913 advc_flag(k,j,i) = IBSET( advc_flag(k,j,i), 3 ) 910 914 ! 911 915 !-- WS3 912 ELSEIF ( ( .NOT. BTEST(wall_flags_ static_0(k,j+3,i),0) .AND.&913 BTEST(wall_flags_ static_0(k,j+1,i),0) .AND.&914 BTEST(wall_flags_ static_0(k,j+2,i),0) .AND.&915 BTEST(wall_flags_ static_0(k,j-1,i),0)&916 ) .OR. 917 ( .NOT. BTEST(wall_flags_ static_0(k,j-2,i),0) .AND.&918 BTEST(wall_flags_ static_0(k,j+1,i),0) .AND.&919 BTEST(wall_flags_ static_0(k,j+2,i),0) .AND.&920 BTEST(wall_flags_ static_0(k,j-1,i),0)&921 ) 922 .OR. 923 ( non_cyclic_s .AND. j == 1 ) .OR. 916 ELSEIF ( ( .NOT. BTEST(wall_flags_total_0(k,j+3,i),0) .AND. & 917 BTEST(wall_flags_total_0(k,j+1,i),0) .AND. & 918 BTEST(wall_flags_total_0(k,j+2,i),0) .AND. & 919 BTEST(wall_flags_total_0(k,j-1,i),0) & 920 ) .OR. & 921 ( .NOT. BTEST(wall_flags_total_0(k,j-2,i),0) .AND. & 922 BTEST(wall_flags_total_0(k,j+1,i),0) .AND. & 923 BTEST(wall_flags_total_0(k,j+2,i),0) .AND. & 924 BTEST(wall_flags_total_0(k,j-1,i),0) & 925 ) & 926 .OR. & 927 ( non_cyclic_s .AND. j == 1 ) .OR. & 924 928 ( non_cyclic_n .AND. j == ny-1 ) ) THEN 925 929 advc_flag(k,j,i) = IBSET( advc_flag(k,j,i), 4 ) 926 930 ! 927 931 !-- WS5 928 ELSEIF ( BTEST(wall_flags_ static_0(k,j+1,i),0) .AND.&929 BTEST(wall_flags_ static_0(k,j+2,i),0) .AND.&930 BTEST(wall_flags_ static_0(k,j+3,i),0) .AND.&931 BTEST(wall_flags_ static_0(k,j-1,i),0) .AND.&932 BTEST(wall_flags_ static_0(k,j-2,i),0) )&932 ELSEIF ( BTEST(wall_flags_total_0(k,j+1,i),0) .AND. & 933 BTEST(wall_flags_total_0(k,j+2,i),0) .AND. & 934 BTEST(wall_flags_total_0(k,j+3,i),0) .AND. & 935 BTEST(wall_flags_total_0(k,j-1,i),0) .AND. & 936 BTEST(wall_flags_total_0(k,j-2,i),0) ) & 933 937 THEN 934 938 advc_flag(k,j,i) = IBSET( advc_flag(k,j,i), 5 ) … … 938 942 !-- for passive scalars, even if only one direction may be 939 943 !-- blocked by topography. These locations will be identified 940 !-- by wall_flags_ static_0 bit 31. Note, since several modules define944 !-- by wall_flags_total_0 bit 31. Note, since several modules define 941 945 !-- advection flags but may apply different scalar boundary 942 946 !-- conditions, bit 31 is temporarily stored on advc_flags. … … 1025 1029 !-- them again. 1026 1030 !-- x-direction 1027 IF ( ( non_cyclic_l .AND. i == 0 ) .OR. 1031 IF ( ( non_cyclic_l .AND. i == 0 ) .OR. & 1028 1032 ( non_cyclic_r .AND. i == nx ) ) THEN 1029 1033 advc_flag(k,j,i) = IBCLR( advc_flag(k,j,i), 0 ) … … 1034 1038 ENDIF 1035 1039 1036 IF ( ( non_cyclic_l .AND. i == 1 ) .OR. 1040 IF ( ( non_cyclic_l .AND. i == 1 ) .OR. & 1037 1041 ( non_cyclic_r .AND. i == nx-1 ) ) THEN 1038 1042 advc_flag(k,j,i) = IBCLR( advc_flag(k,j,i), 0 ) … … 1044 1048 ! 1045 1049 !-- y-direction 1046 IF ( ( non_cyclic_n .AND. j == 0 ) .OR. 1050 IF ( ( non_cyclic_n .AND. j == 0 ) .OR. & 1047 1051 ( non_cyclic_s .AND. j == ny ) ) THEN 1048 1052 advc_flag(k,j,i) = IBCLR( advc_flag(k,j,i), 3 ) … … 1053 1057 ENDIF 1054 1058 1055 IF ( ( non_cyclic_n .AND. j == 1 ) .OR. 1059 IF ( ( non_cyclic_n .AND. j == 1 ) .OR. & 1056 1060 ( non_cyclic_s .AND. j == ny-1 ) ) THEN 1057 1061 advc_flag(k,j,i) = IBCLR( advc_flag(k,j,i), 3 ) … … 1086 1090 1087 1091 flag_set = .FALSE. 1088 IF ( ( .NOT. BTEST(wall_flags_ static_0(k-1,j,i),0) .AND.&1089 BTEST(wall_flags_ static_0(k,j,i),0) .AND.&1090 BTEST(wall_flags_ static_0(k+1,j,i),0) ) .OR.&1091 ( .NOT. BTEST(wall_flags_ static_0(k_pp,j,i),0) .AND.&1092 BTEST(wall_flags_ static_0(k+1,j,i),0) .AND.&1093 BTEST(wall_flags_ static_0(k,j,i),0) ) .OR.&1094 ( k == nzt .AND. symmetry_flag == 0 ) ) 1092 IF ( ( .NOT. BTEST(wall_flags_total_0(k-1,j,i),0) .AND. & 1093 BTEST(wall_flags_total_0(k,j,i),0) .AND. & 1094 BTEST(wall_flags_total_0(k+1,j,i),0) ) .OR. & 1095 ( .NOT. BTEST(wall_flags_total_0(k_pp,j,i),0) .AND. & 1096 BTEST(wall_flags_total_0(k+1,j,i),0) .AND. & 1097 BTEST(wall_flags_total_0(k,j,i),0) ) .OR. & 1098 ( k == nzt .AND. symmetry_flag == 0 ) ) & 1095 1099 THEN 1096 1100 advc_flag(k,j,i) = IBSET( advc_flag(k,j,i), 6 ) 1097 1101 flag_set = .TRUE. 1098 ELSEIF ( ( .NOT. BTEST(wall_flags_ static_0(k_mm,j,i),0) .OR.&1099 .NOT. BTEST(wall_flags_ static_0(k_ppp,j,i),0) ) .AND.&1100 BTEST(wall_flags_ static_0(k-1,j,i),0) .AND.&1101 BTEST(wall_flags_ static_0(k,j,i),0) .AND.&1102 BTEST(wall_flags_ static_0(k+1,j,i),0) .AND.&1103 BTEST(wall_flags_ static_0(k_pp,j,i),0) .AND.&1104 .NOT. flag_set .OR. 1105 ( k == nzt - 1 .AND. symmetry_flag == 0 ) ) 1102 ELSEIF ( ( .NOT. BTEST(wall_flags_total_0(k_mm,j,i),0) .OR. & 1103 .NOT. BTEST(wall_flags_total_0(k_ppp,j,i),0) ) .AND. & 1104 BTEST(wall_flags_total_0(k-1,j,i),0) .AND. & 1105 BTEST(wall_flags_total_0(k,j,i),0) .AND. & 1106 BTEST(wall_flags_total_0(k+1,j,i),0) .AND. & 1107 BTEST(wall_flags_total_0(k_pp,j,i),0) .AND. & 1108 .NOT. flag_set .OR. & 1109 ( k == nzt - 1 .AND. symmetry_flag == 0 ) ) & 1106 1110 THEN 1107 1111 advc_flag(k,j,i) = IBSET( advc_flag(k,j,i), 7 ) 1108 1112 flag_set = .TRUE. 1109 ELSEIF ( BTEST(wall_flags_ static_0(k_mm,j,i),0) .AND.&1110 BTEST(wall_flags_ static_0(k-1,j,i),0) .AND.&1111 BTEST(wall_flags_ static_0(k,j,i),0) .AND.&1112 BTEST(wall_flags_ static_0(k+1,j,i),0) .AND.&1113 BTEST(wall_flags_ static_0(k_pp,j,i),0) .AND.&1114 BTEST(wall_flags_ static_0(k_ppp,j,i),0) .AND.&1115 .NOT. flag_set ) &1113 ELSEIF ( BTEST(wall_flags_total_0(k_mm,j,i),0) .AND. & 1114 BTEST(wall_flags_total_0(k-1,j,i),0) .AND. & 1115 BTEST(wall_flags_total_0(k,j,i),0) .AND. & 1116 BTEST(wall_flags_total_0(k+1,j,i),0) .AND. & 1117 BTEST(wall_flags_total_0(k_pp,j,i),0) .AND. & 1118 BTEST(wall_flags_total_0(k_ppp,j,i),0) .AND. & 1119 .NOT. flag_set ) & 1116 1120 THEN 1117 1121 advc_flag(k,j,i) = IBSET( advc_flag(k,j,i), 8 )
Note: See TracChangeset
for help on using the changeset viewer.