Changeset 12760
- Timestamp:
- 2020-04-17T08:53:28+02:00 (3 years ago)
- Location:
- NEMO/branches/2020/dev_r12558_HPC-08_epico_Extra_Halo/src
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/dev_r12558_HPC-08_epico_Extra_Halo/src/OCE/LBC/mppini.F90
r12586 r12760 8 8 !! 8.0 ! 1998-05 (M. Imbard, J. Escobar, L. Colombet ) SHMEM and MPI versions 9 9 !! NEMO 1.0 ! 2004-01 (G. Madec, J.M Molines) F90 : free form , north fold jpni > 1 10 !! 3.4 ! 2011-10 (A. C. Coward, NOCS & J. Donners, PRACE) add mpp_init_nfdcom11 !! 3. ! 2013-06 (I. Epicoco, S. Mocavero, CMCC) mpp_init_nfdcom: setup avoiding MPI communication10 !! 3.4 ! 2011-10 (A. C. Coward, NOCS & J. Donners, PRACE) add init_nfdcom 11 !! 3. ! 2013-06 (I. Epicoco, S. Mocavero, CMCC) init_nfdcom: setup avoiding MPI communication 12 12 !! 4.0 ! 2016-06 (G. Madec) use domain configuration file instead of bathymetry file 13 13 !! 4.0 ! 2017-06 (J.M. Molines, T. Lovato) merge of mppini and mppini_2 … … 15 15 16 16 !!---------------------------------------------------------------------- 17 !! mpp_init : Lay out the global domain over processors with/without land processor elimination 18 !! mpp_init_mask : Read global bathymetric information to facilitate land suppression 19 !! mpp_init_ioipsl : IOIPSL initialization in mpp 20 !! mpp_init_partition: Calculate MPP domain decomposition 21 !! factorise : Calculate the factors of the no. of MPI processes 22 !! mpp_init_nfdcom : Setup for north fold exchanges with explicit point-to-point messaging 17 !! mpp_init : Lay out the global domain over processors with/without land processor elimination 18 !! init_ioipsl: IOIPSL initialization in mpp 19 !! init_nfdcom: Setup for north fold exchanges with explicit point-to-point messaging 20 !! init_doloop: set the starting/ending indices of DO-loop used in do_loop_substitute 23 21 !!---------------------------------------------------------------------- 24 22 USE dom_oce ! ocean space and time domain … … 34 32 PRIVATE 35 33 36 PUBLIC mpp_init! called by opa.F9037 38 INTEGER :: numbot = -1! 'bottom_level' local logical unit39 INTEGER :: numbdy = -1! 'bdy_msk' local logical unit34 PUBLIC mpp_init ! called by opa.F90 35 36 INTEGER :: numbot = -1 ! 'bottom_level' local logical unit 37 INTEGER :: numbdy = -1 ! 'bdy_msk' local logical unit 40 38 41 39 !!---------------------------------------------------------------------- … … 66 64 jpj = jpjglo 67 65 jpk = jpkglo 68 jpim1 = jpi-1 ! inner domain indices 69 jpjm1 = jpj-1 ! " " 70 jpkm1 = MAX( 1, jpk-1 ) ! " " 66 jpim1 = jpi-1 ! inner domain indices 67 jpjm1 = jpj-1 ! " " 68 jpkm1 = MAX( 1, jpk-1 ) ! " " 69 ! 70 CALL init_doloop ! set start/end indices or do-loop depending on the halo width value (nn_hls) 71 ! 71 72 jpij = jpi*jpj 72 73 jpni = 1 … … 591 592 jpi = nlci 592 593 jpj = nlcj 593 jpk = jpkglo 594 jpk = jpkglo ! third dim 594 595 #if defined key_agrif 595 596 ! simple trick to use same vertical grid as parent but different number of levels: … … 598 599 !!$ IF(.NOT.Agrif_Root()) jpkglo = Agrif_Parent( jpkglo ) 599 600 #endif 600 jpim1 = jpi-1 ! inner domain indices 601 jpjm1 = jpj-1 ! " " 602 jpkm1 = MAX( 1, jpk-1 ) ! " " 603 jpij = jpi*jpj ! jpi x j 601 ! 602 CALL init_doloop ! set start/end indices of do-loop, depending on the halo width value (nn_hls) 603 ! 604 jpim1 = jpi-1 ! inner domain indices 605 jpjm1 = jpj-1 ! " " 606 jpkm1 = MAX( 1, jpk-1 ) ! " " 607 jpij = jpi*jpj ! jpi x j 604 608 DO jproc = 1, jpnij 605 609 ii = iin(jproc) … … 691 695 ENDIF 692 696 ! 693 CALL mpp_init_ioipsl ! Prepare NetCDF output file (if necessary)697 CALL init_ioipsl ! Prepare NetCDF output file (if necessary) 694 698 ! 695 699 IF (( jperio >= 3 .AND. jperio <= 6 .AND. jpni > 1 ).AND.( ln_nnogather )) THEN 696 CALL mpp_init_nfdcom ! northfold neighbour lists700 CALL init_nfdcom ! northfold neighbour lists 697 701 IF (llwrtlay) THEN 698 702 WRITE(inum,*) … … 1165 1169 1166 1170 1167 SUBROUTINE mpp_init_ioipsl1168 !!---------------------------------------------------------------------- 1169 !! *** ROUTINE mpp_init_ioipsl ***1171 SUBROUTINE init_ioipsl 1172 !!---------------------------------------------------------------------- 1173 !! *** ROUTINE init_ioipsl *** 1170 1174 !! 1171 1175 !! ** Purpose : … … 1200 1204 IF(lwp) THEN 1201 1205 WRITE(numout,*) 1202 WRITE(numout,*) 'mpp _init_ioipsl : iloc = ', iloc (1), iloc (2)1206 WRITE(numout,*) 'mpp init_ioipsl : iloc = ', iloc (1), iloc (2) 1203 1207 WRITE(numout,*) '~~~~~~~~~~~~~~~ iabsf = ', iabsf(1), iabsf(2) 1204 1208 WRITE(numout,*) ' ihals = ', ihals(1), ihals(2) … … 1208 1212 CALL flio_dom_set ( jpnij, nproc, idid, iglo, iloc, iabsf, iabsl, ihals, ihale, 'BOX', nidom) 1209 1213 ! 1210 END SUBROUTINE mpp_init_ioipsl1211 1212 1213 SUBROUTINE mpp_init_nfdcom1214 !!---------------------------------------------------------------------- 1215 !! *** ROUTINE mpp_init_nfdcom ***1214 END SUBROUTINE init_ioipsl 1215 1216 1217 SUBROUTINE init_nfdcom 1218 !!---------------------------------------------------------------------- 1219 !! *** ROUTINE init_nfdcom *** 1216 1220 !! ** Purpose : Setup for north fold exchanges with explicit 1217 1221 !! point-to-point messaging … … 1263 1267 l_north_nogather = .TRUE. 1264 1268 ! 1265 END SUBROUTINE mpp_init_nfdcom 1266 1269 END SUBROUTINE init_nfdcom 1267 1270 1268 1271 #endif 1269 1272 1273 SUBROUTINE init_doloop 1274 !!---------------------------------------------------------------------- 1275 !! *** ROUTINE init_doloop *** 1276 !! 1277 !! ** Purpose : set the starting/ending indices of DO-loop 1278 !! These indices are used in do_loop_substitute.h90 1279 !!---------------------------------------------------------------------- 1280 ! 1281 IF( nn_hls == 1 ) THEN !* halo size of 1 1282 ! 1283 nIs_0 = 2 ; nIs_1 = 1 ; nIs_1nxt2 = nIs_0 ; nIs_2 = nIs_1 1284 nJs_0 = 2 ; nJs_1 = 1 ; nJs_1nxt2 = nJs_0 ; nJs_2 = nJs_1 1285 ! 1286 nIe_0 = jpi-1 ; nIe_1 = jpi ; nIe_1nxt2 = nIe_0 ; nIe_2 = nIe_1 1287 nJe_0 = jpj-1 ; nJe_1 = jpj ; nJe_1nxt2 = nJe_0 ; nJe_2 = nJe_1 1288 ! 1289 ELSEIF( nn_hls == 2 ) THEN !* halo size of 2 1290 ! 1291 nIs_0 = 3 ; nIs_1 = 2 ; nIs_1nxt2 = nIs_1 ; nIs_2 = 1 1292 nJs_0 = 3 ; nJs_1 = 2 ; nJs_1nxt2 = nJs_1 ; nJs_2 = 1 1293 ! 1294 nIe_0 = jpi-2 ; nIe_1 = jpi-1 ; nIe_1nxt2 = nIe_1 ; nIe_2 = jpi 1295 nJe_0 = jpj-2 ; nJe_1 = jpj-1 ; nJe_1nxt2 = nJe_1 ; nJe_2 = jpj 1296 ! 1297 ELSE !* unexpected halo size 1298 CALL ctl_stop( 'STOP', 'ini_mpp: wrong value of halo size : nn_hls= 1 or 2 only !') 1299 ENDIF 1300 ! 1301 END SUBROUTINE init_doloop 1302 1270 1303 !!====================================================================== 1271 1304 END MODULE mppini -
NEMO/branches/2020/dev_r12558_HPC-08_epico_Extra_Halo/src/OCE/do_loop_substitute.h90
r12719 r12760 50 50 ! includes the possibility of strides for which an extra set of DO_3DS macros are defined. 51 51 ! 52 ! In the following definitions the inner PE domain is defined by start indices of (_ __kIs_, __kJs_) and end indices of (__kIe_, __kJe_)53 ! The following macros are defined just below: _ __kIs_, __kJs_, ___kIsm1_, __kJsm1_, ___kIe_, __kJe_, ___kIep1_, __kJep1_.52 ! In the following definitions the inner PE domain is defined by start indices of (_nIs_0, nJs_0) and end indices of (nIe_0, nJs_0) 53 ! The following macros are defined just below: _nIs_0, nJs_0, _nIs_1, nJs_1, _nIe_0, nJs_0, _nIe_1, nJe_1. 54 54 ! These names are chosen to, hopefully, avoid any future, unintended matches elsewhere in the code. 55 55 ! 56 !!gm changes ; 57 ! 58 ! -0- fortran code : defined in par_oce.F90 the folowwing valiables : 59 !!# 60 !!# INTEGER, PUBLIC :: nIs_0, nIs_1, nIs_2 !: start I-index (_0: no halo, _1 & _2: 1 & 2-halos) 61 !!# INTEGER, PUBLIC :: nIe_0, nIe_1, nIe_2 !: end I-index (_0: no halo, _1 & _2: 1 & 2-halos) 62 !!# INTEGER, PUBLIC :: nJs_0, nJs_1, nJs_2 !: start J-index (_0: no halo, _1 & _2: 1 & 2-halos) 63 !!# INTEGER, PUBLIC :: nJe_0, nJe_1, nJe_2 !: 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 !!# nIs_0 = 2 ; nIs_1 = 1 ; nIs_2 = nIs_1 79 !!# nJs_0 = nIs_0 ; nJs_1 = nIs_1 ; nJs_2 = nIs_1 80 !!# ! 81 !!# nIe_0 = jpi-1 ; nJe_1 = jpi ; nIe_2 = nIe_1 82 !!# nJe_0 = jpj-1 ; nJe_1 = jpj-1 ; nJe_2 = nIe_1 83 !!# ! 84 !!# ELSEIF( nn_hls == 2 ) THEN !* halo size of 2 85 !!# ! 86 !!# nIs_0 = 3 ; nIs_1 = 2 ; nIs_2 = 1 87 !!# nJs_0 = nIs_0 ; nJs_1 = nIs_1 ; nJs_2 = nIs_2 88 !!# ! 89 !!# nIe_0 = jpi-2 ; nJe_1 = jpi-1 ; nIe_2 = jpi 90 !!# nJe_0 = jpj-2 ; nJe_1 = jpj-1 ; nJe_2 = 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 : 100 ! 56 101 #endif 57 #define __kIs_ 2 58 #define __kJs_ 2 59 #define __kIsm1_ 1 60 #define __kJsm1_ 1 61 62 #define __kIe_ jpi-1 63 #define __kJe_ jpj-1 64 #define __kIep1_ jpi 65 #define __kJep1_ jpj 66 67 #define DO_2D_00_00 DO jj = __kJs_, __kJe_ ; DO ji = __kIs_, __kIe_ 68 #define DO_2D_00_01 DO jj = __kJs_, __kJe_ ; DO ji = __kIs_, __kIep1_ 69 #define DO_2D_00_10 DO jj = __kJs_, __kJe_ ; DO ji = __kIsm1_, __kIe_ 70 #define DO_2D_00_11 DO jj = __kJs_, __kJe_ ; DO ji = __kIsm1_, __kIep1_ 71 72 #define DO_2D_01_00 DO jj = __kJs_, __kJep1_ ; DO ji = __kIs_, __kIe_ 73 #define DO_2D_01_01 DO jj = __kJs_, __kJep1_ ; DO ji = __kIs_, __kIep1_ 74 #define DO_2D_01_10 DO jj = __kJs_, __kJep1_ ; DO ji = __kIsm1_, __kIe_ 75 #define DO_2D_01_11 DO jj = __kJs_, __kJep1_ ; DO ji = __kIsm1_, __kIep1_ 76 77 #define DO_2D_10_00 DO jj = __kJsm1_, __kJe_ ; DO ji = __kIs_, __kIe_ 78 #define DO_2D_10_10 DO jj = __kJsm1_, __kJe_ ; DO ji = __kIsm1_, __kIe_ 79 #define DO_2D_10_11 DO jj = __kJsm1_, __kJe_ ; DO ji = __kIsm1_, __kIep1_ 80 81 #define DO_2D_11_00 DO jj = __kJsm1_, __kJep1_ ; DO ji = __kIs_, __kIe_ 82 #define DO_2D_11_01 DO jj = __kJsm1_, __kJep1_ ; DO ji = __kIs_, __kIep1_ 83 #define DO_2D_11_10 DO jj = __kJsm1_, __kJep1_ ; DO ji = __kIsm1_, __kIe_ 84 #define DO_2D_11_11 DO jj = __kJsm1_, __kJep1_ ; DO ji = __kIsm1_, __kIep1_ 85 86 #define DO_3D_00_00(ks,ke) DO jk = ks, ke ; DO_2D_00_00 87 #define DO_3D_00_10(ks,ke) DO jk = ks, ke ; DO_2D_00_10 88 89 #define DO_3D_01_01(ks,ke) DO jk = ks, ke ; DO_2D_01_01 90 91 #define DO_3D_10_00(ks,ke) DO jk = ks, ke ; DO_2D_10_00 92 #define DO_3D_10_10(ks,ke) DO jk = ks, ke ; DO_2D_10_10 93 #define DO_3D_10_11(ks,ke) DO jk = ks, ke ; DO_2D_10_11 94 95 #define DO_3D_11_11(ks,ke) DO jk = ks, ke ; DO_2D_11_11 96 97 #define DO_3DS_00_00(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_00_00 98 #define DO_3DS_01_01(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_01_01 99 #define DO_3DS_10_10(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_10_10 100 #define DO_3DS_11_11(ks,ke,ki) DO jk = ks, ke, ki ; DO_2D_11_11 101 102 103 ! 2D loops with 1 104 105 #define DO_2D_00_00 DO jj = nJs_0, nJe_0 ; DO ji = nIs_0, nIe_0 106 #define DO_2D_00_01 DO jj = nJs_0, nJe_0 ; DO ji = nIs_0, nIe_1 107 #define DO_2D_00_10 DO jj = nJs_0, nJe_0 ; DO ji = nIs_1, nIe_0 108 #define DO_2D_00_11 DO jj = nJs_0, nJe_0 ; DO ji = nIs_1, nIe_1 109 110 #define DO_2D_01_00 DO jj = nJs_0, nJe_1 ; DO ji = nIs_0, nIe_0 111 #define DO_2D_01_01 DO jj = nJs_0, nJe_1 ; DO ji = nIs_0, nIe_1 112 #define DO_2D_01_10 DO jj = nJs_0, nJe_1 ; DO ji = nIs_1, nIe_0 113 #define DO_2D_01_11 DO jj = nJs_0, nJe_1 ; DO ji = nIs_1, nIe_1 114 115 #define DO_2D_10_00 DO jj = nJs_1, nJe_0 ; DO ji = nIs_0, nIe_0 116 #define DO_2D_10_01 DO jj = nJs_1, nJe_0 ; DO ji = nIs_0, nIe_1 ! not used ? 117 #define DO_2D_10_10 DO jj = nJs_1, nJe_0 ; DO ji = nIs_1, nIe_0 118 #define DO_2D_10_11 DO jj = nJs_1, nJe_0 ; DO ji = nIs_1, nIe_1 119 120 #define DO_2D_11_00 DO jj = nJs_1, nJe_1 ; DO ji = nIs_0, nIe_0 121 #define DO_2D_11_01 DO jj = nJs_1, nJe_1 ; DO ji = nIs_0, nIe_1 122 #define DO_2D_11_10 DO jj = nJs_1, nJe_1 ; DO ji = nIs_1, nIe_0 123 #define DO_2D_11_11 DO jj = nJs_1, nJe_1 ; DO ji = nIs_1, nIe_1 124 125 ! 2D loops with 1 following a 2/3D loop with 2 126 127 #define DO_2D_00_01nxt2 DO jj = nJs_0 , nJe_0 ; DO ji = nIs_0 , nIe_1nxt2 128 #define DO_2D_00_10nxt2 DO jj = nJs_0 , nJe_0 ; DO ji = nIs_1nxt2, nIe_0 129 #define DO_2D_00_11nxt2 DO jj = nJs_0 , nJe_0 ; DO ji = nIs_1nxt2, nIe_1nxt2 130 131 #define DO_2D_01_00nxt2 DO jj = nJs_0 , nJe_1nxt2 ; DO ji = nIs_0 , nIe_0 132 #define DO_2D_01_01nxt2 DO jj = nJs_0 , nJe_1nxt2 ; DO ji = nIs_0 , nIe_1nxt2 133 #define DO_2D_01_10nxt2 DO jj = nJs_0 , nJe_1nxt2 ; DO ji = nIs_1nxt2, nIe_0 134 #define DO_2D_01_11nxt2 DO jj = nJs_0 , nJe_1nxt2 ; DO ji = nIs_1nxt2, nIe_1nxt2 135 136 #define DO_2D_10_00nxt2 DO jj = nJs_1nxt2, nJe_0 ; DO ji = nIs_0 , nIe_0 137 #define DO_2D_10_01nxt2 DO jj = nJs_1nxt2, nJe_0 ; DO ji = nIs_0 , nIe_1nxt2 ! not used ? 138 #define DO_2D_10_10nxt2 DO jj = nJs_1nxt2, nJe_0 ; DO ji = nIs_1nxt2, nIe_0 139 #define DO_2D_10_11nxt2 DO jj = nJs_1nxt2, nJe_0 ; DO ji = nIs_1nxt2, nIe_1nxt2 140 141 #define DO_2D_11_00nxt2 DO jj = nJs_1nxt2, nJe_1nxt2 ; DO ji = nIs_0 , nIe_0 142 #define DO_2D_11_01nxt2 DO jj = nJs_1nxt2, nJe_1nxt2 ; DO ji = nIs_0 , nIe_1nxt2 143 #define DO_2D_11_10nxt2 DO jj = nJs_1nxt2, nJe_1nxt2 ; DO ji = nIs_1nxt2, nIe_0 144 #define DO_2D_11_11nxt2 DO jj = nJs_1nxt2, nJe_1nxt2 ; DO ji = nIs_1nxt2, nIe_1nxt2 145 146 ! 2D loops with 2 147 148 #define DO_2D_11_12 DO jj = nJs_1nxt2, nJe_1nxt2 ; DO ji = nIs_1nxt2, nIe_2 149 #define DO_2D_11_21 DO jj = nJs_1nxt2, nJe_1nxt2 ; DO ji = nIs_2 , nIe_1nxt2 150 #define DO_2D_11_22 DO jj = nJs_1nxt2, nJe_1nxt2 ; DO ji = nIs_2 , nIe_2 151 152 #define DO_2D_12_11 DO jj = nJs_1nxt2, nJe_2 ; DO ji = nIs_1nxt2, nIe_1nxt2 153 #define DO_2D_12_12 DO jj = nJs_1nxt2, nJe_2 ; DO ji = nIs_1nxt2, nIe_2 154 #define DO_2D_12_21 DO jj = nJs_1nxt2, nJe_2 ; DO ji = nIs_2 , nIe_1nxt2 155 #define DO_2D_12_22 DO jj = nJs_1nxt2, nJe_2 ; DO ji = nIs_2 , nIe_2 156 157 #define DO_2D_21_11 DO jj = nJs_2 , nJe_1nxt2 ; DO ji = nIs_1nxt2, nIe_1nxt2 158 #define DO_2D_21_12 DO jj = nJs_2 , nJe_1nxt2 ; DO ji = nIs_1nxt2, nIe_2 ! not used ? 159 #define DO_2D_21_21 DO jj = nJs_2 , nJe_1nxt2 ; DO ji = nIs_2 , nIe_1nxt2 160 #define DO_2D_21_22 DO jj = nJs_2 , nJe_1nxt2 ; DO ji = nIs_2 , nIe_2 161 162 #define DO_2D_22_11 DO jj = nJs_2 , nJe_2 ; DO ji = nIs_1nxt2, nIe_1nxt2 163 #define DO_2D_22_12 DO jj = nJs_2 , nJe_2 ; DO ji = nIs_1nxt2, nIe_2 164 #define DO_2D_22_21 DO jj = nJs_2 , nJe_2 ; DO ji = nIs_2 , nIe_1nxt2 165 #define DO_2D_22_22 DO jj = nJs_2 , nJe_2 ; DO ji = nIs_2 , nIe_2 166 167 ! 3D loops with 1 168 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 102 295 #define END_2D END DO ; END DO 103 296 #define END_3D END DO ; END DO ; END DO -
NEMO/branches/2020/dev_r12558_HPC-08_epico_Extra_Halo/src/OCE/par_oce.F90
r12719 r12760 78 78 INTEGER, PUBLIC, PARAMETER :: jpr2di = 0 !: number of columns for extra outer halo 79 79 INTEGER, PUBLIC, PARAMETER :: jpr2dj = 0 !: number of rows for extra outer halo 80 INTEGER, PUBLIC :: nn_hls !: halo width (applies to both rows and columns) 80 81 ! halo with and starting/inding DO-loop indices 82 INTEGER, PUBLIC :: nn_hls !: halo width (applies to both rows and columns) 83 INTEGER, PUBLIC :: nIs_0, nIs_1, nIs_1nxt2, nIs_2 !: start I-index (_0: without halo, _1 or _2: with 1 or 2 halos) 84 INTEGER, PUBLIC :: nIe_0, nIe_1, nIe_1nxt2, nIe_2 !: end I-index (_0: without halo, _1 or _2: with 1 or 2 halos) 85 INTEGER, PUBLIC :: nJs_0, nJs_1, nJs_1nxt2, nJs_2 !: start J-index (_0: without halo, _1 or _2: with 1 or 2 halos) 86 INTEGER, PUBLIC :: nJe_0, nJe_1, nJe_1nxt2, nJe_2 !: end J-index (_0: without halo, _1 or _2: with 1 or 2 halos) 81 87 82 88 !!---------------------------------------------------------------------- -
NEMO/branches/2020/dev_r12558_HPC-08_epico_Extra_Halo/src/TOP/oce_trc.F90
r12489 r12760 18 18 USE par_oce , ONLY : jp_tem => jp_tem !: indice for temperature 19 19 USE par_oce , ONLY : jp_sal => jp_sal !: indice for salinity 20 USE par_oce , ONLY : nn_hls => nn_hls !: 21 USE par_oce , ONLY : nIs_0 => nIs_0 !: 22 USE par_oce , ONLY : nJs_0 => nJs_0 !: 23 USE par_oce , ONLY : nIe_0 => nIe_0 !: 24 USE par_oce , ONLY : nJe_0 => nJe_0 !: 25 USE par_oce , ONLY : nIs_1 => nIs_1 !: 26 USE par_oce , ONLY : nJs_1 => nJs_1 !: 27 USE par_oce , ONLY : nIe_1 => nIe_1 !: 28 USE par_oce , ONLY : nJe_1 => nJe_1 !: 29 USE par_oce , ONLY : nIs_1nxt2 => nIs_1nxt2 !: 30 USE par_oce , ONLY : nJs_1nxt2 => nJs_1nxt2 !: 31 USE par_oce , ONLY : nIe_1nxt2 => nIe_1nxt2 !: 32 USE par_oce , ONLY : nJe_1nxt2 => nJe_1nxt2 !: 33 USE par_oce , ONLY : nIs_2 => nIs_2 !: 34 USE par_oce , ONLY : nJs_2 => nJs_2 !: 35 USE par_oce , ONLY : nIe_2 => nIe_2 !: 36 USE par_oce , ONLY : nJe_2 => nJe_2 !: 20 37 21 38 USE in_out_manager !* IO manager *
Note: See TracChangeset
for help on using the changeset viewer.