From db52538268b52ab09a1dc7f642e657aeb5cd2e10 Mon Sep 17 00:00:00 2001 From: Weiyuan Jiang Date: Thu, 29 May 2025 11:22:39 -0400 Subject: [PATCH 1/6] get EASE_conv from MAPL --- CHANGELOG.md | 3 +++ GEOS_LdasGridComp.F90 | 3 +-- GEOSlandassim_GridComp/clsm_ensupd_enkf_update.F90 | 2 +- GEOSlandassim_GridComp/clsm_ensupd_read_obs.F90 | 2 +- GEOSldas_App/GEOSldas_HIST.rc | 2 +- GEOSldas_App/preprocess_ldas_routines.F90 | 4 ++-- LDAS_Shared/LDAS_TileCoordRoutines.F90 | 2 +- 7 files changed, 10 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index de6e786c..31540883 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- linked EASE_conv from MAPL +- Regridding from EASE to other grid types + ### Fixed ### Removed diff --git a/GEOS_LdasGridComp.F90 b/GEOS_LdasGridComp.F90 index cf481aa1..46c92481 100644 --- a/GEOS_LdasGridComp.F90 +++ b/GEOS_LdasGridComp.F90 @@ -7,7 +7,7 @@ module GEOS_LdasGridCompMod ! !USES use ESMF - use MAPL_Mod + use MAPL use GEOS_MetforceGridCompMod, only: MetforceSetServices => SetServices use GEOS_LandGridCompMod, only: LandSetServices => SetServices @@ -16,7 +16,6 @@ module GEOS_LdasGridCompMod use GEOS_LandAssimGridCompMod, only: LandAssimSetServices => SetServices use GEOS_LandiceGridCompMod, only: LandiceSetServices => SetServices - use EASE_conv, only: ease_inverse use LDAS_TileCoordType, only: tile_coord_type , T_TILECOORD_STATE, TILECOORD_WRAP use LDAS_TileCoordType, only: grid_def_type, io_grid_def_type, operator (==) use LDAS_TileCoordRoutines, only: get_minExtent_grid, get_ij_ind_from_latlon, io_domain_files diff --git a/GEOSlandassim_GridComp/clsm_ensupd_enkf_update.F90 b/GEOSlandassim_GridComp/clsm_ensupd_enkf_update.F90 index eedd28c8..0e2ad494 100644 --- a/GEOSlandassim_GridComp/clsm_ensupd_enkf_update.F90 +++ b/GEOSlandassim_GridComp/clsm_ensupd_enkf_update.F90 @@ -74,7 +74,7 @@ module clsm_ensupd_enkf_update use nr_ran2_gasdev, ONLY: & NRANDSEED - use ease_conv, ONLY: & + use MAPL, ONLY: & ease_convert use my_matrix_functions, ONLY: & diff --git a/GEOSlandassim_GridComp/clsm_ensupd_read_obs.F90 b/GEOSlandassim_GridComp/clsm_ensupd_read_obs.F90 index 22ab792d..36164611 100644 --- a/GEOSlandassim_GridComp/clsm_ensupd_read_obs.F90 +++ b/GEOSlandassim_GridComp/clsm_ensupd_read_obs.F90 @@ -25,7 +25,7 @@ module clsm_ensupd_read_obs use io_hdf5, ONLY: & hdf5read - use EASE_conv, ONLY: & + use MAPL, ONLY: & ease_convert, & ease_extent diff --git a/GEOSldas_App/GEOSldas_HIST.rc b/GEOSldas_App/GEOSldas_HIST.rc index d9d09dd8..068ae4f3 100644 --- a/GEOSldas_App/GEOSldas_HIST.rc +++ b/GEOSldas_App/GEOSldas_HIST.rc @@ -6,7 +6,7 @@ # "#CUBE 'tavg24_2d_lnd_Nx'" # does *not* mean that the 'lnd' output will be on a cube-sphere grid. -#CUBE VERSION: 1 +VERSION: 1 # Must edit 'EXPID' manually if HISTORY file is re-used without going # through "ldas_setup". diff --git a/GEOSldas_App/preprocess_ldas_routines.F90 b/GEOSldas_App/preprocess_ldas_routines.F90 index 382a549d..2a919d8a 100644 --- a/GEOSldas_App/preprocess_ldas_routines.F90 +++ b/GEOSldas_App/preprocess_ldas_routines.F90 @@ -2403,10 +2403,10 @@ subroutine optimize_latlon(fname_tilefile, N_proc_string, optimized_file, run_di end if open(10,file=optimized_file, action='write') - write(10,'(A)') "GEOSldas.GRID_TYPE: LatLon" + write(10,'(A)') "GEOSldas.GRID_TYPE: EASE" write(10,'(A)') "GEOSldas.GRIDNAME: "//trim(gridname) write(10,'(A)') "GEOSldas.LM: 1" - write(10,'(A)') "GEOSldas.POLE: PE" + write(10,'(A)') "GEOSldas.POLE: XY" write(10,'(A)') "GEOSldas.DATELINE: DE" write(10,'(A,I6)') "GEOSldas.IM_WORLD: ", N_lon write(10,'(A,I6)') "GEOSldas.JM_WORLD: ", N_lat diff --git a/LDAS_Shared/LDAS_TileCoordRoutines.F90 b/LDAS_Shared/LDAS_TileCoordRoutines.F90 index 7ddd5b55..8e97b945 100644 --- a/LDAS_Shared/LDAS_TileCoordRoutines.F90 +++ b/LDAS_Shared/LDAS_TileCoordRoutines.F90 @@ -26,7 +26,7 @@ module LDAS_TileCoordRoutines use MAPL_ConstantsMod, ONLY: & MAPL_RADIUS ! Earth radius - use EASE_conv, ONLY: & + use MAPL, ONLY: & ease_convert, & ease_inverse, & ease_extent From 2501505c157ee2c76f83a99a80f814f498ab3d77 Mon Sep 17 00:00:00 2001 From: Weiyuan Jiang Date: Thu, 29 May 2025 16:13:29 -0400 Subject: [PATCH 2/6] gridname --- GEOSldas_App/ldas_setup | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/GEOSldas_App/ldas_setup b/GEOSldas_App/ldas_setup index d1f332c8..4e61baca 100755 --- a/GEOSldas_App/ldas_setup +++ b/GEOSldas_App/ldas_setup @@ -466,12 +466,15 @@ class LDASsetup: extension = os.path.splitext(tmptile)[1] if extension == '.domain': extension = os.path.splitext(tmptile)[0] - + gridname_ ='' if extension == '.til': - self.rqdExeInp['GRIDNAME'] = linecache.getline(tmptile, 3).strip() + gridname_ = linecache.getline(tmptile, 3).strip() else: nc_file = netCDF4.Dataset(tmptile,'r') - self.rqdExeInp['GRIDNAME'] = nc_file.getncattr('Grid_Name') + gridname_ = nc_file.getncattr('Grid_Name') + # in case it is an old name: SMAP-EASEvx-Mxx + gridname_ = gridname_.replace('SMAP-','').replace('-M','_M') + self.rqdExeInp['GRIDNAME'] = gridname_ if 'LSM_CHOICE' not in self.rqdExeInp: self.rqdExeInp['LSM_CHOICE'] = 1 From 964f3d30116cde4818b7a346e28068b79b75ec9a Mon Sep 17 00:00:00 2001 From: Weiyuan Jiang Date: Thu, 29 May 2025 16:26:40 -0400 Subject: [PATCH 3/6] change gridname --- GEOSldas_App/preprocess_ldas_routines.F90 | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/GEOSldas_App/preprocess_ldas_routines.F90 b/GEOSldas_App/preprocess_ldas_routines.F90 index 2a919d8a..738bbe06 100644 --- a/GEOSldas_App/preprocess_ldas_routines.F90 +++ b/GEOSldas_App/preprocess_ldas_routines.F90 @@ -2402,6 +2402,12 @@ subroutine optimize_latlon(fname_tilefile, N_proc_string, optimized_file, run_di call ldas_abort(LDAS_GENERIC_ERROR, Iam, err_msg) end if + if (index(gridname, 'SMAP') /=0 ) then + gridname = trim(adjustl(gridname)) + gridname = gridname(6:) + gridname(7:7) = '_' ! replace '-' with '_' + endif + open(10,file=optimized_file, action='write') write(10,'(A)') "GEOSldas.GRID_TYPE: EASE" write(10,'(A)') "GEOSldas.GRIDNAME: "//trim(gridname) From 4c7de267094de9516a2489ca4b6bceb824c45b46 Mon Sep 17 00:00:00 2001 From: Weiyuan Jiang <52509753+weiyuan-jiang@users.noreply.github.com> Date: Mon, 2 Jun 2025 10:07:51 -0400 Subject: [PATCH 4/6] Update GEOSldas_HIST.rc --- GEOSldas_App/GEOSldas_HIST.rc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GEOSldas_App/GEOSldas_HIST.rc b/GEOSldas_App/GEOSldas_HIST.rc index 068ae4f3..d9d09dd8 100644 --- a/GEOSldas_App/GEOSldas_HIST.rc +++ b/GEOSldas_App/GEOSldas_HIST.rc @@ -6,7 +6,7 @@ # "#CUBE 'tavg24_2d_lnd_Nx'" # does *not* mean that the 'lnd' output will be on a cube-sphere grid. -VERSION: 1 +#CUBE VERSION: 1 # Must edit 'EXPID' manually if HISTORY file is re-used without going # through "ldas_setup". From 61165fde6842827ef9ae1544949cf0a5904bb2e6 Mon Sep 17 00:00:00 2001 From: Rolf Reichle Date: Wed, 18 Jun 2025 12:34:17 -0400 Subject: [PATCH 5/6] add MAPL_ pre-fix to ease_* subroutine names in prep for using MAPL EASE Grid Factory --- GEOS_LdasGridComp.F90 | 4 +-- .../clsm_ensupd_enkf_update.F90 | 8 ++--- .../clsm_ensupd_read_obs.F90 | 34 +++++++++---------- LDAS_Shared/LDAS_TileCoordRoutines.F90 | 9 +++-- 4 files changed, 27 insertions(+), 28 deletions(-) diff --git a/GEOS_LdasGridComp.F90 b/GEOS_LdasGridComp.F90 index 46c92481..3bf3025d 100644 --- a/GEOS_LdasGridComp.F90 +++ b/GEOS_LdasGridComp.F90 @@ -536,12 +536,12 @@ subroutine Initialize(gc, import, export, clock, rc) call ESMF_GRID_INTERIOR(agrid,I1,IN,J1,JN) do I = 1,size(centerX,1) - call ease_inverse(gridname,1.0*(I+I1-2),0.0,lat,lon) + call MAPL_ease_inverse(gridname,1.0*(I+I1-2),0.0,lat,lon) centerX(I,:) = lon * MAPL_DEGREES_TO_RADIANS enddo do J = 1,size(centerY,2) - call ease_inverse(gridname,0.0,1.0*(J+J1-2),lat,lon) + call MAPL_ease_inverse(gridname,0.0,1.0*(J+J1-2),lat,lon) centerY(:,J) = lat * MAPL_DEGREES_TO_RADIANS enddo diff --git a/GEOSlandassim_GridComp/clsm_ensupd_enkf_update.F90 b/GEOSlandassim_GridComp/clsm_ensupd_enkf_update.F90 index 0e2ad494..b304ac01 100644 --- a/GEOSlandassim_GridComp/clsm_ensupd_enkf_update.F90 +++ b/GEOSlandassim_GridComp/clsm_ensupd_enkf_update.F90 @@ -75,7 +75,7 @@ module clsm_ensupd_enkf_update NRANDSEED use MAPL, ONLY: & - ease_convert + MAPL_ease_convert use my_matrix_functions, ONLY: & row_std @@ -2235,7 +2235,7 @@ subroutine write_smapL4SMaup( option, date_time, exp_id, N_ens, & ) if (index(tile_grid_g%gridtype, 'M09') /=0) then - call ease_convert(trim(tile_grid_g%gridtype), this_lat, this_lon, col_ind, row_ind) + call MAPL_ease_convert(trim(tile_grid_g%gridtype), this_lat, this_lon, col_ind, row_ind) endif ! col_ind and row_ind are zero-based, need one-based index here @@ -2254,7 +2254,7 @@ subroutine write_smapL4SMaup( option, date_time, exp_id, N_ens, & ) if (index(tile_grid_g%gridtype, 'M09') /=0) then - call ease_convert(trim(tile_grid_g%gridtype), this_lat, this_lon, col_ind, row_ind) + call MAPL_ease_convert(trim(tile_grid_g%gridtype), this_lat, this_lon, col_ind, row_ind) endif ! col_ind and row_ind are zero-based, need one-based index here @@ -2278,7 +2278,7 @@ subroutine write_smapL4SMaup( option, date_time, exp_id, N_ens, & if (index(tile_grid_g%gridtype, 'M09') /=0) then ! subindex (1:7) to get the string EASEvx_ gridname_tmp = tile_grid_g%gridtype(1:7)//'M36' - call ease_convert(gridname_tmp, this_lat, this_lon, col_ind, row_ind) + call MAPL_ease_convert(gridname_tmp, this_lat, this_lon, col_ind, row_ind) endif ! col_ind and row_ind are zero-based, need one-based index here diff --git a/GEOSlandassim_GridComp/clsm_ensupd_read_obs.F90 b/GEOSlandassim_GridComp/clsm_ensupd_read_obs.F90 index 36164611..67aa07fe 100644 --- a/GEOSlandassim_GridComp/clsm_ensupd_read_obs.F90 +++ b/GEOSlandassim_GridComp/clsm_ensupd_read_obs.F90 @@ -26,8 +26,8 @@ module clsm_ensupd_read_obs hdf5read use MAPL, ONLY: & - ease_convert, & - ease_extent + MAPL_ease_convert, & + MAPL_ease_extent use LDAS_ensdrv_globals, ONLY: & logit, & @@ -5542,12 +5542,12 @@ subroutine read_obs_SMOS( date_time, N_catd, this_obs_param, & if (tmp_tile_num(ii)>0) then - call ease_convert('EASEv2_M36', & + call MAPL_ease_convert('EASEv2_M36', & tile_coord(tmp_tile_num(ii))%com_lat, & tile_coord(tmp_tile_num(ii))%com_lon, & M36_col_ind_tile, M36_row_ind_tile ) - call ease_convert('EASEv2_M36', & + call MAPL_ease_convert('EASEv2_M36', & tmp_lat(ii), & tmp_lon(ii), & M36_col_ind_obs, M36_row_ind_obs ) @@ -7159,12 +7159,12 @@ subroutine read_obs_SMAP_FT( date_time, N_catd, this_obs_param, & if (tmp_tile_num(ii)>0) then - call ease_convert('EASEv2_M09', & + call MAPL_ease_convert('EASEv2_M09', & tile_coord(tmp_tile_num(ii))%com_lat, & tile_coord(tmp_tile_num(ii))%com_lon, & M09_col_ind_tile, M09_row_ind_tile ) - call ease_convert('EASEv2_M09', & + call MAPL_ease_convert('EASEv2_M09', & tmp_lat(ii), & tmp_lon(ii), & M09_col_ind_obs, M09_row_ind_obs ) @@ -8229,12 +8229,12 @@ subroutine read_obs_SMAP_halforbit_Tb( date_time, N_catd, this_obs_param, & if (tmp_tile_num(ii)>0) then - call ease_convert('EASEv2_M36', & + call MAPL_ease_convert('EASEv2_M36', & tile_coord(tmp_tile_num(ii))%com_lat, & tile_coord(tmp_tile_num(ii))%com_lon, & M36_col_ind_tile, M36_row_ind_tile ) - call ease_convert('EASEv2_M36', & + call MAPL_ease_convert('EASEv2_M36', & tmp_lat(ii), & tmp_lon(ii), & M36_col_ind_obs, M36_row_ind_obs ) @@ -8529,7 +8529,7 @@ subroutine turn_off_assim_SMAP_L1CTb(N_obs_param, obs_param, N_obsl, Observation ! ! assemble 36 km EASEv2 mask of L2AP_Tb obs - call ease_extent( 'EASEv2_M36', N_cols, N_rows ) + call MAPL_ease_extent( 'EASEv2_M36', N_cols, N_rows ) allocate( mask_h_A(N_cols,N_rows) ) allocate( mask_h_D(N_cols,N_rows) ) @@ -8551,7 +8551,7 @@ subroutine turn_off_assim_SMAP_L1CTb(N_obs_param, obs_param, N_obsl, Observation if (Observations_f(ii)%species==species_L2AP_Tbh_A) then - call ease_convert('EASEv2_M36', Observations_f(ii)%lat, Observations_f(ii)%lon, & + call MAPL_ease_convert('EASEv2_M36', Observations_f(ii)%lat, Observations_f(ii)%lon, & col, row) ! set mask=.true. for the M36 grid cell that contains the L2AP_Tb obs; @@ -8573,7 +8573,7 @@ subroutine turn_off_assim_SMAP_L1CTb(N_obs_param, obs_param, N_obsl, Observation if (Observations_f(ii)%species==species_L2AP_Tbh_D) then - call ease_convert('EASEv2_M36', Observations_f(ii)%lat, Observations_f(ii)%lon, & + call MAPL_ease_convert('EASEv2_M36', Observations_f(ii)%lat, Observations_f(ii)%lon, & col, row) ! set mask=.true. for the M36 grid cell that contains the L2AP_Tb obs; @@ -8595,7 +8595,7 @@ subroutine turn_off_assim_SMAP_L1CTb(N_obs_param, obs_param, N_obsl, Observation if (Observations_f(ii)%species==species_L2AP_Tbv_A) then - call ease_convert('EASEv2_M36', Observations_f(ii)%lat, Observations_f(ii)%lon, & + call MAPL_ease_convert('EASEv2_M36', Observations_f(ii)%lat, Observations_f(ii)%lon, & col, row) ! set mask=.true. for the M36 grid cell that contains the L2AP_Tb obs; @@ -8617,7 +8617,7 @@ subroutine turn_off_assim_SMAP_L1CTb(N_obs_param, obs_param, N_obsl, Observation if (Observations_f(ii)%species==species_L2AP_Tbv_D) then - call ease_convert('EASEv2_M36', Observations_f(ii)%lat, Observations_f(ii)%lon, & + call MAPL_ease_convert('EASEv2_M36', Observations_f(ii)%lat, Observations_f(ii)%lon, & col, row) ! set mask=.true. for the M36 grid cell that contains the L2AP_Tb obs; @@ -8652,7 +8652,7 @@ subroutine turn_off_assim_SMAP_L1CTb(N_obs_param, obs_param, N_obsl, Observation if (Observations_l(ii)%species==species_L1C_Tbh_A) then - call ease_convert('EASEv2_M36', & + call MAPL_ease_convert('EASEv2_M36', & Observations_l(ii)%lat, Observations_l(ii)%lon, col, row) ! note conversion to one-based indices @@ -8671,7 +8671,7 @@ subroutine turn_off_assim_SMAP_L1CTb(N_obs_param, obs_param, N_obsl, Observation if (Observations_l(ii)%species==species_L1C_Tbh_D) then - call ease_convert('EASEv2_M36', & + call MAPL_ease_convert('EASEv2_M36', & Observations_l(ii)%lat, Observations_l(ii)%lon, col, row) ! note conversion to one-based indices @@ -8692,7 +8692,7 @@ subroutine turn_off_assim_SMAP_L1CTb(N_obs_param, obs_param, N_obsl, Observation if (Observations_l(ii)%species==species_L1C_Tbv_A) then - call ease_convert('EASEv2_M36', & + call MAPL_ease_convert('EASEv2_M36', & Observations_l(ii)%lat, Observations_l(ii)%lon, col, row) ! note conversion to one-based indices @@ -8711,7 +8711,7 @@ subroutine turn_off_assim_SMAP_L1CTb(N_obs_param, obs_param, N_obsl, Observation if (Observations_l(ii)%species==species_L1C_Tbv_D) then - call ease_convert('EASEv2_M36', & + call MAPL_ease_convert('EASEv2_M36', & Observations_l(ii)%lat, Observations_l(ii)%lon, col, row) ! note conversion to one-based indices diff --git a/LDAS_Shared/LDAS_TileCoordRoutines.F90 b/LDAS_Shared/LDAS_TileCoordRoutines.F90 index 8e97b945..43e5f86b 100644 --- a/LDAS_Shared/LDAS_TileCoordRoutines.F90 +++ b/LDAS_Shared/LDAS_TileCoordRoutines.F90 @@ -27,9 +27,8 @@ module LDAS_TileCoordRoutines MAPL_RADIUS ! Earth radius use MAPL, ONLY: & - ease_convert, & - ease_inverse, & - ease_extent + MAPL_ease_convert, & + MAPL_ease_extent use LDAS_ExceptionsMod, ONLY: & ldas_abort, & @@ -380,7 +379,7 @@ subroutine LDAS_create_grid_g( gridname, n_lon, n_lat, & tile_grid%i_dir = +1 tile_grid%j_dir = -1 - call ease_extent ( & + call MAPL_ease_extent ( & gridname, cols, rows, & cell_area = ease_cell_area, & ! [m^2] ll_lon = tile_grid%ll_lon, & @@ -1002,7 +1001,7 @@ subroutine get_ij_ind_from_latlon( tile_grid, lat, lon, i_ind, j_ind ) ! EASE grid lat/lon to index provides *global*, *0-based* index! - call ease_convert(tile_grid%gridtype, lat, lon, r, s) + call MAPL_ease_convert(tile_grid%gridtype, lat, lon, r, s) i_indg = nint(r) ! i_ind or lon_ind j_indg = nint(s) ! j_ind or lat_ind From 8f62af591cb851ceba9d72d17f471a66e9bf1ee5 Mon Sep 17 00:00:00 2001 From: Rolf Reichle <54944691+gmao-rreichle@users.noreply.github.com> Date: Wed, 18 Jun 2025 12:46:02 -0400 Subject: [PATCH 6/6] Update CHANGELOG.md --- CHANGELOG.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eccd26b0..5703e81f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,15 +18,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed -- linked EASE_conv from MAPL -- Regridding from EASE to other grid types +- Switch to using EASE grid tools in MAPL. - Specify only ntasks_model for SLURM resource request. - Revisions for handling of Nens and special nml and mwtrm path/files in coupled land-atm DAS. - Updated some defaults in LDASsa_DEFAULT_inputs_*.nml files. ### Fixed -- Fixed error from MAPL's ApplicationSupport.F90 to init UDUNITS +- Fixed error from MAPL's ApplicationSupport.F90 to init UDUNITS. ### Removed