[12353] | 1 | #if defined show_comments |
---|
[12340] | 2 | ! These comments are not intended to be retained during preprocessing; i.e. do not define "show_comments" |
---|
[12341] | 3 | !!---------------------------------------------------------------------- |
---|
| 4 | !! NEMO/OCE 4.0 , NEMO Consortium (2018) |
---|
| 5 | !! Software governed by the CeCILL license (see ./LICENSE) |
---|
| 6 | !!---------------------------------------------------------------------- |
---|
[12340] | 7 | ! This header file contains preprocessor definitions and macros used in the do-loop substitutions introduced |
---|
| 8 | ! between version 4.0 and 4.2. The primary aim of these macros is to assist in future applications of tiling |
---|
| 9 | ! to improve performance. This is expected to be achieved by alternative versions of these macros in selected |
---|
| 10 | ! locations. The initial introduction of these macros simply replaces all identifiable nested 2D- and 3D-loops |
---|
| 11 | ! with single line statements (and adjusts indenting accordingly). Do loops are identifiable if they comform |
---|
| 12 | ! to either: |
---|
| 13 | ! DO jk = .... |
---|
| 14 | ! DO jj = .... DO jj = ... |
---|
| 15 | ! DO ji = .... DO ji = ... |
---|
[12341] | 16 | ! . OR . |
---|
| 17 | ! . . |
---|
[12340] | 18 | ! END DO END DO |
---|
| 19 | ! END DO END DO |
---|
| 20 | ! END DO |
---|
| 21 | ! and white-space variants thereof. |
---|
| 22 | ! |
---|
| 23 | ! Additionally, only loops with recognised jj and ji loops limits are treated; these are: |
---|
| 24 | ! Lower limits of 1, 2 or fs_2 |
---|
| 25 | ! Upper limits of jpi, jpim1 or fs_jpim1 (for ji) or jpj, jpjm1 or fs_jpjm1 (for jj) |
---|
| 26 | ! |
---|
| 27 | ! The macro naming convention takes the form: DO_2D_BT_LR where: |
---|
| 28 | ! B is the Bottom offset from the PE's inner domain; |
---|
| 29 | ! T is the Top offset from the PE's inner domain; |
---|
| 30 | ! L is the Left offset from the PE's inner domain; |
---|
| 31 | ! R is the Right offset from the PE's inner domain |
---|
| 32 | ! |
---|
| 33 | ! So, given an inner domain of 2,jpim1 and 2,jpjm1, a typical example would replace: |
---|
| 34 | ! |
---|
| 35 | ! DO jj = 2, jpj |
---|
| 36 | ! DO ji = 1, jpim1 |
---|
[12341] | 37 | ! . |
---|
| 38 | ! . |
---|
| 39 | ! END DO |
---|
[12340] | 40 | ! END DO |
---|
| 41 | ! |
---|
| 42 | ! with: |
---|
| 43 | ! |
---|
| 44 | ! DO_2D_01_10 |
---|
[12341] | 45 | ! . |
---|
| 46 | ! . |
---|
[12340] | 47 | ! END_2D |
---|
| 48 | ! |
---|
[12341] | 49 | ! similar conventions apply to the 3D loops macros. jk loop limits are retained through macro arguments and are not restricted. This |
---|
[12340] | 50 | ! includes the possibility of strides for which an extra set of DO_3DS macros are defined. |
---|
| 51 | ! |
---|
[12807] | 52 | ! In the following definitions the inner PE domain is defined by start indices of (_Nis0, Njs0) and end indices of (Nie0, Njs0) |
---|
| 53 | ! The following macros are defined just below: _Nis0, Njs0, _Nis1, Njs1, _Nie0, Njs0, _Nie1, Nje1. |
---|
[12353] | 54 | ! These names are chosen to, hopefully, avoid any future, unintended matches elsewhere in the code. |
---|
[12340] | 55 | ! |
---|
[12760] | 56 | !!gm changes ; |
---|
| 57 | ! |
---|
| 58 | ! -0- fortran code : defined in par_oce.F90 the folowwing valiables : |
---|
| 59 | !!# |
---|
[12807] | 60 | !!# INTEGER, PUBLIC :: Nis0, Nis1, Nis2 !: start I-index (_0: no halo, _1 & _2: 1 & 2-halos) |
---|
| 61 | !!# INTEGER, PUBLIC :: Nie0, Nie1, Nie2 !: end I-index (_0: no halo, _1 & _2: 1 & 2-halos) |
---|
| 62 | !!# INTEGER, PUBLIC :: Njs0, Njs1, Njs2 !: start J-index (_0: no halo, _1 & _2: 1 & 2-halos) |
---|
| 63 | !!# INTEGER, PUBLIC :: Nje0, Nje1, Nje2 !: end J-index (_0: no halo, _1 & _2: 1 & 2-halos) |
---|
[12760] | 64 | !!# |
---|
| 65 | ! -1- fortran code put in mppinit.F90 : |
---|
| 66 | !!# just after the futur read of nn_hls in namXXX (to be defined) |
---|
| 67 | !!# NB: currently nn_hls is defined as a parameter in par_oce.F90 |
---|
| 68 | !!# SUBROUTINE init_do_loop |
---|
| 69 | !!# !!---------------------------------------------------------------------- |
---|
| 70 | !!# !! *** ROUTINE init_do_loop_indices *** |
---|
| 71 | !!# !! |
---|
| 72 | !!# !! ** Purpose : set the starting/ending indices of DO-loop |
---|
| 73 | !!# !! These indices are used in do_loop_substitute.h90 |
---|
| 74 | !!# !!----------------------------------------------------------------------!!# ! !== set the starting/ending indices of DO-loop ==! (used in do_loop_substitute.h90) |
---|
| 75 | !!# ! |
---|
| 76 | !!# IF( nn_hls == 1 ) THEN !* halo size of 1 |
---|
| 77 | !!# ! |
---|
[12807] | 78 | !!# Nis0 = 2 ; Nis1 = 1 ; Nis2 = Nis1 |
---|
| 79 | !!# Njs0 = Nis0 ; Njs1 = Nis1 ; Njs2 = Nis1 |
---|
[12760] | 80 | !!# ! |
---|
[12807] | 81 | !!# Nie0 = jpi-1 ; Nje1 = jpi ; Nie2 = Nie1 |
---|
| 82 | !!# Nje0 = jpj-1 ; Nje1 = jpj-1 ; Nje2 = Nie1 |
---|
[12760] | 83 | !!# ! |
---|
| 84 | !!# ELSEIF( nn_hls == 2 ) THEN !* halo size of 2 |
---|
| 85 | !!# ! |
---|
[12807] | 86 | !!# Nis0 = 3 ; Nis1 = 2 ; Nis2 = 1 |
---|
| 87 | !!# Njs0 = Nis0 ; Njs1 = Nis1 ; Njs2 = Nis2 |
---|
[12760] | 88 | !!# ! |
---|
[12807] | 89 | !!# Nie0 = jpi-2 ; Nje1 = jpi-1 ; Nie2 = jpi |
---|
| 90 | !!# Nje0 = jpj-2 ; Nje1 = jpj-1 ; Nje2 = jpj |
---|
[12760] | 91 | !!# ! |
---|
| 92 | !!# ELSE !* unexpected halo size |
---|
| 93 | !!# CALL ctl_stop( 'STOP', 'ini_mpp: wrong value of halo size : nn_hls= 1 or 2 only !') |
---|
| 94 | !!# ENDIF |
---|
| 95 | !!# |
---|
| 96 | !!# ! |
---|
| 97 | !!# END SUBROUTINE init_do_loop |
---|
| 98 | ! |
---|
| 99 | ! ! -2- in do_loop_substitute becomes : |
---|
| 100 | ! |
---|
[12340] | 101 | #endif |
---|
| 102 | |
---|
[12760] | 103 | ! 2D loops with 1 |
---|
[12340] | 104 | |
---|
[12807] | 105 | #define DO_2D_00_00 DO jj = Njs0, Nje0 ; DO ji = Nis0, Nie0 |
---|
| 106 | #define DO_2D_00_01 DO jj = Njs0, Nje0 ; DO ji = Nis0, Nie1 |
---|
| 107 | #define DO_2D_00_10 DO jj = Njs0, Nje0 ; DO ji = Nis1, Nie0 |
---|
| 108 | #define DO_2D_00_11 DO jj = Njs0, Nje0 ; DO ji = Nis1, Nie1 |
---|
[12340] | 109 | |
---|
[12807] | 110 | #define DO_2D_01_00 DO jj = Njs0, Nje1 ; DO ji = Nis0, Nie0 |
---|
| 111 | #define DO_2D_01_01 DO jj = Njs0, Nje1 ; DO ji = Nis0, Nie1 |
---|
| 112 | #define DO_2D_01_10 DO jj = Njs0, Nje1 ; DO ji = Nis1, Nie0 |
---|
| 113 | #define DO_2D_01_11 DO jj = Njs0, Nje1 ; DO ji = Nis1, Nie1 |
---|
[12340] | 114 | |
---|
[12807] | 115 | #define DO_2D_10_00 DO jj = Njs1, Nje0 ; DO ji = Nis0, Nie0 |
---|
| 116 | #define DO_2D_10_01 DO jj = Njs1, Nje0 ; DO ji = Nis0, Nie1 ! not used ? |
---|
| 117 | #define DO_2D_10_10 DO jj = Njs1, Nje0 ; DO ji = Nis1, Nie0 |
---|
| 118 | #define DO_2D_10_11 DO jj = Njs1, Nje0 ; DO ji = Nis1, Nie1 |
---|
[12340] | 119 | |
---|
[12807] | 120 | #define DO_2D_11_00 DO jj = Njs1, Nje1 ; DO ji = Nis0, Nie0 |
---|
| 121 | #define DO_2D_11_01 DO jj = Njs1, Nje1 ; DO ji = Nis0, Nie1 |
---|
| 122 | #define DO_2D_11_10 DO jj = Njs1, Nje1 ; DO ji = Nis1, Nie0 |
---|
| 123 | #define DO_2D_11_11 DO jj = Njs1, Nje1 ; DO ji = Nis1, Nie1 |
---|
[12340] | 124 | |
---|
[12760] | 125 | ! 2D loops with 1 following a 2/3D loop with 2 |
---|
| 126 | |
---|
[12807] | 127 | #define DO_2D_00_01nxt2 DO jj = Njs0 , Nje0 ; DO ji = Nis0 , Nie1nxt2 |
---|
| 128 | #define DO_2D_00_10nxt2 DO jj = Njs0 , Nje0 ; DO ji = Nis1nxt2, Nie0 |
---|
| 129 | #define DO_2D_00_11nxt2 DO jj = Njs0 , Nje0 ; DO ji = Nis1nxt2, Nie1nxt2 |
---|
[12760] | 130 | |
---|
[12807] | 131 | #define DO_2D_01_00nxt2 DO jj = Njs0 , Nje1nxt2 ; DO ji = Nis0 , Nie0 |
---|
| 132 | #define DO_2D_01_01nxt2 DO jj = Njs0 , Nje1nxt2 ; DO ji = Nis0 , Nie1nxt2 |
---|
| 133 | #define DO_2D_01_10nxt2 DO jj = Njs0 , Nje1nxt2 ; DO ji = Nis1nxt2, Nie0 |
---|
| 134 | #define DO_2D_01_11nxt2 DO jj = Njs0 , Nje1nxt2 ; DO ji = Nis1nxt2, Nie1nxt2 |
---|
[12760] | 135 | |
---|
[12807] | 136 | #define DO_2D_10_00nxt2 DO jj = Njs1nxt2, Nje0 ; DO ji = Nis0 , Nie0 |
---|
| 137 | #define DO_2D_10_01nxt2 DO jj = Njs1nxt2, Nje0 ; DO ji = Nis0 , Nie1nxt2 ! not used ? |
---|
| 138 | #define DO_2D_10_10nxt2 DO jj = Njs1nxt2, Nje0 ; DO ji = Nis1nxt2, Nie0 |
---|
| 139 | #define DO_2D_10_11nxt2 DO jj = Njs1nxt2, Nje0 ; DO ji = Nis1nxt2, Nie1nxt2 |
---|
[12760] | 140 | |
---|
[12807] | 141 | #define DO_2D_11_00nxt2 DO jj = Njs1nxt2, Nje1nxt2 ; DO ji = Nis0 , Nie0 |
---|
| 142 | #define DO_2D_11_01nxt2 DO jj = Njs1nxt2, Nje1nxt2 ; DO ji = Nis0 , Nie1nxt2 |
---|
| 143 | #define DO_2D_11_10nxt2 DO jj = Njs1nxt2, Nje1nxt2 ; DO ji = Nis1nxt2, Nie0 |
---|
| 144 | #define DO_2D_11_11nxt2 DO jj = Njs1nxt2, Nje1nxt2 ; DO ji = Nis1nxt2, Nie1nxt2 |
---|
[12760] | 145 | |
---|
| 146 | ! 2D loops with 2 |
---|
| 147 | |
---|
[12807] | 148 | #define DO_2D_11_12 DO jj = Njs1nxt2, Nje1nxt2 ; DO ji = Nis1nxt2, Nie2 |
---|
| 149 | #define DO_2D_11_21 DO jj = Njs1nxt2, Nje1nxt2 ; DO ji = Nis2 , Nie1nxt2 |
---|
| 150 | #define DO_2D_11_22 DO jj = Njs1nxt2, Nje1nxt2 ; DO ji = Nis2 , Nie2 |
---|
[12760] | 151 | |
---|
[12807] | 152 | #define DO_2D_12_11 DO jj = Njs1nxt2, Nje2 ; DO ji = Nis1nxt2, Nie1nxt2 |
---|
| 153 | #define DO_2D_12_12 DO jj = Njs1nxt2, Nje2 ; DO ji = Nis1nxt2, Nie2 |
---|
| 154 | #define DO_2D_12_21 DO jj = Njs1nxt2, Nje2 ; DO ji = Nis2 , Nie1nxt2 |
---|
| 155 | #define DO_2D_12_22 DO jj = Njs1nxt2, Nje2 ; DO ji = Nis2 , Nie2 |
---|
[12340] | 156 | |
---|
[12807] | 157 | #define DO_2D_21_11 DO jj = Njs2 , Nje1nxt2 ; DO ji = Nis1nxt2, Nie1nxt2 |
---|
| 158 | #define DO_2D_21_12 DO jj = Njs2 , Nje1nxt2 ; DO ji = Nis1nxt2, Nie2 ! not used ? |
---|
| 159 | #define DO_2D_21_21 DO jj = Njs2 , Nje1nxt2 ; DO ji = Nis2 , Nie1nxt2 |
---|
| 160 | #define DO_2D_21_22 DO jj = Njs2 , Nje1nxt2 ; DO ji = Nis2 , Nie2 |
---|
[12760] | 161 | |
---|
[12807] | 162 | #define DO_2D_22_11 DO jj = Njs2 , Nje2 ; DO ji = Nis1nxt2, Nie1nxt2 |
---|
| 163 | #define DO_2D_22_12 DO jj = Njs2 , Nje2 ; DO ji = Nis1nxt2, Nie2 |
---|
| 164 | #define DO_2D_22_21 DO jj = Njs2 , Nje2 ; DO ji = Nis2 , Nie1nxt2 |
---|
| 165 | #define DO_2D_22_22 DO jj = Njs2 , Nje2 ; DO ji = Nis2 , Nie2 |
---|
[12340] | 166 | |
---|
[12760] | 167 | ! 3D loops with 1 |
---|
[12340] | 168 | |
---|
[12760] | 169 | #define DO_3D_00_00(ks,ke) DO jk = ks, ke ; DO_2D_00_00 |
---|
| 170 | #define DO_3D_00_01(ks,ke) DO jk = ks, ke ; DO_2D_00_01 |
---|
| 171 | #define DO_3D_00_10(ks,ke) DO jk = ks, ke ; DO_2D_00_10 |
---|
| 172 | #define DO_3D_00_11(ks,ke) DO jk = ks, ke ; DO_2D_00_11 |
---|
| 173 | |
---|
| 174 | #define DO_3D_01_00(ks,ke) DO jk = ks, ke ; DO_2D_01_00 |
---|
| 175 | #define DO_3D_01_01(ks,ke) DO jk = ks, ke ; DO_2D_01_01 |
---|
| 176 | #define DO_3D_01_10(ks,ke) DO jk = ks, ke ; DO_2D_01_10 |
---|
| 177 | #define DO_3D_01_11(ks,ke) DO jk = ks, ke ; DO_2D_01_11 |
---|
| 178 | |
---|
| 179 | #define DO_3D_10_00(ks,ke) DO jk = ks, ke ; DO_2D_10_00 |
---|
| 180 | #define DO_3D_10_01(ks,ke) DO jk = ks, ke ; DO_2D_10_01 |
---|
| 181 | #define DO_3D_10_10(ks,ke) DO jk = ks, ke ; DO_2D_10_10 |
---|
| 182 | #define DO_3D_10_11(ks,ke) DO jk = ks, ke ; DO_2D_10_11 |
---|
| 183 | |
---|
| 184 | #define DO_3D_11_00(ks,ke) DO jk = ks, ke ; DO_2D_11_00 |
---|
| 185 | #define DO_3D_11_01(ks,ke) DO jk = ks, ke ; DO_2D_11_01 |
---|
| 186 | #define DO_3D_11_10(ks,ke) DO jk = ks, ke ; DO_2D_11_10 |
---|
| 187 | #define DO_3D_11_11(ks,ke) DO jk = ks, ke ; DO_2D_11_11 |
---|
| 188 | |
---|
| 189 | ! 3D loops with 1, following a 2/3D loop with 2 |
---|
| 190 | |
---|
| 191 | #define DO_3D_00_01nxt2(ks,ke) DO jk = ks, ke ; DO_2D_00_01nxt2 |
---|
| 192 | #define DO_3D_00_10nxt2(ks,ke) DO jk = ks, ke ; DO_2D_00_10nxt2 |
---|
| 193 | #define DO_3D_00_11nxt2(ks,ke) DO jk = ks, ke ; DO_2D_00_11nxt2 |
---|
| 194 | |
---|
| 195 | #define DO_3D_01_00nxt2(ks,ke) DO jk = ks, ke ; DO_2D_01_00nxt2 |
---|
| 196 | #define DO_3D_01_01nxt2(ks,ke) DO jk = ks, ke ; DO_2D_01_01nxt2 |
---|
| 197 | #define DO_3D_01_10nxt2(ks,ke) DO jk = ks, ke ; DO_2D_01_10nxt2 |
---|
| 198 | #define DO_3D_01_11nxt2(ks,ke) DO jk = ks, ke ; DO_2D_01_11nxt2 |
---|
| 199 | |
---|
| 200 | #define DO_3D_10_00nxt2(ks,ke) DO jk = ks, ke ; DO_2D_10_00nxt2 |
---|
| 201 | #define DO_3D_10_01nxt2(ks,ke) DO jk = ks, ke ; DO_2D_10_01nxt2 |
---|
| 202 | #define DO_3D_10_10nxt2(ks,ke) DO jk = ks, ke ; DO_2D_10_10nxt2 |
---|
| 203 | #define DO_3D_10_11nxt2(ks,ke) DO jk = ks, ke ; DO_2D_10_11nxt2 |
---|
| 204 | |
---|
| 205 | #define DO_3D_11_00nxt2(ks,ke) DO jk = ks, ke ; DO_2D_11_00nxt2 |
---|
| 206 | #define DO_3D_11_01nxt2(ks,ke) DO jk = ks, ke ; DO_2D_11_01nxt2 |
---|
| 207 | #define DO_3D_11_10nxt2(ks,ke) DO jk = ks, ke ; DO_2D_11_10nxt2 |
---|
| 208 | #define DO_3D_11_11nxt2(ks,ke) DO jk = ks, ke ; DO_2D_11_11nxt2 |
---|
| 209 | |
---|
| 210 | ! 3D loops with 2 |
---|
| 211 | |
---|
| 212 | #define DO_3D_11_12(ks,ke) DO jk = ks, ke ; DO_2D_11_12 |
---|
| 213 | #define DO_3D_11_21(ks,ke) DO jk = ks, ke ; DO_2D_11_21 |
---|
| 214 | #define DO_3D_11_22(ks,ke) DO jk = ks, ke ; DO_2D_11_22 |
---|
| 215 | |
---|
| 216 | #define DO_3D_12_11(ks,ke) DO jk = ks, ke ; DO_2D_12_11 |
---|
| 217 | #define DO_3D_12_12(ks,ke) DO jk = ks, ke ; DO_2D_12_12 |
---|
| 218 | #define DO_3D_12_21(ks,ke) DO jk = ks, ke ; DO_2D_12_21 |
---|
| 219 | #define DO_3D_12_22(ks,ke) DO jk = ks, ke ; DO_2D_12_22 |
---|
| 220 | |
---|
| 221 | #define DO_3D_21_11(ks,ke) DO jk = ks, ke ; DO_2D_21_11 |
---|
| 222 | #define DO_3D_21_12(ks,ke) DO jk = ks, ke ; DO_2D_21_12 |
---|
| 223 | #define DO_3D_21_21(ks,ke) DO jk = ks, ke ; DO_2D_21_21 |
---|
| 224 | #define DO_3D_21_22(ks,ke) DO jk = ks, ke ; DO_2D_21_22 |
---|
| 225 | |
---|
| 226 | #define DO_3D_22_11(ks,ke) DO jk = ks, ke ; DO_2D_22_11 |
---|
| 227 | #define DO_3D_22_12(ks,ke) DO jk = ks, ke ; DO_2D_22_12 |
---|
| 228 | #define DO_3D_22_21(ks,ke) DO jk = ks, ke ; DO_2D_22_21 |
---|
| 229 | #define DO_3D_22_22(ks,ke) DO jk = ks, ke ; DO_2D_22_22 |
---|
| 230 | |
---|
| 231 | ! 3D loops with increment with 1 |
---|
| 232 | |
---|
| 233 | #define DO_3DS_00_00(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_00_00 |
---|
| 234 | #define DO_3DS_00_01(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_00_01 |
---|
| 235 | #define DO_3DS_00_10(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_00_10 |
---|
| 236 | #define DO_3DS_00_11(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_00_11 |
---|
| 237 | |
---|
| 238 | #define DO_3DS_01_00(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_01_00 |
---|
| 239 | #define DO_3DS_01_01(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_01_01 |
---|
| 240 | #define DO_3DS_01_10(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_01_10 |
---|
| 241 | #define DO_3DS_01_11(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_01_11 |
---|
| 242 | |
---|
| 243 | #define DO_3DS_10_00(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_10_00 |
---|
| 244 | #define DO_3DS_10_01(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_10_01 |
---|
| 245 | #define DO_3DS_10_10(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_10_10 |
---|
| 246 | #define DO_3DS_10_11(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_10_11 |
---|
| 247 | |
---|
| 248 | #define DO_3DS_11_00(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_11_00 |
---|
| 249 | #define DO_3DS_11_01(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_11_01 |
---|
| 250 | #define DO_3DS_11_10(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_11_10 |
---|
| 251 | #define DO_3DS_11_11(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_11_11 |
---|
| 252 | |
---|
| 253 | ! 3D loops with increment with 1, following a 2/3D loop with 2 |
---|
| 254 | |
---|
| 255 | #define DO_3DS_00_01nxt2(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_00_01nxt2 |
---|
| 256 | #define DO_3DS_00_10nxt2(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_00_10nxt2 |
---|
| 257 | #define DO_3DS_00_11nxt2(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_00_11nxt2 |
---|
| 258 | |
---|
| 259 | #define DO_3DS_01_00nxt2(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_01_00nxt2 |
---|
| 260 | #define DO_3DS_01_01nxt2(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_01_01nxt2 |
---|
| 261 | #define DO_3DS_01_10nxt2(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_01_10nxt2 |
---|
| 262 | #define DO_3DS_01_11nxt2(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_01_11nxt2 |
---|
| 263 | |
---|
| 264 | #define DO_3DS_10_00nxt2(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_10_00nxt2 |
---|
| 265 | #define DO_3DS_10_01nxt2(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_10_01nxt2 |
---|
| 266 | #define DO_3DS_10_10nxt2(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_10_10nxt2 |
---|
| 267 | #define DO_3DS_10_11nxt2(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_10_11nxt2 |
---|
| 268 | |
---|
| 269 | #define DO_3DS_11_00nxt2(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_11_00nxt2 |
---|
| 270 | #define DO_3DS_11_01nxt2(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_11_01nxt2 |
---|
| 271 | #define DO_3DS_11_10nxt2(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_11_10nxt2 |
---|
| 272 | #define DO_3DS_11_11nxt2(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_11_11nxt2 |
---|
| 273 | |
---|
| 274 | ! 3D loops with increment with 2 |
---|
| 275 | |
---|
| 276 | #define DO_3DS_11_12(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_11_12 |
---|
| 277 | #define DO_3DS_11_21(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_11_21 |
---|
| 278 | #define DO_3DS_11_22(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_11_22 |
---|
| 279 | |
---|
| 280 | #define DO_3DS_12_11(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_12_11 |
---|
| 281 | #define DO_3DS_12_12(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_12_12 |
---|
| 282 | #define DO_3DS_12_21(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_12_21 |
---|
| 283 | #define DO_3DS_12_22(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_12_22 |
---|
| 284 | |
---|
| 285 | #define DO_3DS_21_11(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_21_11 |
---|
| 286 | #define DO_3DS_21_12(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_21_12 |
---|
| 287 | #define DO_3DS_21_21(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_21_21 |
---|
| 288 | #define DO_3DS_21_22(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_21_22 |
---|
| 289 | |
---|
| 290 | #define DO_3DS_22_11(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_22_11 |
---|
| 291 | #define DO_3DS_22_12(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_22_12 |
---|
| 292 | #define DO_3DS_22_21(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_22_21 |
---|
| 293 | #define DO_3DS_22_22(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_22_22 |
---|
| 294 | |
---|
[12341] | 295 | #define END_2D END DO ; END DO |
---|
| 296 | #define END_3D END DO ; END DO ; END DO |
---|