Changeset 15037 for NEMO/trunk/src
- Timestamp:
- 2021-06-21T17:16:11+02:00 (3 years ago)
- Location:
- NEMO/trunk/src/ICE
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk/src/ICE/icedyn_adv_pra.F90
r15033 r15037 1170 1170 REAL(wp), DIMENSION(:,:,:), INTENT(in ) :: pice ! input 1171 1171 REAL(wp), DIMENSION(:,:,:), INTENT(out) :: pmax ! output 1172 ! 1173 REAL(wp), DIMENSION(Nis0:Nie0) :: zmax1, zmax2 1174 REAL(wp) :: zmax3 1172 1175 INTEGER :: ji, jj, jl ! dummy loop indices 1173 1176 !!---------------------------------------------------------------------- 1177 ! basic version: get the max of epsi20 + 9 neighbours 1178 !!$ DO jl = 1, jpl 1179 !!$ DO_2D( 0, 0, 0, 0 ) 1180 !!$ pmax(ji,jj,jl) = MAX( epsi20, pice(ji-1,jj-1,jl), pice(ji,jj-1,jl), pice(ji+1,jj-1,jl), & 1181 !!$ & pice(ji-1,jj ,jl), pice(ji,jj ,jl), pice(ji+1,jj ,jl), & 1182 !!$ & pice(ji-1,jj+1,jl), pice(ji,jj+1,jl), pice(ji+1,jj+1,jl) ) 1183 !!$ END_2D 1184 !!$ END DO 1185 ! optimized version : does a little bit more than 2 max of epsi20 + 3 neighbours 1174 1186 DO jl = 1, jpl 1187 DO ji = Nis0, Nie0 1188 zmax1(ji) = MAX( epsi20, pice(ji,Njs0-1,jl), pice(ji-1,Njs0-1,jl), pice(ji+1,Njs0-1,jl) ) 1189 zmax2(ji) = MAX( epsi20, pice(ji,Njs0 ,jl), pice(ji-1,Njs0 ,jl), pice(ji+1,Njs0 ,jl) ) 1190 END DO 1175 1191 DO_2D( 0, 0, 0, 0 ) 1176 pmax(ji,jj,jl) = MAX( epsi20, pice(ji-1,jj-1,jl), pice(ji,jj-1,jl), pice(ji+1,jj-1,jl), & 1177 & pice(ji-1,jj ,jl), pice(ji,jj ,jl), pice(ji+1,jj ,jl), & 1178 & pice(ji-1,jj+1,jl), pice(ji,jj+1,jl), pice(ji+1,jj+1,jl) ) 1192 zmax3 = MAX( epsi20, pice(ji,jj+1,jl), pice(ji-1,jj+1,jl), pice(ji+1,jj+1,jl) ) 1193 pmax(ji,jj,jl) = MAX( epsi20, zmax1(ji), zmax2(ji), zmax3 ) 1194 zmax1(ji) = zmax2(ji) 1195 zmax2(ji) = zmax3 1179 1196 END_2D 1180 1197 END DO 1198 1181 1199 END SUBROUTINE icemax3D 1182 1200 1183 1201 SUBROUTINE icemax4D( pice , pmax ) 1184 1202 !!--------------------------------------------------------------------- … … 1188 1206 REAL(wp), DIMENSION(:,:,:,:), INTENT(in ) :: pice ! input 1189 1207 REAL(wp), DIMENSION(:,:,:,:), INTENT(out) :: pmax ! output 1208 ! 1209 REAL(wp), DIMENSION(Nis0:Nie0) :: zmax1, zmax2 1210 REAL(wp) :: zmax3 1190 1211 INTEGER :: jlay, ji, jj, jk, jl ! dummy loop indices 1191 1212 !!---------------------------------------------------------------------- 1192 1213 jlay = SIZE( pice , 3 ) ! size of input arrays 1214 ! basic version: get the max of epsi20 + 9 neighbours 1215 !!$ DO jl = 1, jpl 1216 !!$ DO jk = 1, jlay 1217 !!$ DO_2D( 0, 0, 0, 0 ) 1218 !!$ pmax(ji,jj,jk,jl) = MAX( epsi20, pice(ji-1,jj-1,jk,jl), pice(ji,jj-1,jk,jl), pice(ji+1,jj-1,jk,jl), & 1219 !!$ & pice(ji-1,jj ,jk,jl), pice(ji,jj ,jk,jl), pice(ji+1,jj ,jk,jl), & 1220 !!$ & pice(ji-1,jj+1,jk,jl), pice(ji,jj+1,jk,jl), pice(ji+1,jj+1,jk,jl) ) 1221 !!$ END_2D 1222 !!$ END DO 1223 !!$ END DO 1224 ! optimized version : does a little bit more than 2 max of epsi20 + 3 neighbours 1193 1225 DO jl = 1, jpl 1194 1226 DO jk = 1, jlay 1227 DO ji = Nis0, Nie0 1228 zmax1(ji) = MAX( epsi20, pice(ji,Njs0-1,jk,jl), pice(ji-1,Njs0-1,jk,jl), pice(ji+1,Njs0-1,jk,jl) ) 1229 zmax2(ji) = MAX( epsi20, pice(ji,Njs0 ,jk,jl), pice(ji-1,Njs0 ,jk,jl), pice(ji+1,Njs0 ,jk,jl) ) 1230 END DO 1195 1231 DO_2D( 0, 0, 0, 0 ) 1196 pmax(ji,jj,jk,jl) = MAX( epsi20, pice(ji-1,jj-1,jk,jl), pice(ji,jj-1,jk,jl), pice(ji+1,jj-1,jk,jl), & 1197 & pice(ji-1,jj ,jk,jl), pice(ji,jj ,jk,jl), pice(ji+1,jj ,jk,jl), & 1198 & pice(ji-1,jj+1,jk,jl), pice(ji,jj+1,jk,jl), pice(ji+1,jj+1,jk,jl) ) 1232 zmax3 = MAX( epsi20, pice(ji,jj+1,jk,jl), pice(ji-1,jj+1,jk,jl), pice(ji+1,jj+1,jk,jl) ) 1233 pmax(ji,jj,jk,jl) = MAX( epsi20, zmax1(ji), zmax2(ji), zmax3 ) 1234 zmax1(ji) = zmax2(ji) 1235 zmax2(ji) = zmax3 1199 1236 END_2D 1200 1237 END DO 1201 1238 END DO 1239 1202 1240 END SUBROUTINE icemax4D 1203 1241 -
NEMO/trunk/src/ICE/icedyn_adv_umx.F90
r15033 r15037 1623 1623 REAL(wp), DIMENSION(:,:,:), INTENT(in ) :: pice ! input 1624 1624 REAL(wp), DIMENSION(:,:,:), INTENT(out) :: pmax ! output 1625 ! 1626 REAL(wp), DIMENSION(Nis0:Nie0) :: zmax1, zmax2 1627 REAL(wp) :: zmax3 1625 1628 INTEGER :: ji, jj, jl ! dummy loop indices 1626 1629 !!---------------------------------------------------------------------- 1627 DO jl = 1, jpl 1630 ! basic version: get the max of epsi20 + 9 neighbours 1631 !!$ DO jl = 1, jpl 1632 !!$ DO_2D( 0, 0, 0, 0 ) 1633 !!$ pmax(ji,jj,jl) = MAX( epsi20, pice(ji-1,jj-1,jl), pice(ji,jj-1,jl), pice(ji+1,jj-1,jl), & 1634 !!$ & pice(ji-1,jj ,jl), pice(ji,jj ,jl), pice(ji+1,jj ,jl), & 1635 !!$ & pice(ji-1,jj+1,jl), pice(ji,jj+1,jl), pice(ji+1,jj+1,jl) ) 1636 !!$ END_2D 1637 !!$ END DO 1638 ! optimized version : does a little bit more than 2 max of epsi20 + 3 neighbours 1639 DO jl = 1, jpl 1640 DO ji = Nis0, Nie0 1641 zmax1(ji) = MAX( epsi20, pice(ji,Njs0-1,jl), pice(ji-1,Njs0-1,jl), pice(ji+1,Njs0-1,jl) ) 1642 zmax2(ji) = MAX( epsi20, pice(ji,Njs0 ,jl), pice(ji-1,Njs0 ,jl), pice(ji+1,Njs0 ,jl) ) 1643 END DO 1628 1644 DO_2D( 0, 0, 0, 0 ) 1629 pmax(ji,jj,jl) = MAX( epsi20, pice(ji-1,jj-1,jl), pice(ji,jj-1,jl), pice(ji+1,jj-1,jl), & 1630 & pice(ji-1,jj ,jl), pice(ji,jj ,jl), pice(ji+1,jj ,jl), & 1631 & pice(ji-1,jj+1,jl), pice(ji,jj+1,jl), pice(ji+1,jj+1,jl) ) 1632 END_2D 1633 END DO 1645 zmax3 = MAX( epsi20, pice(ji,jj+1,jl), pice(ji-1,jj+1,jl), pice(ji+1,jj+1,jl) ) 1646 pmax(ji,jj,jl) = MAX( epsi20, zmax1(ji), zmax2(ji), zmax3 ) 1647 zmax1(ji) = zmax2(ji) 1648 zmax2(ji) = zmax3 1649 END_2D 1650 END DO 1651 1634 1652 END SUBROUTINE icemax3D 1635 1653 … … 1641 1659 REAL(wp), DIMENSION(:,:,:,:), INTENT(in ) :: pice ! input 1642 1660 REAL(wp), DIMENSION(:,:,:,:), INTENT(out) :: pmax ! output 1661 ! 1662 REAL(wp), DIMENSION(Nis0:Nie0) :: zmax1, zmax2 1663 REAL(wp) :: zmax3 1643 1664 INTEGER :: jlay, ji, jj, jk, jl ! dummy loop indices 1644 1665 !!---------------------------------------------------------------------- 1645 1666 jlay = SIZE( pice , 3 ) ! size of input arrays 1667 ! basic version: get the max of epsi20 + 9 neighbours 1668 !!$ DO jl = 1, jpl 1669 !!$ DO jk = 1, jlay 1670 !!$ DO_2D( 0, 0, 0, 0 ) 1671 !!$ pmax(ji,jj,jk,jl) = MAX( epsi20, pice(ji-1,jj-1,jk,jl), pice(ji,jj-1,jk,jl), pice(ji+1,jj-1,jk,jl), & 1672 !!$ & pice(ji-1,jj ,jk,jl), pice(ji,jj ,jk,jl), pice(ji+1,jj ,jk,jl), & 1673 !!$ & pice(ji-1,jj+1,jk,jl), pice(ji,jj+1,jk,jl), pice(ji+1,jj+1,jk,jl) ) 1674 !!$ END_2D 1675 !!$ END DO 1676 !!$ END DO 1677 ! optimized version : does a little bit more than 2 max of epsi20 + 3 neighbours 1646 1678 DO jl = 1, jpl 1647 1679 DO jk = 1, jlay 1680 DO ji = Nis0, Nie0 1681 zmax1(ji) = MAX( epsi20, pice(ji,Njs0-1,jk,jl), pice(ji-1,Njs0-1,jk,jl), pice(ji+1,Njs0-1,jk,jl) ) 1682 zmax2(ji) = MAX( epsi20, pice(ji,Njs0 ,jk,jl), pice(ji-1,Njs0 ,jk,jl), pice(ji+1,Njs0 ,jk,jl) ) 1683 END DO 1648 1684 DO_2D( 0, 0, 0, 0 ) 1649 pmax(ji,jj,jk,jl) = MAX( epsi20, pice(ji-1,jj-1,jk,jl), pice(ji,jj-1,jk,jl), pice(ji+1,jj-1,jk,jl), & 1650 & pice(ji-1,jj ,jk,jl), pice(ji,jj ,jk,jl), pice(ji+1,jj ,jk,jl), & 1651 & pice(ji-1,jj+1,jk,jl), pice(ji,jj+1,jk,jl), pice(ji+1,jj+1,jk,jl) ) 1652 END_2D 1653 END DO 1654 END DO 1685 zmax3 = MAX( epsi20, pice(ji,jj+1,jk,jl), pice(ji-1,jj+1,jk,jl), pice(ji+1,jj+1,jk,jl) ) 1686 pmax(ji,jj,jk,jl) = MAX( epsi20, zmax1(ji), zmax2(ji), zmax3 ) 1687 zmax1(ji) = zmax2(ji) 1688 zmax2(ji) = zmax3 1689 END_2D 1690 END DO 1691 END DO 1692 1655 1693 END SUBROUTINE icemax4D 1656 1694
Note: See TracChangeset
for help on using the changeset viewer.