From 2adf7c7498be92de09bfc943e72c0cf1605ed691 Mon Sep 17 00:00:00 2001
From: ronesy <rlt@nilu.no>
Date: Fri, 6 Sep 2024 14:38:48 +0200
Subject: [PATCH] Bug fix to prep_satellite for case when no retrievals found
 within +/-2 SD of mean and update to prep_regions for satellites for
 compatability with new version of FPv10.4 for satellites

---
 prep_regions/get_surfinf.f90   | 3 ++-
 prep_satellite/average.f90     | 4 ++++
 prep_satellite/get_bremen.f90  | 5 +++++
 prep_satellite/get_tropomi.f90 | 6 ++++++
 4 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/prep_regions/get_surfinf.f90 b/prep_regions/get_surfinf.f90
index 4b6eeb8..bd81909 100644
--- a/prep_regions/get_surfinf.f90
+++ b/prep_regions/get_surfinf.f90
@@ -216,7 +216,8 @@ subroutine get_surfinf(files, config, recs, cdryair, obstimes, avetimes, surfinf
       grid = grid/outheight(1)
       if ( lsatellite ) then
         ! convert from column SRR units to that consistent with mole fractions
-        grid = grid/cdryair(i)
+        ! no longer needed with new FP code
+!        grid = grid/cdryair(i)
       endif
       ! add to total surface influence
       surfinf(:,:) = surfinf(:,:) + sum(grid(ix1:ix2,jy1:jy2,:),dim=3)
diff --git a/prep_satellite/average.f90 b/prep_satellite/average.f90
index 5ba267b..335590a 100644
--- a/prep_satellite/average.f90
+++ b/prep_satellite/average.f90
@@ -366,6 +366,10 @@ subroutine average(settings, idate, itime, xpoints, ypoints, zpoint1, zpoint2, v
           iretr_keep(nn) = iretr(n)
         endif
       end do
+      if (nn.eq.0) then
+        ! reject this box -> no retrievals within +/- 2SD
+        cycle
+      endif
       ! calculate mean of kept retrievals
       warea(:) = 0.
       do n = 1, nn
diff --git a/prep_satellite/get_bremen.f90 b/prep_satellite/get_bremen.f90
index a9c8e23..5592546 100644
--- a/prep_satellite/get_bremen.f90
+++ b/prep_satellite/get_bremen.f90
@@ -284,6 +284,11 @@ subroutine get_bremen(settings)
         ! exclude retrievals if not for current day
         if ( floor(jdmeas).ne.jd ) cycle
         call caldate(jdmeas, jjjjmmdd, hhmiss)
+        ! check date and time
+        if (isnan(real(hhmiss)).or.(jjjjmmdd.lt.0)) then
+          write(logid,*) 'WARNING: problem with itime, idate for file, nmeas, jdmeas = ',trim(filereadlist(n)), nm, jdmeas
+          cycle
+        endif
         nretr = nretr + 1
         idate(nretr) = jjjjmmdd
         itime(nretr) = hhmiss
diff --git a/prep_satellite/get_tropomi.f90 b/prep_satellite/get_tropomi.f90
index 0462e7a..850d7c6 100644
--- a/prep_satellite/get_tropomi.f90
+++ b/prep_satellite/get_tropomi.f90
@@ -411,6 +411,12 @@ subroutine get_tropomi(settings)
             if ( floor(jdmeas).ne.jd ) cycle
             if ( vmr(np,nm,nt).ge.bignum ) cycle
             call caldate(jdmeas, jjjjmmdd, hhmiss)
+            ! check date and time
+            if (isnan(real(hhmiss)).or.(jjjjmmdd.lt.0)) then
+              write(logid,*) 'WARNING: problem with itime, idate for file, nmeas, npixel, jdmeas = ',&
+                               trim(filereadlist(n)), nm, np, jdmeas
+              cycle
+            endif
             nretr = nretr + 1
             idate(nretr) = jjjjmmdd
             itime(nretr) = hhmiss
-- 
GitLab