Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 26 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Fixed

- Fix for Open MPI calls in `esma_mpirun` from Open MPI 5 testing

### Removed

### Deprecated

## [2.1.7] - 2026-04-15

### Added

- Minor changes for VIIRS additions

### Changed

- Synced latest changes from branch GEOS-FP-5_44 into main

### Fixed

- Fix for Open MPI calls in `esma_mpirun` from Open MPI 5 testing

## [2.1.6] - 2026-01-06

### Fixed
Expand Down Expand Up @@ -85,6 +97,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Fixed

2026-01-17:

- added GOES, HIMAWARI, VIIRS SNPP & NOAA-20, and Lunar AERONET aerosol observations to the KX-lists

2026-01-12:

- r_dist for MILAN
- minor bug fix in ODS code
- add ak/bk for MLT 1st version
- add ability to write out akbk to nc4 (JEDI support)

------------
- fix vED
- SLES15 stuff
- fix to reading of table in time ave program
Expand Down
4 changes: 2 additions & 2 deletions GMAO_etc/r_dist
Original file line number Diff line number Diff line change
Expand Up @@ -401,8 +401,8 @@ return $put_rc;
sub resolve {

my ( $LOCALROOT,$REMOTEROOT,$expno,$yyyy,$yy,$mm,$dd,$hh,$file ) = @_;
$file =~ s/\${REMOTEROOT}/$REMOTEROOT/g;
$file =~ s/\${LOCALROOT}/$LOCALROOT/g;
$file =~ s/\$\{REMOTEROOT}/$REMOTEROOT/g;
$file =~ s/\$\{LOCALROOT}/$LOCALROOT/g;
$file =~ s/%y4/$yyyy/g;
$file =~ s/%y2/$yy/g;
$file =~ s/%m2/$mm/g;
Expand Down
87 changes: 0 additions & 87 deletions GMAO_etc/setup_gaas_obs.pl

This file was deleted.

2 changes: 1 addition & 1 deletion GMAO_hermes/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ if ( NOT HERMES_LIGHT )
m_insitu.F m_interp.F90 m_lp.F m_maph.F90 m_maph_pert.F90 m_mapz.F m_mapz_pert.F90
m_qsat.F m_remap.f90 m_set_eta.F90 m_vdc2vdc.F90 progsig.f90 shared_topo_remap.F90 m_topo_remap.F90
m_interpack.F m_interpack_ad.F m_ec_set_eta.F90 m_ecdyn.f90 m_tick.f90
m_dyn_util.F90 m_spline.f90 m_nc_JEDIinc.f90
m_dyn_util.F90 m_spline.f90 m_nc_JEDIinc.f90 m_nc_akbk.f90
)

esma_add_library(${this} SRCS ${srcs} DEPENDENCIES GMAO_mpeu GMAO_gfio_r8)
Expand Down
19 changes: 17 additions & 2 deletions GMAO_hermes/dyn2dyn.f90
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ program dyn2dyn
use m_dyn
use m_set_eta, only : set_ncep72,unset_ncep72
use m_dyn2dyn, only : dyn2dyn_do
use m_topo_remap, only: dyn_topo_remap

use m_StrTemplate ! grads style templates

Expand Down Expand Up @@ -75,6 +76,7 @@ program dyn2dyn
! ------
character(len=255) msg
character(len=255), pointer :: xtrnames(:)
character(len=255) phfile
integer, parameter :: READ_ONLY = 1
integer fid, nvars, ngatts
integer ier, ifile
Expand All @@ -97,7 +99,7 @@ program dyn2dyn
fakedate, nymdf, nhmsf, &
dophys, expid, RCfile, verbose, oldana, force, &
vectype, dgrid, ncep72, ncf, pncf, indxlevs, &
xtrnames )
xtrnames, phfile )


! Loop over input eta files
Expand Down Expand Up @@ -155,6 +157,12 @@ program dyn2dyn
end if
if(ncep72) call set_ncep72

! If topographic remap requested ...
! ----------------------------------
if ( trim(phfile) /= "NONE" ) then
call dyn_topo_remap(trim(phfile), w_e, vectype, ier)
endif

