Changeset 13295 for NEMO/trunk/src/OCE/do_loop_substitute.h90
- Timestamp:
- 2020-07-10T20:24:21+02:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk/src/OCE/do_loop_substitute.h90
r13286 r13295 47 47 ! END_2D 48 48 ! 49 ! similar conventions apply to the 3D loops macros. jk loop limits are retained through macro arguments and are not restricted. This 50 ! includes the possibility of strides for which an extra set of DO_3DS macros are defined. 49 ! similar conventions apply to the 3D loops macros. jk loop limits are retained through macro arguments 50 ! and are not restricted. This includes the possibility of strides for which an extra set of DO_3DS 51 ! macros are defined. 51 52 ! 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. 54 ! These names are chosen to, hopefully, avoid any future, unintended matches elsewhere in the code. 53 ! In the following definitions the inner PE domain is defined by start indices of (Nis0, Njs0) and end 54 ! indices of (Nie0, Nje0) where: 55 55 ! 56 !!gm changes ; 57 ! 58 ! -0- fortran code : defined in par_oce.F90 the folowwing valiables : 59 !!# 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) 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 !!# ! 78 !!# Nis0 = 2 ; Nis1 = 1 ; Nis2 = Nis1 79 !!# Njs0 = Nis0 ; Njs1 = Nis1 ; Njs2 = Nis1 80 !!# ! 81 !!# Nie0 = jpi-1 ; Nje1 = jpi ; Nie2 = Nie1 82 !!# Nje0 = jpj-1 ; Nje1 = jpj-1 ; Nje2 = Nie1 83 !!# ! 84 !!# ELSEIF( nn_hls == 2 ) THEN !* halo size of 2 85 !!# ! 86 !!# Nis0 = 3 ; Nis1 = 2 ; Nis2 = 1 87 !!# Njs0 = Nis0 ; Njs1 = Nis1 ; Njs2 = Nis2 88 !!# ! 89 !!# Nie0 = jpi-2 ; Nje1 = jpi-1 ; Nie2 = jpi 90 !!# Nje0 = jpj-2 ; Nje1 = jpj-1 ; Nje2 = jpj 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 : 56 ! Nis0 = 1 + nn_hls Njs0 = 1 + nn_hls 57 ! Nie0 = jpi - nn_hls Nje0 = jpj - nn_hls 100 58 ! 101 59 #endif 102 60 103 ! 2D loops with 1 61 #define DO_2D(B, T, L, R) DO jj = Njs0-(B), Nje0+(T) ; DO ji = Nis0-(L), Nie0+(R) 104 62 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 109 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 114 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 119 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 63 #define DO_3D(B, T, L, R, ks, ke) DO jk = ks, ke ; DO_2D(B, T, L, R) 124 64 125 ! 2D loops with 1 following a 2/3D loop with 2 65 #define DO_3DS(B, T, L, R, ks, ke, ki) DO jk = ks, ke, ki ; DO_2D(B, T, L, R) 126 66 127 #define DO_2D_00_01nxt2 DO jj = Njs0 , Nje0 ; DO ji = Nis0 , Nie1nxt2128 #define DO_2D_00_10nxt2 DO jj = Njs0 , Nje0 ; DO ji = Nis1nxt2, Nie0129 #define DO_2D_00_11nxt2 DO jj = Njs0 , Nje0 ; DO ji = Nis1nxt2, Nie1nxt2130 131 #define DO_2D_01_00nxt2 DO jj = Njs0 , Nje1nxt2 ; DO ji = Nis0 , Nie0132 #define DO_2D_01_01nxt2 DO jj = Njs0 , Nje1nxt2 ; DO ji = Nis0 , Nie1nxt2133 #define DO_2D_01_10nxt2 DO jj = Njs0 , Nje1nxt2 ; DO ji = Nis1nxt2, Nie0134 #define DO_2D_01_11nxt2 DO jj = Njs0 , Nje1nxt2 ; DO ji = Nis1nxt2, Nie1nxt2135 136 #define DO_2D_10_00nxt2 DO jj = Njs1nxt2, Nje0 ; DO ji = Nis0 , Nie0137 #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, Nie0139 #define DO_2D_10_11nxt2 DO jj = Njs1nxt2, Nje0 ; DO ji = Nis1nxt2, Nie1nxt2140 141 #define DO_2D_11_00nxt2 DO jj = Njs1nxt2, Nje1nxt2 ; DO ji = Nis0 , Nie0142 #define DO_2D_11_01nxt2 DO jj = Njs1nxt2, Nje1nxt2 ; DO ji = Nis0 , Nie1nxt2143 #define DO_2D_11_10nxt2 DO jj = Njs1nxt2, Nje1nxt2 ; DO ji = Nis1nxt2, Nie0144 #define DO_2D_11_11nxt2 DO jj = Njs1nxt2, Nje1nxt2 ; DO ji = Nis1nxt2, Nie1nxt2145 146 ! 2D loops with 2147 148 #define DO_2D_11_12 DO jj = Njs1nxt2, Nje1nxt2 ; DO ji = Nis1nxt2, Nie2149 #define DO_2D_11_21 DO jj = Njs1nxt2, Nje1nxt2 ; DO ji = Nis2 , Nie1nxt2150 #define DO_2D_11_22 DO jj = Njs1nxt2, Nje1nxt2 ; DO ji = Nis2 , Nie2151 152 #define DO_2D_12_11 DO jj = Njs1nxt2, Nje2 ; DO ji = Nis1nxt2, Nie1nxt2153 #define DO_2D_12_12 DO jj = Njs1nxt2, Nje2 ; DO ji = Nis1nxt2, Nie2154 #define DO_2D_12_21 DO jj = Njs1nxt2, Nje2 ; DO ji = Nis2 , Nie1nxt2155 #define DO_2D_12_22 DO jj = Njs1nxt2, Nje2 ; DO ji = Nis2 , Nie2156 157 #define DO_2D_21_11 DO jj = Njs2 , Nje1nxt2 ; DO ji = Nis1nxt2, Nie1nxt2158 #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 , Nie1nxt2160 #define DO_2D_21_22 DO jj = Njs2 , Nje1nxt2 ; DO ji = Nis2 , Nie2161 162 #define DO_2D_22_11 DO jj = Njs2 , Nje2 ; DO ji = Nis1nxt2, Nie1nxt2163 #define DO_2D_22_12 DO jj = Njs2 , Nje2 ; DO ji = Nis1nxt2, Nie2164 #define DO_2D_22_21 DO jj = Njs2 , Nje2 ; DO ji = Nis2 , Nie1nxt2165 #define DO_2D_22_22 DO jj = Njs2 , Nje2 ; DO ji = Nis2 , Nie2166 167 ! 3D loops with 1168 169 #define DO_3D_00_00(ks,ke) DO jk = ks, ke ; DO_2D_00_00170 #define DO_3D_00_01(ks,ke) DO jk = ks, ke ; DO_2D_00_01171 #define DO_3D_00_10(ks,ke) DO jk = ks, ke ; DO_2D_00_10172 #define DO_3D_00_11(ks,ke) DO jk = ks, ke ; DO_2D_00_11173 174 #define DO_3D_01_00(ks,ke) DO jk = ks, ke ; DO_2D_01_00175 #define DO_3D_01_01(ks,ke) DO jk = ks, ke ; DO_2D_01_01176 #define DO_3D_01_10(ks,ke) DO jk = ks, ke ; DO_2D_01_10177 #define DO_3D_01_11(ks,ke) DO jk = ks, ke ; DO_2D_01_11178 179 #define DO_3D_10_00(ks,ke) DO jk = ks, ke ; DO_2D_10_00180 #define DO_3D_10_01(ks,ke) DO jk = ks, ke ; DO_2D_10_01181 #define DO_3D_10_10(ks,ke) DO jk = ks, ke ; DO_2D_10_10182 #define DO_3D_10_11(ks,ke) DO jk = ks, ke ; DO_2D_10_11183 184 #define DO_3D_11_00(ks,ke) DO jk = ks, ke ; DO_2D_11_00185 #define DO_3D_11_01(ks,ke) DO jk = ks, ke ; DO_2D_11_01186 #define DO_3D_11_10(ks,ke) DO jk = ks, ke ; DO_2D_11_10187 #define DO_3D_11_11(ks,ke) DO jk = ks, ke ; DO_2D_11_11188 189 ! 3D loops with 1, following a 2/3D loop with 2190 191 #define DO_3D_00_01nxt2(ks,ke) DO jk = ks, ke ; DO_2D_00_01nxt2192 #define DO_3D_00_10nxt2(ks,ke) DO jk = ks, ke ; DO_2D_00_10nxt2193 #define DO_3D_00_11nxt2(ks,ke) DO jk = ks, ke ; DO_2D_00_11nxt2194 195 #define DO_3D_01_00nxt2(ks,ke) DO jk = ks, ke ; DO_2D_01_00nxt2196 #define DO_3D_01_01nxt2(ks,ke) DO jk = ks, ke ; DO_2D_01_01nxt2197 #define DO_3D_01_10nxt2(ks,ke) DO jk = ks, ke ; DO_2D_01_10nxt2198 #define DO_3D_01_11nxt2(ks,ke) DO jk = ks, ke ; DO_2D_01_11nxt2199 200 #define DO_3D_10_00nxt2(ks,ke) DO jk = ks, ke ; DO_2D_10_00nxt2201 #define DO_3D_10_01nxt2(ks,ke) DO jk = ks, ke ; DO_2D_10_01nxt2202 #define DO_3D_10_10nxt2(ks,ke) DO jk = ks, ke ; DO_2D_10_10nxt2203 #define DO_3D_10_11nxt2(ks,ke) DO jk = ks, ke ; DO_2D_10_11nxt2204 205 #define DO_3D_11_00nxt2(ks,ke) DO jk = ks, ke ; DO_2D_11_00nxt2206 #define DO_3D_11_01nxt2(ks,ke) DO jk = ks, ke ; DO_2D_11_01nxt2207 #define DO_3D_11_10nxt2(ks,ke) DO jk = ks, ke ; DO_2D_11_10nxt2208 #define DO_3D_11_11nxt2(ks,ke) DO jk = ks, ke ; DO_2D_11_11nxt2209 210 ! 3D loops with 2211 212 #define DO_3D_11_12(ks,ke) DO jk = ks, ke ; DO_2D_11_12213 #define DO_3D_11_21(ks,ke) DO jk = ks, ke ; DO_2D_11_21214 #define DO_3D_11_22(ks,ke) DO jk = ks, ke ; DO_2D_11_22215 216 #define DO_3D_12_11(ks,ke) DO jk = ks, ke ; DO_2D_12_11217 #define DO_3D_12_12(ks,ke) DO jk = ks, ke ; DO_2D_12_12218 #define DO_3D_12_21(ks,ke) DO jk = ks, ke ; DO_2D_12_21219 #define DO_3D_12_22(ks,ke) DO jk = ks, ke ; DO_2D_12_22220 221 #define DO_3D_21_11(ks,ke) DO jk = ks, ke ; DO_2D_21_11222 #define DO_3D_21_12(ks,ke) DO jk = ks, ke ; DO_2D_21_12223 #define DO_3D_21_21(ks,ke) DO jk = ks, ke ; DO_2D_21_21224 #define DO_3D_21_22(ks,ke) DO jk = ks, ke ; DO_2D_21_22225 226 #define DO_3D_22_11(ks,ke) DO jk = ks, ke ; DO_2D_22_11227 #define DO_3D_22_12(ks,ke) DO jk = ks, ke ; DO_2D_22_12228 #define DO_3D_22_21(ks,ke) DO jk = ks, ke ; DO_2D_22_21229 #define DO_3D_22_22(ks,ke) DO jk = ks, ke ; DO_2D_22_22230 231 ! 3D loops with increment with 1232 233 #define DO_3DS_00_00(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_00_00234 #define DO_3DS_00_01(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_00_01235 #define DO_3DS_00_10(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_00_10236 #define DO_3DS_00_11(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_00_11237 238 #define DO_3DS_01_00(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_01_00239 #define DO_3DS_01_01(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_01_01240 #define DO_3DS_01_10(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_01_10241 #define DO_3DS_01_11(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_01_11242 243 #define DO_3DS_10_00(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_10_00244 #define DO_3DS_10_01(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_10_01245 #define DO_3DS_10_10(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_10_10246 #define DO_3DS_10_11(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_10_11247 248 #define DO_3DS_11_00(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_11_00249 #define DO_3DS_11_01(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_11_01250 #define DO_3DS_11_10(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_11_10251 #define DO_3DS_11_11(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_11_11252 253 ! 3D loops with increment with 1, following a 2/3D loop with 2254 255 #define DO_3DS_00_01nxt2(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_00_01nxt2256 #define DO_3DS_00_10nxt2(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_00_10nxt2257 #define DO_3DS_00_11nxt2(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_00_11nxt2258 259 #define DO_3DS_01_00nxt2(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_01_00nxt2260 #define DO_3DS_01_01nxt2(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_01_01nxt2261 #define DO_3DS_01_10nxt2(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_01_10nxt2262 #define DO_3DS_01_11nxt2(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_01_11nxt2263 264 #define DO_3DS_10_00nxt2(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_10_00nxt2265 #define DO_3DS_10_01nxt2(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_10_01nxt2266 #define DO_3DS_10_10nxt2(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_10_10nxt2267 #define DO_3DS_10_11nxt2(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_10_11nxt2268 269 #define DO_3DS_11_00nxt2(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_11_00nxt2270 #define DO_3DS_11_01nxt2(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_11_01nxt2271 #define DO_3DS_11_10nxt2(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_11_10nxt2272 #define DO_3DS_11_11nxt2(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_11_11nxt2273 274 ! 3D loops with increment with 2275 276 #define DO_3DS_11_12(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_11_12277 #define DO_3DS_11_21(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_11_21278 #define DO_3DS_11_22(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_11_22279 280 #define DO_3DS_12_11(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_12_11281 #define DO_3DS_12_12(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_12_12282 #define DO_3DS_12_21(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_12_21283 #define DO_3DS_12_22(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_12_22284 285 #define DO_3DS_21_11(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_21_11286 #define DO_3DS_21_12(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_21_12287 #define DO_3DS_21_21(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_21_21288 #define DO_3DS_21_22(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_21_22289 290 #define DO_3DS_22_11(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_22_11291 #define DO_3DS_22_12(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_22_12292 #define DO_3DS_22_21(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_22_21293 #define DO_3DS_22_22(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_22_22294 295 67 #define END_2D END DO ; END DO 296 68 #define END_3D END DO ; END DO ; END DO
Note: See TracChangeset
for help on using the changeset viewer.