From 1aa025d6723d155fff82f2bd9ac90814e28485a5 Mon Sep 17 00:00:00 2001 From: Panagiotis Velissariou Date: Mon, 18 Nov 2024 07:18:27 -0600 Subject: [PATCH] PaHM - best track central pressure fix (#153) * updated the PaHM sourcesto their latest version as of 07/19/2022 * fixed bug in CPP projection subroutines so the argument of cos is in radians * modified the cmake files for ParMETIS to allow the use of externally built ParMETIS libraries if requested * added the NO_PARMETIS capability to the src/CMakeLists.txt src/Driver/CMakeLists.txt files * typo fix in the FindParMETIS.cmake file * Add a deleted cmake def (IMPOSE_NET_FLUX) * fix read format issue in ReadCsvBestTrackFile subroutine when reading b-deck formatted track files * fixed CMakeLists.txt * deleted duplicated fortran statement in parwind.F90 * PAHM: fixed CSV read issue with columns 7 and 8 in the best track files * temp commit * another temp commit * Added new code in PaHM to account for missing of last closed isobar radius (RRP). The fields are usually missing in forecast track files and occassionaly in best track files. * added '-mcmodel medium' compiler flag to overcome the 2GB memory limit (orion/hercules) * removed the AVX flag for orion/hercules compilations * added options in the cmake module files for orion/hercules to consider compilations w/wo Intel's AVX * Modified the src/CMakeLists.txt in support of standalone and coupled compilations; added the BUILD_TOOLS option to also build the pschism* and the utilities executables in coupled configurations (e.g ufs-coastal) * modified slightly the if(BLD_STANDALONE) ... else(BLD_STANDALONE)... conditional block * reverted changes in cmake/* * updated PaHM with the following fixes: (1) added code to fill missing values in best track fields (POuter, ROCI, RMW) using linear interpolation method (2) added code to estimate ROCI and RMW values (internally availably at this point) based on Dean et al. (2009) & Avenas et al. (2023) (3) fixed some random IEEE floating point error bugs in parwinds.F90 (4) added code to to filter out duplicate lines in best track files (e.g., Hurricane Ian and maybe others) (5) added code to check & adjust so that POuter is always greater than the central pressure by at least 1 mbar (during pre-processing) (6) added code to the GaHM model so that it performs its calculations within an extended ROCI region and not the whole domain (speedup factor > 5) Tested with hurricanes: Florence, Sandy, Gustav, Ike, Ian, Beryl' * fixed minor typos caused compilation errors * PaHM: updated the FillMissDataTrackFile_LinInterp subroutine to bail out when there are no available data to interpolate from for the specific field in the best track file - it happens * PaHM: fixed typo Utilities->PaHM_Utilities in FillMissDataTrackFile_LinInterp subroutine * fixed missing code snippet for calculating the distances from the storm's eye in the subroutine GetHollandFields * PaHM: slightly extended the radius from the TC's eye where wind fields are calculated to allow for a more graceful reduction to zero of the wind speeds * PaHM: corrected the code that filters out the duplicate lines in the best track files - depends only upon the date string and the intensity value: 35,50,64 kt * PaHM: added code to fill in missing values of central pressure in best track files; it happens in rare occassions e.g., Beryl 2024 --------- Co-authored-by: Joseph Zhang --- src/Core/PaHM/parwind.F90 | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/Core/PaHM/parwind.F90 b/src/Core/PaHM/parwind.F90 index e94d7c27..bafb9e43 100644 --- a/src/Core/PaHM/parwind.F90 +++ b/src/Core/PaHM/parwind.F90 @@ -670,6 +670,14 @@ SUBROUTINE ReadCsvBestTrackFile() ! Here, we check for missing values for specific fields in the best track file. ! Namely: POuter, ROuter, Rmw, others ...? + ! --- (1) Mslp - central pressure in millibars + ! Sometimes central pressure values are missing from the best track files, + ! for example hurricane Beryl 2024. If this happens, GaHM model fails, so + ! we fill the missing values by linear interpolation first as we need to check + ! against POuter next. + CALL FillMissDataTrackFile_LinInterp(bestTrackData(iFile)%dtg, bestTrackData(iFile)%intMslp) + + ! --- (2) POuter - pressure in millibars of the last closed isobar ! --- (1) POuter - pressure in millibars of the last closed isobar ! POuter needs a special treatment, sometimes the reported POuter value is less ! than CPress so we need to correct this here before applying the linear interpolation. @@ -690,6 +698,14 @@ SUBROUTINE ReadCsvBestTrackFile() END IF END IF + ! --- (3) ESTIMATED EROuter (ROCI) - radius of the last closed isobar in nm + ! We might need to use this to fill missing values in ROuter below + CALL FillMissDataTrackFile_LinInterp(bestTrackData(iFile)%dtg, bestTrackData(iFile)%intEROuter) + + ! --- (4) ROuter (ROCI) - radius of the last closed isobar in nm + CALL FillMissDataTrackFile_LinInterp(bestTrackData(iFile)%dtg, bestTrackData(iFile)%intROuter) + + ! --- (5) ESTIMATED ERmw (RMW) - radius of max winds in nm ! --- (2) ESTIMATED EROuter (ROCI) - radius of the last closed isobar in nm ! We might need to use this to fill missing values in ROuter below CALL FillMissDataTrackFile_LinInterp(bestTrackData(iFile)%dtg, bestTrackData(iFile)%intEROuter)