[9012] | 1 | |
---|
[14349] | 2 | SUBROUTINE lbc_nfd_ext_/**/PRECISION( ptab, cd_nat, psgn, kextj ) |
---|
[9190] | 3 | !!---------------------------------------------------------------------- |
---|
[14338] | 4 | REAL(PRECISION), DIMENSION(:,1-kextj:),INTENT(inout) :: ptab |
---|
| 5 | CHARACTER(len=1), INTENT(in ) :: cd_nat ! nature of array grid-points |
---|
| 6 | REAL(PRECISION), INTENT(in ) :: psgn ! sign used across the north fold boundary |
---|
| 7 | INTEGER, INTENT(in ) :: kextj ! extra halo width at north fold |
---|
[9012] | 8 | ! |
---|
[14349] | 9 | INTEGER :: ji, jj, jh ! dummy loop indices |
---|
| 10 | INTEGER :: ipj |
---|
[9012] | 11 | INTEGER :: ijt, iju, ipjm1 |
---|
| 12 | !!---------------------------------------------------------------------- |
---|
| 13 | ! |
---|
| 14 | SELECT CASE ( jpni ) |
---|
[13286] | 15 | CASE ( 1 ) ; ipj = jpj ! 1 proc only along the i-direction |
---|
[9012] | 16 | CASE DEFAULT ; ipj = 4 ! several proc along the i-direction |
---|
| 17 | END SELECT |
---|
| 18 | ! |
---|
| 19 | ipjm1 = ipj-1 |
---|
| 20 | ! |
---|
[14349] | 21 | IF( c_NFtype == 'T' ) THEN ! * North fold T-point pivot |
---|
[9012] | 22 | ! |
---|
[14349] | 23 | SELECT CASE ( cd_nat ) |
---|
| 24 | CASE ( 'T' , 'W' ) ! T-, W-point |
---|
| 25 | DO jh = 0, kextj |
---|
| 26 | DO ji = 2, jpiglo |
---|
[9012] | 27 | ijt = jpiglo-ji+2 |
---|
[14349] | 28 | ptab(ji,ipj+jh) = psgn * ptab(ijt,ipj-2-jh) |
---|
[9012] | 29 | END DO |
---|
[14349] | 30 | ptab(1,ipj+jh) = psgn * ptab(3,ipj-2-jh) |
---|
| 31 | END DO |
---|
| 32 | DO ji = jpiglo/2+1, jpiglo |
---|
| 33 | ijt = jpiglo-ji+2 |
---|
| 34 | ptab(ji,ipjm1) = psgn * ptab(ijt,ipjm1) |
---|
| 35 | END DO |
---|
| 36 | CASE ( 'U' ) ! U-point |
---|
| 37 | DO jh = 0, kextj |
---|
| 38 | DO ji = 2, jpiglo-1 |
---|
[9012] | 39 | iju = jpiglo-ji+1 |
---|
[14349] | 40 | ptab(ji,ipj+jh) = psgn * ptab(iju,ipj-2-jh) |
---|
[9012] | 41 | END DO |
---|
[14349] | 42 | ptab( 1 ,ipj+jh) = psgn * ptab( 2 ,ipj-2-jh) |
---|
| 43 | ptab(jpiglo,ipj+jh) = psgn * ptab(jpiglo-1,ipj-2-jh) |
---|
| 44 | END DO |
---|
| 45 | DO ji = jpiglo/2, jpiglo-1 |
---|
| 46 | iju = jpiglo-ji+1 |
---|
| 47 | ptab(ji,ipjm1) = psgn * ptab(iju,ipjm1) |
---|
| 48 | END DO |
---|
| 49 | CASE ( 'V' ) ! V-point |
---|
| 50 | DO jh = 0, kextj |
---|
| 51 | DO ji = 2, jpiglo |
---|
| 52 | ijt = jpiglo-ji+2 |
---|
| 53 | ptab(ji,ipj-1+jh) = psgn * ptab(ijt,ipj-2-jh) |
---|
| 54 | ptab(ji,ipj+jh ) = psgn * ptab(ijt,ipj-3-jh) |
---|
[9012] | 55 | END DO |
---|
[14349] | 56 | ptab(1,ipj+jh) = psgn * ptab(3,ipj-3-jh) |
---|
| 57 | END DO |
---|
| 58 | CASE ( 'F' ) ! F-point |
---|
| 59 | DO jh = 0, kextj |
---|
| 60 | DO ji = 1, jpiglo-1 |
---|
| 61 | iju = jpiglo-ji+1 |
---|
| 62 | ptab(ji,ipj-1+jh) = psgn * ptab(iju,ipj-2-jh) |
---|
| 63 | ptab(ji,ipj+jh ) = psgn * ptab(iju,ipj-3-jh) |
---|
[9467] | 64 | END DO |
---|
[14349] | 65 | END DO |
---|
| 66 | DO jh = 0, kextj |
---|
| 67 | ptab( 1 ,ipj+jh) = psgn * ptab( 2 ,ipj-3-jh) |
---|
| 68 | ptab(jpiglo,ipj+jh) = psgn * ptab(jpiglo-1,ipj-3-jh) |
---|
| 69 | END DO |
---|
| 70 | END SELECT |
---|
[14314] | 71 | ! |
---|
[14349] | 72 | ENDIF ! c_NFtype == 'T' |
---|
| 73 | ! |
---|
| 74 | IF( c_NFtype == 'F' ) THEN ! * North fold F-point pivot |
---|
| 75 | ! |
---|
| 76 | SELECT CASE ( cd_nat ) |
---|
| 77 | CASE ( 'T' , 'W' ) ! T-, W-point |
---|
| 78 | DO jh = 0, kextj |
---|
| 79 | DO ji = 1, jpiglo |
---|
| 80 | ijt = jpiglo-ji+1 |
---|
| 81 | ptab(ji,ipj+jh) = psgn * ptab(ijt,ipj-1-jh) |
---|
[9012] | 82 | END DO |
---|
[14349] | 83 | END DO |
---|
| 84 | CASE ( 'U' ) ! U-point |
---|
| 85 | DO jh = 0, kextj |
---|
| 86 | DO ji = 1, jpiglo-1 |
---|
| 87 | iju = jpiglo-ji |
---|
| 88 | ptab(ji,ipj+jh) = psgn * ptab(iju,ipj-1-jh) |
---|
[9012] | 89 | END DO |
---|
[14349] | 90 | ptab(jpiglo,ipj+jh) = psgn * ptab(jpiglo-2,ipj-1-jh) |
---|
| 91 | END DO |
---|
| 92 | CASE ( 'V' ) ! V-point |
---|
| 93 | DO jh = 0, kextj |
---|
| 94 | DO ji = 1, jpiglo |
---|
[9012] | 95 | ijt = jpiglo-ji+1 |
---|
[14349] | 96 | ptab(ji,ipj+jh) = psgn * ptab(ijt,ipj-2-jh) |
---|
[9012] | 97 | END DO |
---|
[14349] | 98 | END DO |
---|
| 99 | DO ji = jpiglo/2+1, jpiglo |
---|
| 100 | ijt = jpiglo-ji+1 |
---|
| 101 | ptab(ji,ipjm1) = psgn * ptab(ijt,ipjm1) |
---|
| 102 | END DO |
---|
| 103 | CASE ( 'F' ) ! F-point |
---|
| 104 | DO jh = 0, kextj |
---|
| 105 | DO ji = 1, jpiglo-1 |
---|
[9012] | 106 | iju = jpiglo-ji |
---|
[14349] | 107 | ptab(ji,ipj+jh ) = psgn * ptab(iju,ipj-2-jh) |
---|
[9012] | 108 | END DO |
---|
[14349] | 109 | ptab(jpiglo,ipj+jh) = psgn * ptab(jpiglo-2,ipj-2-jh) |
---|
| 110 | END DO |
---|
| 111 | DO ji = jpiglo/2+1, jpiglo-1 |
---|
| 112 | iju = jpiglo-ji |
---|
| 113 | ptab(ji,ipjm1) = psgn * ptab(iju,ipjm1) |
---|
| 114 | END DO |
---|
| 115 | END SELECT |
---|
[9012] | 116 | ! |
---|
[14349] | 117 | ENDIF ! c_NFtype == 'F' |
---|
[9012] | 118 | ! |
---|
[14349] | 119 | END SUBROUTINE lbc_nfd_ext_/**/PRECISION |
---|
[9012] | 120 | |
---|