! Perform interpolation
! ---------------------
if ( trim(RCfile)=='NONE' ) then
Expand Down Expand Up @@ -211,7 +219,7 @@ subroutine Init_ ( mfiles, etafiles, nfiles, dynfile, lwifile, &
fakedate, nymdf, nhmsf, &
dophys, expid, RCfile, verbose, oldana, force, &
vectype, dgrid, ncep72, ncf, pncf, indxlevs, &
xtrnames )
xtrnames, phfile )

implicit NONE

Expand Down Expand Up @@ -245,6 +253,7 @@ subroutine Init_ ( mfiles, etafiles, nfiles, dynfile, lwifile, &
logical, intent(out) :: pncf ! non-complaint dyn-perturbation file knob
logical, intent(out) :: indxlevs! index levels (in place of pressure levs)
character(len=*), pointer :: xtrnames(:)
character(len=*) :: phfile

!
! !REVISION HISTORY:
Expand Down Expand Up @@ -319,6 +328,7 @@ subroutine Init_ ( mfiles, etafiles, nfiles, dynfile, lwifile, &
trnames = 'NONE'
im_usr = -1
jm_usr = -1
phfile = 'NONE'

! Parse command line
! ------------------
Expand Down Expand Up @@ -466,6 +476,10 @@ subroutine Init_ ( mfiles, etafiles, nfiles, dynfile, lwifile, &
ncf = .true.
case ('-pncf')
pncf = .true.
case ("-phfile")
if ( iarg+1 .gt. argc ) call usage()
iarg = iarg + 1
call GetArg ( iarg, phfile )
case ('-prec')
if ( iarg+1 .gt. argc ) call usage()
iarg = iarg + 1
Expand Down Expand Up @@ -604,6 +618,7 @@ subroutine usage()
print *, '-ncf non-compliant dyn-vector (see NOTES)'
print *, '-pncf non-compliant dyn-vector perturbation (see NOTES)'
print *, '-tracers N,M read/write extra tracers of name N and M from ori file to new'
print *, '-phfile FNAME when alternative dyn-vec file provided, will perform topo-remap'
print *
print *, ' NOTES:'
print *, ' 1) For the time being, in order to do horizontal'
Expand Down
10 changes: 9 additions & 1 deletion GMAO_hermes/eta_echo.f90
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ program eta_echo
use m_set_eta, only: set_eta
use m_set_eta, only: get_ref_plevs
use m_spline, only: spline
use m_nc_akbk, only: write_nc_akbk
implicit none

integer :: nlevs,mlevs
Expand All @@ -13,6 +14,7 @@ program eta_echo
real(4) :: ak4,bk4
real(4) :: pbottom
character(len=255) :: locfname
character(len=255) :: akbkfname

call init_

Expand All @@ -28,7 +30,7 @@ program eta_echo
call write_plevs_()
endif

call write_akbk_()
if ( akbkfname /= "NULL" ) call write_nc_akbk ( akbkfname, ak8, bk8 )

deallocate(ak8,bk8)

Expand All @@ -52,13 +54,15 @@ subroutine init_
print *, " -mlevs LEVS - interpolate to this level setting"
print *, " -plevs - echoes pressure levels"
print *, " -r4 - single precision"
print *, " -nc FILE - writes out ak/bk to nc4 file"
print *, " "
stop
end if
bot2top = .false.
lsingle = .false.
lplevs = .false.
locfname = "NULL"
akbkfname = "NULL"
pbottom = -999.
mlevs=0
iarg = 1
Expand All @@ -84,6 +88,10 @@ subroutine init_
iarg = iarg + 1
call GetArg ( iarg, argv )
locfname = trim(argv)
case ("-nc")
iarg = iarg + 1
call GetArg ( iarg, argv )
akbkfname = trim(argv)
case default
read(argv,*) nlevs
end select
Expand Down
94 changes: 94 additions & 0 deletions GMAO_hermes/m_nc_akbk.f90
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
module m_nc_akbk
use netcdf
implicit none
private
public :: write_nc_akbk
interface write_nc_akbk
module procedure write_nc_akbk_
end interface
integer :: mype_ = 0
integer :: root_ = 0
contains
subroutine write_nc_akbk_ (fname,ak, bk)

character(len=*), intent(in) :: fname
double precision, intent(in) :: ak(:), bk(:)

! NetCDF variables
integer :: ncid, dimid_edge
integer :: varid_edge, varid_ak, varid_bk
integer :: rc
integer :: i, km
double precision, allocatable :: edge(:)

km = size(ak)
allocate(edge(km))
do i=1,km
edge(i) = dble(i)
enddo

! Create the NetCDF file
call check_( nf90_create(fname, NF90_CLOBBER, ncid), rc, mype_, root_ )
if(rc/=0) return

! Define dimensions
call check_ ( nf90_def_dim(ncid, "edge", km, dimid_edge), rc, mype_, root_ )
if(rc/=0) return

! Define variables
call check_ ( nf90_def_var(ncid, "edge", NF90_DOUBLE, (/dimid_edge/), varid_edge), rc, mype_, root_ )
call check_ ( nf90_def_var(ncid, "ak", NF90_DOUBLE, (/dimid_edge/), varid_ak), rc, mype_, root_ )
call check_ ( nf90_def_var(ncid, "bk", NF90_DOUBLE, (/dimid_edge/), varid_bk), rc, mype_, root_ )

! Add attributes to edge
call check_ ( nf90_put_att(ncid, varid_edge, "units", "level"), rc, mype_, root_ )
call check_ ( nf90_put_att(ncid, varid_edge, "long_name", "sigma at layer edges"), rc, mype_, root_ )
call check_ ( nf90_put_att(ncid, varid_edge, "standard_name", "atmosphere_hybrid_sigma_pressure_coordinate"),&
rc, mype_, root_ )
call check_ ( nf90_put_att(ncid, varid_edge, "coordinate", "eta"), rc, mype_, root_ )
call check_ ( nf90_put_att(ncid, varid_edge, "positive", "down"), rc, mype_, root_ )
call check_ ( nf90_put_att(ncid, varid_edge, "formulaTerms", "ap: ak b: bk ps: ps p0: p00"),&
rc, mype_, root_ )

! Add attributes to ak
call check_ ( nf90_put_att(ncid, varid_ak, "long_name", "hybrid_sigma_pressure_a"),&
rc, mype_, root_ )
call check_ ( nf90_put_att(ncid, varid_ak, "units", "Pa"), rc, mype_, root_ )

! Add attributes to bk
call check_ ( nf90_put_att(ncid, varid_bk, "long_name", "hybrid_sigma_pressure_b"), &
rc, mype_, root_ )
call check_ ( nf90_put_att(ncid, varid_bk, "units", "1"), rc, mype_, root_ )

! Global attributes
call check_ ( nf90_put_att(ncid, NF90_GLOBAL, "NASA/GMAO", &
"Homepage = http://gmao.gfsc.nasa.gov/"), rc, mype_, root_ )

! End define mode
call check_ ( nf90_enddef(ncid), rc, mype_, root_ )

! Write data
call check_ ( nf90_put_var(ncid, varid_edge, edge), rc, mype_, root_ )
call check_ ( nf90_put_var(ncid, varid_ak, ak), rc, mype_, root_ )
call check_ ( nf90_put_var(ncid, varid_bk, bk), rc, mype_, root_ )

! Close file
call check_ ( nf90_close(ncid), rc, mype_, root_ )

deallocate(edge)

print *, "NetCDF file ",trim(fname)," written successfully."

end subroutine write_nc_akbk_
subroutine check_(status,rc, myid, root)
integer, intent ( in) :: status
integer, intent (out) :: rc
integer, intent ( in) :: myid, root
rc=0
if(status /= nf90_noerr) then
if(myid==root) print *, trim(nf90_strerror(status))
rc=999
end if
end subroutine check_
end module m_nc_akbk

Loading
Loading