diff --git a/src/OCE/OBS/diaobs.F90 b/src/OCE/OBS/diaobs.F90 index 1e831ab8a14936d743163c261ef4fbb39ba5e07b..7ee22c3a41560f7b6cd74aca0cf94d40b6229369 100644 --- a/src/OCE/OBS/diaobs.F90 +++ b/src/OCE/OBS/diaobs.F90 @@ -426,6 +426,9 @@ CONTAINS ENDIF ! IF( ln_grid_global ) THEN + IF( jpnij < jpni * jpnj ) THEN + CALL ctl_stop( 'STOP', 'dia_obs_init: ln_grid_global=T is not available when land subdomains are suppressed' ) + END IF CALL ctl_warn( 'dia_obs_init: ln_grid_global=T may cause memory issues when used with a large number of processors' ) ENDIF ! diff --git a/src/OCE/OBS/obs_grd_bruteforce.h90 b/src/OCE/OBS/obs_grd_bruteforce.h90 index 7340e336164d62bd1065633e9a44ff4236bb22cb..a9af765595ff583c54f169147bec228af1d0015d 100644 --- a/src/OCE/OBS/obs_grd_bruteforce.h90 +++ b/src/OCE/OBS/obs_grd_bruteforce.h90 @@ -1,5 +1,4 @@ SUBROUTINE obs_grd_bruteforce( kpi, kpj, kpiglo, kpjglo, & - & kldi, klei, kldj, klej, & & kmyproc, ktotproc, & & pglam, pgphi, pmask, & & kobs, plam, pphi, kobsi, kobsj, & @@ -27,10 +26,6 @@ SUBROUTINE obs_grd_bruteforce( kpi, kpj, kpiglo, kpjglo, & INTEGER, INTENT(IN) :: kpj ! Number of local latitudes INTEGER, INTENT(IN) :: kpiglo ! Number of global longitudes INTEGER, INTENT(IN) :: kpjglo ! Number of global latitudes - INTEGER, INTENT(IN) :: kldi ! Start of inner domain in i - INTEGER, INTENT(IN) :: klei ! End of inner domain in i - INTEGER, INTENT(IN) :: kldj ! Start of inner domain in j - INTEGER, INTENT(IN) :: klej ! End of inner domain in j INTEGER, INTENT(IN) :: kmyproc ! Processor number for MPP INTEGER, INTENT(IN) :: ktotproc ! Total number of processors REAL(KIND=wp), DIMENSION(kpi,kpj), INTENT(IN) :: & @@ -109,16 +104,24 @@ SUBROUTINE obs_grd_bruteforce( kpi, kpj, kpiglo, kpjglo, & zlamg(:,:) = -1.e+10 zphig(:,:) = -1.e+10 zmskg(:,:) = -1.e+10 - DO jj = kldj, klej - DO ji = kldi, klei - zlamg(mig(ji),mjg(jj)) = pglam(ji,jj) - zphig(mig(ji),mjg(jj)) = pgphi(ji,jj) - zmskg(mig(ji),mjg(jj)) = pmask(ji,jj) - END DO - END DO + DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) + zlamg(mig(ji),mjg(jj)) = pglam(ji,jj) + zphig(mig(ji),mjg(jj)) = pgphi(ji,jj) + zmskg(mig(ji),mjg(jj)) = pmask(ji,jj) + END_2D + DO_2D( 0, 0, 0, 0 ) + zlamg(mig(ji),mjg(jj)) = pglam(ji,jj) + 1000000.0_wp + zphig(mig(ji),mjg(jj)) = pgphi(ji,jj) + 1000000.0_wp + zmskg(mig(ji),mjg(jj)) = pmask(ji,jj) + 1000000.0_wp + END_2D CALL mpp_global_max( zlamg ) CALL mpp_global_max( zphig ) CALL mpp_global_max( zmskg ) + WHERE( zmskg(:,:) >= 1000000.0_wp ) + zlamg(:,:) = zlamg(:,:) - 1000000.0_wp + zphig(:,:) = zphig(:,:) - 1000000.0_wp + zmskg(:,:) = zmskg(:,:) - 1000000.0_wp + END WHERE ELSE DO jj = 1, jlat DO ji = 1, jlon diff --git a/src/OCE/OBS/obs_grid.F90 b/src/OCE/OBS/obs_grid.F90 index 428ab5e3ab6b6a62861a3d181c1aed31167b7574..d22ee7dd6dc93f2bf71a7458342a6dcf065ea4d3 100644 --- a/src/OCE/OBS/obs_grid.F90 +++ b/src/OCE/OBS/obs_grid.F90 @@ -84,6 +84,8 @@ MODULE obs_grid CHARACTER(LEN=44), PUBLIC :: & & cn_gridsearchfile ! file name head for grid search lookup + !! * Substitutions +# include "do_loop_substitute.h90" !!---------------------------------------------------------------------- !! NEMO/OCE 4.0 , NEMO Consortium (2018) !! $Id: obs_grid.F90 14275 2021-01-07 12:13:16Z smasson $ @@ -128,28 +130,24 @@ CONTAINS ELSE IF ( cdgrid == 'T' ) THEN CALL obs_grd_bruteforce( jpi, jpj, jpiglo, jpjglo, & - & 1, jpi, 1, jpj, & & narea-1, jpnij, & & glamt, gphit, tmask, & & kobsin, plam, pphi, & & kobsi, kobsj, kproc ) ELSEIF ( cdgrid == 'U' ) THEN CALL obs_grd_bruteforce( jpi, jpj, jpiglo, jpjglo, & - & 1, jpi, 1, jpj, & & narea-1, jpnij, & & glamu, gphiu, umask, & & kobsin, plam, pphi, & & kobsi, kobsj, kproc ) ELSEIF ( cdgrid == 'V' ) THEN CALL obs_grd_bruteforce( jpi, jpj, jpiglo, jpjglo, & - & 1, jpi, 1, jpj, & & narea-1, jpnij, & & glamv, gphiv, vmask, & & kobsin, plam, pphi, & & kobsi, kobsj, kproc ) ELSEIF ( cdgrid == 'F' ) THEN CALL obs_grd_bruteforce( jpi, jpj, jpiglo, jpjglo, & - & 1, jpi, 1, jpj, & & narea-1, jpnij, & & glamf, gphif, fmask, & & kobsin, plam, pphi, & @@ -278,16 +276,24 @@ CONTAINS zphig(:,:) = -1.e+10 zmskg(:,:) = -1.e+10 ! Add various grids here. - DO jj = 1, jpj - DO ji = 1, jpi - zlamg(mig(ji),mjg(jj)) = glamt(ji,jj) - zphig(mig(ji),mjg(jj)) = gphit(ji,jj) - zmskg(mig(ji),mjg(jj)) = tmask(ji,jj,1) - END DO - END DO + DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) + zlamg(mig(ji),mjg(jj)) = glamt(ji,jj) + zphig(mig(ji),mjg(jj)) = gphit(ji,jj) + zmskg(mig(ji),mjg(jj)) = tmask(ji,jj,1) + END_2D + DO_2D( 0, 0, 0, 0 ) + zlamg(mig(ji),mjg(jj)) = glamt(ji,jj) + 1000000.0_wp + zphig(mig(ji),mjg(jj)) = gphit(ji,jj) + 1000000.0_wp + zmskg(mig(ji),mjg(jj)) = tmask(ji,jj,1) + 1000000.0_wp + END_2D CALL mpp_global_max( zlamg ) CALL mpp_global_max( zphig ) CALL mpp_global_max( zmskg ) + WHERE( zmskg(:,:) >= 1000000.0_wp ) + zlamg(:,:) = zlamg(:,:) - 1000000.0_wp + zphig(:,:) = zphig(:,:) - 1000000.0_wp + zmskg(:,:) = zmskg(:,:) - 1000000.0_wp + END WHERE ELSE ! Add various grids here. DO jj = 1, jlat @@ -818,7 +824,6 @@ CONTAINS END DO CALL obs_grd_bruteforce( jpi, jpj, jpiglo, jpjglo, & - & 1, jpi, 1, jpj, & & narea-1, jpnij, & & glamt, gphit, tmask, & & nlons*nlats, lonsi, latsi, &