From d02507f8150f68648332021b483d0e8b6d55a954 Mon Sep 17 00:00:00 2001 From: joeran maerz Date: Wed, 6 Nov 2024 10:32:43 +0100 Subject: [PATCH 1/2] differentiate between abs and rel budget error --- src/riverroute/mosart_budget_type.F90 | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/riverroute/mosart_budget_type.F90 b/src/riverroute/mosart_budget_type.F90 index a012594..3236c71 100644 --- a/src/riverroute/mosart_budget_type.F90 +++ b/src/riverroute/mosart_budget_type.F90 @@ -190,7 +190,8 @@ subroutine check_budget(this, begr, endr, ntracers, dt) integer :: yr,mon,day,ymd,tod ! time vars real(r8) :: tmp_in(6, ntracers) ! array to pass to mpi_sum real(r8) :: tmp_glob(6, ntracers) ! array from mpi_sum - logical :: error_budget ! flag for an error + logical :: error_budget_abs ! flag for an absolute error + logical :: error_budget_rel ! flag for an realtive error real(r8) :: abserr, relerr !------------------------------------------------- @@ -237,7 +238,8 @@ subroutine check_budget(this, begr, endr, ntracers, dt) call shr_mpi_sum(tmp_in, tmp_glob, mpicom_rof, 'mosart global budget', all=.false.) do nt = 1, ntracers - error_budget = .false. + error_budget_abs = .false. + error_budget_rel = .false. abserr = 0.0_r8 relerr = 0.0_r8 this%beg_vol_glob(nt) = tmp_glob(index_beg_vol_grc, nt) @@ -248,13 +250,13 @@ subroutine check_budget(this, begr, endr, ntracers, dt) this%lag_glob(nt) = tmp_glob(index_lag_grc, nt) if (this%do_budget(nt)) then if (abs(this%net_glob(nt) - this%lag_glob(nt)*dt) > this%tolerance) then ! absolute tolerance - error_budget = .true. + error_budget_abs = .true. abserr = abs(this%net_glob(nt) - this%lag_glob(nt)) end if if (abs(this%net_glob(nt) + this%lag_glob(nt)) > 1e-6) then ! Why '+'?, why not '*dt'? - if both, could be simplified to "if (error_budget) then" if ( abs(this%net_glob(nt) - this%lag_glob(nt)) & /abs(this%net_glob(nt) + this%lag_glob(nt)) > this%rel_tolerance) then ! rel. tolerance - error_budget = .true. + error_budget_rel = .true. relerr = abs(this%net_glob(nt) - this%lag_glob(nt)) /abs(this%net_glob(nt) + this%lag_glob(nt)) end if end if @@ -272,8 +274,11 @@ subroutine check_budget(this, begr, endr, ntracers, dt) write (iulog, '(a,f22.6,a)') ' eul erout lag = ', this%lag_glob(nt), '(mil m3)' write (iulog, '(a,f22.6)') ' absolute budget error = ', abserr write (iulog, '(a,f22.6)') ' relative budget error = ', relerr - if (error_budget) then - write(iulog,'(a)') ' BUDGET OUT OF BALANCE WARNING ' + if (error_budget_abs) then + write(iulog,'(a)') ' BUDGET OUT OF BALANCE WARNING (abs) ' + endif + if (error_budget_rel) then + write(iulog,'(a)') ' BUDGET OUT OF BALANCE WARNING (rel) ' endif write (iulog, '(a)') '-----------------------------------' end if From 9bce7ca837c81f658d9b8ec26b6b03a075b4fa22 Mon Sep 17 00:00:00 2001 From: joeran maerz Date: Wed, 6 Nov 2024 10:48:29 +0100 Subject: [PATCH 2/2] fix debug_flag broadcasting --- src/riverroute/mosart_driver.F90 | 1 + 1 file changed, 1 insertion(+) diff --git a/src/riverroute/mosart_driver.F90 b/src/riverroute/mosart_driver.F90 index 869e676..212e553 100644 --- a/src/riverroute/mosart_driver.F90 +++ b/src/riverroute/mosart_driver.F90 @@ -146,6 +146,7 @@ subroutine mosart_read_namelist() call mpi_bcast (fincl3, (max_namlen+2)*size(fincl3), MPI_CHARACTER, 0, mpicom_rof, ier) call mpi_bcast (avgflag_pertape, size(avgflag_pertape), MPI_CHARACTER, 0, mpicom_rof, ier) call mpi_bcast (budget_frq, 1, MPI_INTEGER, 0, mpicom_rof, ier) + call mpi_bcast (debug_mosart, 1, MPI_LOGICAL, 0, mpicom_rof, ier) ! lnd2rof liquid tracers (liquid tracers OTHER than water) ! coupling the land input of tracers other than standard water to MOSART