Skip to content
Snippets Groups Projects
Commit aa0deef1 authored by Andrew Coward's avatar Andrew Coward
Browse files

Merge branch '270-reproducibility-of-the-obs-global-grid-search' into 'branch_4.2'

Resolve "Reproducibility of the OBS global grid search"

See merge request nemo/nemo!342
parents e5f8c53a 79a2e6b9
No related branches found
No related tags found
No related merge requests found
......@@ -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
!
......
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
......
......@@ -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, &
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment