From f1344869183dec4e9c5ce572322e604cc17559e2 Mon Sep 17 00:00:00 2001 From: Jekabs Nelsons Date: Fri, 17 Oct 2025 11:31:04 +0200 Subject: [PATCH 1/6] update_bounce subroutine missing from analytical module. Copy pasted from the time stepping module. --- src/mod_pos_tanalytical.F90 | 112 ++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) diff --git a/src/mod_pos_tanalytical.F90 b/src/mod_pos_tanalytical.F90 index 492133c..91f3442 100755 --- a/src/mod_pos_tanalytical.F90 +++ b/src/mod_pos_tanalytical.F90 @@ -28,6 +28,7 @@ MODULE mod_pos !! - gser (P) !! - gcf (P) !! - gammln (P) + !! - update_bounce (P) !! !!------------------------------------------------------------------------------ @@ -2032,6 +2033,117 @@ FUNCTION gammln(xx) END FUNCTION gammln + SUBROUTINE update_bounce(ia, iam, ja, ka, x0, y0, z0) + ! -------------------------------------------------- + ! + ! Purpose: + ! Update the indexes of the trajectory in case of + ! a sudden change of fluxes sign + ! + ! -------------------------------------------------- + + ! Position indexes + INTEGER, INTENT(INOUT) :: ia, iam, ja, ka + INTEGER :: tmpia, tmpiam, tmpja, tmpka + + ! Real positions + REAL(DP), INTENT(INOUT) :: x0, y0, z0 + + ! Fluxes + REAL(DP) :: uu, um ! Fluxes + + ! Temporal storage of indexes + tmpia = ia + tmpiam = iam + tmpja = ja + tmpka = ka + + ! Zonal walls + IF (x0 == DBLE(ia)) THEN + + uu = (intrpg*uflux(ia,ja,ka,nsp) + intrpr*uflux(ia,ja,ka,nsm)) + + IF (uu .GT. 0.d0) THEN + ! Redifine the indexes + tmpiam = ia + tmpia = ia + 1 + IF ( (tmpia .EQ. IMT + 1) .AND. (iperio .EQ. 1)) tmpia = 1 + END IF + + ELSE IF (x0 == DBLE(iam)) THEN + + um = (intrpg*uflux(iam,ja,ka,nsp) + intrpr*uflux(iam,ja,ka,nsm)) + + IF (um .LT. 0.d0) THEN + ! Redifine the indexes + tmpia = iam + tmpiam = tmpia - 1 + IF( (tmpiam .EQ. 0) .AND. (iperio .EQ. 1) ) tmpiam = IMT + END IF + + END IF + + ! Meridional wall + IF (y0 == DBLE(ja)) THEN + + uu = (intrpg*vflux(ia,ja,ka,nsp) + intrpr*vflux(ia,ja,ka,nsm)) + + IF (uu .GT. 0.d0) THEN + ! Redifine the indexes + tmpja = ja + 1 + END IF + + ELSE IF (y0 == DBLE(ja-1)) THEN + + um = (intrpg*vflux(ia,ja-1,ka,nsp) + intrpr*vflux(ia,ja-1,ka,nsm)) + + IF (um .LT. 0.d0) THEN + ! Redifine the indexes + tmpja = ja - 1 + END IF + + END IF + + ! Vertical wall + IF (z0 == DBLE(ka)) THEN + + ! Recalculate the fluxes +#if defined w_explicit + uu = (intrpg*wflux(ia,ja,ka ,nsp) + intrpr*wflux(ia,ja,ka ,nsm)) +#else + CALL vertvel(ia,iam,ja,ka) + uu = (intrpg*wflux(ka ,nsp) + intrpr*wflux(ka ,nsm)) +#endif + IF (uu .GT. 0.d0) THEN + ! Redifine the indexes + tmpka = ka + 1 + END IF + + ELSE IF (z0 == DBLE(ka-1)) THEN + +#if defined w_explicit + um = (intrpg*wflux(ia,ja,ka-1,nsp) + intrpr*wflux(ia,ja,ka-1,nsm)) +#else + CALL vertvel(ia,iam,ja,ka) + um = (intrpg*wflux(ka-1,nsp) + intrpr*wflux(ka-1,nsm)) +#endif + + IF (um .LT. 0.d0) THEN + ! Redifine the indexes + tmpka = ka - 1 + END IF + + END IF + + ! Reassign indexes + ia = tmpia + iam = tmpiam + ja = tmpja + ka = tmpka + + END SUBROUTINE update_bounce + + END MODULE mod_pos #endif From 87743d3095c542e304b9a69971bf8a7c7bc34194 Mon Sep 17 00:00:00 2001 From: Jekabs Nelsons Date: Fri, 17 Oct 2025 11:32:58 +0200 Subject: [PATCH 2/6] Swapped time indeces, time integration seemed to have been swapped around. --- src/mod_tracers.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mod_tracers.F90 b/src/mod_tracers.F90 index 7f7890a..19f4a13 100644 --- a/src/mod_tracers.F90 +++ b/src/mod_tracers.F90 @@ -146,8 +146,8 @@ SUBROUTINE update_tracer(ntrac,ia,ja,ka, ib,jb,kb,x1,y1,z1) ! The trajectory is within the grid cell IF (x1/=DBLE(ib) .AND. y1/=DBLE(jb) .AND. z1/=DBLE(kb)) THEN - tu = tracers(itrac)%data(ib,jb,kbtracer,nsp) - tm = tracers(itrac)%data(ib,jb,kbtracer,nsm) + tu = tracers(itrac)%data(ib,jb,kbtracer,nsm) + tm = tracers(itrac)%data(ib,jb,kbtracer,nsp) ! The trajectory crosses a wall ELSE tu = 0.5*(tracers(itrac)%data(ib,jb,kbtracer,nsm) + tracers(itrac)%data(ia,ja,katracer,nsm)) From c343de63c070050cb098285ad23fcad2e1679a03 Mon Sep 17 00:00:00 2001 From: Jekabs Nelsons Date: Fri, 17 Oct 2025 11:33:30 +0200 Subject: [PATCH 3/6] removed unused variable 'darea_name' --- src/mod_init.F90 | 2 +- src/mod_vars.F90 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mod_init.F90 b/src/mod_init.F90 index cb8dd0a..93b8310 100644 --- a/src/mod_init.F90 +++ b/src/mod_init.F90 @@ -46,7 +46,7 @@ SUBROUTINE init_namelist() usgs_name, vsgs_name, usub_name, vsub_name, w_name namelist /INIT_GRID_SIZE/ imt, jmt, km, iperio, jperio, & topoDataDir, & - hgridFile, darea_name, dy_name, dyu_name, dx_name, dxv_name, & + hgridFile, dy_name, dyu_name, dx_name, dxv_name, & zgridFile, dzt_name, dzu_name, dzv_name, dep_name,& bathyFile, kmt_name namelist /INIT_GRID_SUBDOMAIN/ l_subdom, imindom, imaxdom, jmindom, jmaxdom diff --git a/src/mod_vars.F90 b/src/mod_vars.F90 index 32abfb5..b82cc5b 100755 --- a/src/mod_vars.F90 +++ b/src/mod_vars.F90 @@ -226,7 +226,7 @@ MODULE mod_grid usgs_name = '', vsgs_name = '', usub_name = '', vsub_name = '', & w_name = '' - CHARACTER(LEN=50) :: hgridFile, darea_name, dy_name, dyu_name, dx_name, dxv_name, & + CHARACTER(LEN=50) :: hgridFile, dy_name, dyu_name, dx_name, dxv_name, & zgridFile, dzt_name, dzu_name, dzv_name, dep_name, & bathyFile, kmt_name From 038c6f15a1e6bc0acb3f1d2d5cbc059948080c30 Mon Sep 17 00:00:00 2001 From: Jekabs Nelsons Date: Thu, 11 Dec 2025 14:33:56 +0100 Subject: [PATCH 4/6] Fixed update_bounce method calling if the method is analytical --- src/mod_loop.F90 | 3 + src/mod_pos_tanalytical.F90 | 111 ------------------------------------ 2 files changed, 3 insertions(+), 111 deletions(-) diff --git a/src/mod_loop.F90 b/src/mod_loop.F90 index 0195405..fb7a1ce 100755 --- a/src/mod_loop.F90 +++ b/src/mod_loop.F90 @@ -197,7 +197,10 @@ SUBROUTINE loop dstep = tseas/dxyz #endif + ! Function not needed for analytical process +#ifndef time_analytical CALL update_bounce(ia, iam, ja, ka, x0, y0, z0) +#endif CALL cross_time(1,ia,ja,ka,x0,dse,dsw) ! zonal CALL cross_time(2,ia,ja,ka,y0,dsn,dss) ! meridional diff --git a/src/mod_pos_tanalytical.F90 b/src/mod_pos_tanalytical.F90 index 91f3442..0ec1131 100755 --- a/src/mod_pos_tanalytical.F90 +++ b/src/mod_pos_tanalytical.F90 @@ -2033,117 +2033,6 @@ FUNCTION gammln(xx) END FUNCTION gammln - SUBROUTINE update_bounce(ia, iam, ja, ka, x0, y0, z0) - ! -------------------------------------------------- - ! - ! Purpose: - ! Update the indexes of the trajectory in case of - ! a sudden change of fluxes sign - ! - ! -------------------------------------------------- - - ! Position indexes - INTEGER, INTENT(INOUT) :: ia, iam, ja, ka - INTEGER :: tmpia, tmpiam, tmpja, tmpka - - ! Real positions - REAL(DP), INTENT(INOUT) :: x0, y0, z0 - - ! Fluxes - REAL(DP) :: uu, um ! Fluxes - - ! Temporal storage of indexes - tmpia = ia - tmpiam = iam - tmpja = ja - tmpka = ka - - ! Zonal walls - IF (x0 == DBLE(ia)) THEN - - uu = (intrpg*uflux(ia,ja,ka,nsp) + intrpr*uflux(ia,ja,ka,nsm)) - - IF (uu .GT. 0.d0) THEN - ! Redifine the indexes - tmpiam = ia - tmpia = ia + 1 - IF ( (tmpia .EQ. IMT + 1) .AND. (iperio .EQ. 1)) tmpia = 1 - END IF - - ELSE IF (x0 == DBLE(iam)) THEN - - um = (intrpg*uflux(iam,ja,ka,nsp) + intrpr*uflux(iam,ja,ka,nsm)) - - IF (um .LT. 0.d0) THEN - ! Redifine the indexes - tmpia = iam - tmpiam = tmpia - 1 - IF( (tmpiam .EQ. 0) .AND. (iperio .EQ. 1) ) tmpiam = IMT - END IF - - END IF - - ! Meridional wall - IF (y0 == DBLE(ja)) THEN - - uu = (intrpg*vflux(ia,ja,ka,nsp) + intrpr*vflux(ia,ja,ka,nsm)) - - IF (uu .GT. 0.d0) THEN - ! Redifine the indexes - tmpja = ja + 1 - END IF - - ELSE IF (y0 == DBLE(ja-1)) THEN - - um = (intrpg*vflux(ia,ja-1,ka,nsp) + intrpr*vflux(ia,ja-1,ka,nsm)) - - IF (um .LT. 0.d0) THEN - ! Redifine the indexes - tmpja = ja - 1 - END IF - - END IF - - ! Vertical wall - IF (z0 == DBLE(ka)) THEN - - ! Recalculate the fluxes -#if defined w_explicit - uu = (intrpg*wflux(ia,ja,ka ,nsp) + intrpr*wflux(ia,ja,ka ,nsm)) -#else - CALL vertvel(ia,iam,ja,ka) - uu = (intrpg*wflux(ka ,nsp) + intrpr*wflux(ka ,nsm)) -#endif - IF (uu .GT. 0.d0) THEN - ! Redifine the indexes - tmpka = ka + 1 - END IF - - ELSE IF (z0 == DBLE(ka-1)) THEN - -#if defined w_explicit - um = (intrpg*wflux(ia,ja,ka-1,nsp) + intrpr*wflux(ia,ja,ka-1,nsm)) -#else - CALL vertvel(ia,iam,ja,ka) - um = (intrpg*wflux(ka-1,nsp) + intrpr*wflux(ka-1,nsm)) -#endif - - IF (um .LT. 0.d0) THEN - ! Redifine the indexes - tmpka = ka - 1 - END IF - - END IF - - ! Reassign indexes - ia = tmpia - iam = tmpiam - ja = tmpja - ka = tmpka - - END SUBROUTINE update_bounce - - END MODULE mod_pos #endif From ee03beb7718674d12c660cf4e7c61ac73d492dcc Mon Sep 17 00:00:00 2001 From: Jekabs Nelsons Date: Thu, 11 Dec 2025 14:36:35 +0100 Subject: [PATCH 5/6] comment removal --- src/mod_pos_tanalytical.F90 | 1 - 1 file changed, 1 deletion(-) diff --git a/src/mod_pos_tanalytical.F90 b/src/mod_pos_tanalytical.F90 index 0ec1131..492133c 100755 --- a/src/mod_pos_tanalytical.F90 +++ b/src/mod_pos_tanalytical.F90 @@ -28,7 +28,6 @@ MODULE mod_pos !! - gser (P) !! - gcf (P) !! - gammln (P) - !! - update_bounce (P) !! !!------------------------------------------------------------------------------ From 156d07e55ab5c6db6bd2960d2b5b7d09d568c961 Mon Sep 17 00:00:00 2001 From: Jekabs Nelsons Date: Sun, 14 Dec 2025 18:41:27 +0100 Subject: [PATCH 6/6] Fixed test tracer function --- src/_funit/mod_tracers.fun | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/_funit/mod_tracers.fun b/src/_funit/mod_tracers.fun index 1a00b6e..14774bb 100644 --- a/src/_funit/mod_tracers.fun +++ b/src/_funit/mod_tracers.fun @@ -116,7 +116,7 @@ TEST test_update_tracer_1 CALL update_tracer(1,ia,ja,ka,ib,jb,kb,x1,y1,z1) - ASSERT_EQUAL(trajectories(1)%tracerval(1),17.5) + ASSERT_EQUAL(trajectories(1)%tracerval(1),12.5) END TEST