diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index ca0a694a5..86ed1a533 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -20,11 +20,11 @@ jobs: CPPFLAGS: "-I/usr/include -I/usr/local/include" # Versions of all dependencies can be updated here - ESMF_VERSION: v8.7.0 + ESMF_VERSION: v8.8.0 PNETCDF_VERSION: checkpoint.1.14.0 NETCDF_FORTRAN_VERSION: v4.6.1 - PIO_VERSION: pio2_6_3 - CDEPS_VERSION: cdeps1.0.62 + PIO_VERSION: pio2_6_4 + CDEPS_VERSION: cdeps1.0.64 steps: - uses: actions/checkout@v4 # Build the ESMF library, if the cache contains a previous build diff --git a/cesm/driver/esm.F90 b/cesm/driver/esm.F90 index d357e9753..b2400a3ef 100644 --- a/cesm/driver/esm.F90 +++ b/cesm/driver/esm.F90 @@ -5,12 +5,11 @@ module ESM !----------------------------------------------------------------------------- use shr_kind_mod , only : r8=>shr_kind_r8, cl=>shr_kind_cl, cs=>shr_kind_cs - use shr_sys_mod , only : shr_sys_abort use shr_mpi_mod , only : shr_mpi_bcast use shr_mem_mod , only : shr_mem_init - use shr_log_mod , only : shr_log_setLogunit + use shr_log_mod , only : shr_log_setLogunit, shr_log_error use esm_utils_mod, only : logunit, maintask, dbug_flag, chkerr - + use esmf , only : ESMF_FAILURE implicit none private @@ -490,10 +489,14 @@ subroutine InitAttributes(driver, rc) if (chkerr(rc,__LINE__,u_FILE_u)) return if (.not. shr_wv_sat_valid_idx(shr_wv_sat_get_scheme_idx(trim(wv_sat_scheme)))) then - call shr_sys_abort(subname//': "'//trim(wv_sat_scheme)//'" is not a recognized saturation vapor pressure scheme name') + call shr_log_error(subname//': "'//trim(wv_sat_scheme)//'" is not a recognized saturation vapor pressure scheme name') + rc = ESMF_FAILURE + return end if if (.not. shr_wv_sat_set_default(wv_sat_scheme)) then - call shr_sys_abort('Invalid wv_sat_scheme.') + call shr_log_error('Invalid wv_sat_scheme.') + rc = ESMF_FAILURE + return end if call NUOPC_CompAttributeGet(driver, name="wv_sat_transition_start", value=cvalue, rc=rc) @@ -522,7 +525,9 @@ subroutine InitAttributes(driver, rc) call shr_wv_sat_init(shr_const_tkfrz, shr_const_tktrip, wv_sat_transition_start, epsilo, errstring) if (errstring /= "") then - call shr_sys_abort('shr_wv_sat_init: '//trim(errstring)) + call shr_log_error('shr_wv_sat_init: '//trim(errstring)) + rc = ESMF_FAILURE + return end if ! The below produces internal lookup tables in the range 175-374K for @@ -567,7 +572,9 @@ subroutine CheckAttributes( driver, rc ) call NUOPC_CompAttributeGet(driver, name="cime_model", value=cime_model, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return if ( trim(cime_model) /= 'cesm' .and. trim(cime_model) /= 'ufs') then - call shr_sys_abort( subname//': cime_model must be set to cesm or ufs, aborting') + call shr_log_error( subname//': cime_model must be set to cesm or ufs, aborting') + rc = ESMF_FAILURE + return end if ! --- LogFile ending name ----- @@ -575,7 +582,9 @@ subroutine CheckAttributes( driver, rc ) if (chkerr(rc,__LINE__,u_FILE_u)) return if ( len_trim(logFilePostFix) == 0 ) then - call shr_sys_abort( subname//': logFilePostFix must be set to something not blank' ) + call shr_log_error( subname//': logFilePostFix must be set to something not blank' ) + rc = ESMF_FAILURE + return end if ! --- Output path root directory ----- @@ -583,10 +592,14 @@ subroutine CheckAttributes( driver, rc ) if (chkerr(rc,__LINE__,u_FILE_u)) return if ( len_trim(outPathRoot) == 0 ) then - call shr_sys_abort( subname//': outPathRoot must be set' ) + call shr_log_error( subname//': outPathRoot must be set' ) + rc = ESMF_FAILURE + return end if if ( index(outPathRoot, "/", back=.true.) /= len_trim(outPathRoot) ) then - call shr_sys_abort( subname//': outPathRoot must end with a slash' ) + call shr_log_error( subname//': outPathRoot must end with a slash' ) + rc = ESMF_FAILURE + return end if end subroutine CheckAttributes @@ -1256,7 +1269,7 @@ subroutine esm_set_single_column_attributes(compname, gcomp, rc) if ( (scol_lon < scol_spval .and. scol_lat > scol_spval) .or. & (scol_lon > scol_spval .and. scol_lat < scol_spval)) then - call shr_sys_abort(subname//' ERROR: '//trim(compname)//' both scol_lon and scol_lat must be greater than -999 ') + call shr_log_error(subname//' ERROR: '//trim(compname)//' both scol_lon and scol_lat must be greater than -999 ') end if ! Set the special value for single column - if pts_lat or pts_lon are equal to the special value @@ -1271,7 +1284,7 @@ subroutine esm_set_single_column_attributes(compname, gcomp, rc) ! ATM, LND, OCN and ICE components only ! verify that WAV and LND are not trying to use single column mode if (trim(compname) == 'WAV' .or. trim(compname) == 'ROF' .or. trim(compname) == 'GLC') then - call shr_sys_abort(subname//' ERROR: '//trim(compname)//' does not support single column mode ') + call shr_log_error(subname//' ERROR: '//trim(compname)//' does not support single column mode ') end if ! ensure that single column mode is only run on 1 pet @@ -1280,7 +1293,7 @@ subroutine esm_set_single_column_attributes(compname, gcomp, rc) call ESMF_VMGet(vm, petcount=petcount, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return if (petcount > 1) then - call shr_sys_abort(subname//' ERROR: single column mode must be run on 1 pe') + call shr_log_error(subname//' ERROR: single column mode must be run on 1 pe') endif write(logunit,'(a,2(f10.5,2x))')trim(subname)//' single column point for '//trim(compname)//& @@ -1304,27 +1317,27 @@ subroutine esm_set_single_column_attributes(compname, gcomp, rc) ! the closest point in the domin file to scol_lon and scol_lat status = nf90_open(single_column_lnd_domainfile, NF90_NOWRITE, ncid) - if (status /= nf90_noerr) call shr_sys_abort (trim(subname) //': opening '//& + if (status /= nf90_noerr) call shr_log_error (trim(subname) //': opening '//& trim(single_column_lnd_domainfile)) status = nf90_inq_dimid (ncid, 'ni', dimid) - if (status /= nf90_noerr) call shr_sys_abort (trim(subname) //': inq_dimid ni') + if (status /= nf90_noerr) call shr_log_error (trim(subname) //': inq_dimid ni') status = nf90_inquire_dimension(ncid, dimid, len=ni) - if (status /= nf90_noerr) call shr_sys_abort (trim(subname) //': inquire_dimension ni') + if (status /= nf90_noerr) call shr_log_error (trim(subname) //': inquire_dimension ni') status = nf90_inq_dimid (ncid, 'nj', dimid) - if (status /= nf90_noerr) call shr_sys_abort (trim(subname) //': inq_dimid nj') + if (status /= nf90_noerr) call shr_log_error (trim(subname) //': inq_dimid nj') status = nf90_inquire_dimension(ncid, dimid, len=nj) - if (status /= nf90_noerr) call shr_sys_abort (trim(subname) //': inquire_dimension nj') + if (status /= nf90_noerr) call shr_log_error (trim(subname) //': inquire_dimension nj') status = nf90_inq_varid(ncid, 'xc' , varid_xc) - if (status /= nf90_noerr) call shr_sys_abort (subname//' inq_varid xc') + if (status /= nf90_noerr) call shr_log_error (subname//' inq_varid xc') status = nf90_inq_varid(ncid, 'yc' , varid_yc) - if (status /= nf90_noerr) call shr_sys_abort (subname//' inq_varid yc') + if (status /= nf90_noerr) call shr_log_error (subname//' inq_varid yc') status = nf90_inq_varid(ncid, 'area' , varid_area) - if (status /= nf90_noerr) call shr_sys_abort (subname//' inq_varid area') + if (status /= nf90_noerr) call shr_log_error (subname//' inq_varid area') status = nf90_inq_varid(ncid, 'mask' , varid_mask) - if (status /= nf90_noerr) call shr_sys_abort (subname//' inq_varid mask') + if (status /= nf90_noerr) call shr_log_error (subname//' inq_varid mask') status = nf90_inq_varid(ncid, 'frac' , varid_frac) - if (status /= nf90_noerr) call shr_sys_abort (subname//' inq_varid frac') + if (status /= nf90_noerr) call shr_log_error (subname//' inq_varid frac') ! Read in domain file for single column ! Check for unstructured data ni>1 and nj==1 @@ -1344,10 +1357,10 @@ subroutine esm_set_single_column_attributes(compname, gcomp, rc) start3=(/1,1,1/) count3=(/ni,nj,1/) status = nf90_get_var(ncid, varid_xc, glob_grid, start3, count3) - if (status /= nf90_noerr) call shr_sys_abort (subname//' get_var xc') + if (status /= nf90_noerr) call shr_log_error (subname//' get_var xc') lons(1:ni) = glob_grid(1:ni,1) status = nf90_get_var(ncid, varid_yc, glob_grid, start3, count3) - if (status /= nf90_noerr) call shr_sys_abort (subname//' get_var yc') + if (status /= nf90_noerr) call shr_log_error (subname//' get_var yc') if (unstructured) then lats(1:ni) = glob_grid(1:ni,1) else @@ -1379,31 +1392,31 @@ subroutine esm_set_single_column_attributes(compname, gcomp, rc) ! read in value of nearest neighbor lon and RESET scol_lon and scol_lat ! also get area of gridcell, mask and frac status = nf90_get_var(ncid, varid_xc, scol_lon, start) - if (status /= nf90_noerr) call shr_sys_abort (subname//' get_var xc') + if (status /= nf90_noerr) call shr_log_error (subname//' get_var xc') status = nf90_get_var(ncid, varid_yc, scol_lat, start) - if (status /= nf90_noerr) call shr_sys_abort (subname//' get_var yc') + if (status /= nf90_noerr) call shr_log_error (subname//' get_var yc') status = nf90_get_var(ncid, varid_area, scol_area, start) - if (status /= nf90_noerr) call shr_sys_abort (subname//' get_var area') + if (status /= nf90_noerr) call shr_log_error (subname//' get_var area') status = nf90_get_var(ncid, varid_mask, iscol_data, start) - if (status /= nf90_noerr) call shr_sys_abort (subname//' get_var mask') + if (status /= nf90_noerr) call shr_log_error (subname//' get_var mask') scol_lndmask = iscol_data(1) scol_ocnmask = 1 - scol_lndmask status = nf90_get_var(ncid, varid_frac, scol_data, start) - if (status /= nf90_noerr) call shr_sys_abort (subname//' get_var frac') + if (status /= nf90_noerr) call shr_log_error (subname//' get_var frac') scol_lndfrac = scol_data(1) scol_ocnfrac = 1._r8 - scol_lndfrac if (scol_ocnmask == 0 .and. scol_lndmask == 0) then - call shr_sys_abort(trim(subname)//' in single column mode '& + call shr_log_error(trim(subname)//' in single column mode '& //' ocean and land mask cannot both be zero') end if status = nf90_close(ncid) - if (status /= nf90_noerr) call shr_sys_abort (trim(subname) //': closing '//& + if (status /= nf90_noerr) call shr_log_error (trim(subname) //': closing '//& trim(single_column_lnd_domainfile)) ! Now read in mesh file to get exact values of scol_lon and scol_lat that will be used diff --git a/cesm/driver/esm_time_mod.F90 b/cesm/driver/esm_time_mod.F90 index ada4c24a9..f5a2107b0 100644 --- a/cesm/driver/esm_time_mod.F90 +++ b/cesm/driver/esm_time_mod.F90 @@ -1,10 +1,10 @@ module esm_time_mod use shr_kind_mod , only : cx=>shr_kind_cx, cs=>shr_kind_cs, cl=>shr_kind_cl, r8=>shr_kind_r8 - use shr_sys_mod , only : shr_sys_abort + use shr_log_mod , only : shr_log_error use ESMF , only : ESMF_GridComp, ESMF_GridCompGet, ESMF_GridCompSet use ESMF , only : ESMF_Clock, ESMF_ClockCreate, ESMF_ClockGet, ESMF_ClockSet - use ESMF , only : ESMF_ClockAdvance + use ESMF , only : ESMF_ClockAdvance, ESMF_FAILURE use ESMF , only : ESMF_Alarm, ESMF_AlarmCreate, ESMF_AlarmGet use ESMF , only : ESMF_Calendar, ESMF_CalKind_Flag, ESMF_CalendarCreate use ESMF , only : ESMF_CALKIND_NOLEAP, ESMF_CALKIND_GREGORIAN @@ -141,20 +141,26 @@ subroutine esm_time_clockinit(ensemble_driver, instance_driver, logunit, maintas write(logunit,*) " read rpointer file = "//trim(restart_pfile) inquire( file=trim(restart_pfile), exist=exists) if (.not. exists) then - call shr_sys_abort(trim(subname)//' ERROR rpointer file '//trim(restart_pfile)//' not found',& + call shr_log_error( trim(subname)//' ERROR rpointer file '//trim(restart_pfile)//' not found',& line=__LINE__, file=__FILE__) + rc = ESMF_FAILURE + return endif call ESMF_LogWrite(trim(subname)//" read rpointer file = "//trim(restart_pfile), & ESMF_LOGMSG_INFO) open(newunit=unitn, file=restart_pfile, form='FORMATTED', status='old',iostat=ierr) if (ierr < 0) then - call shr_sys_abort(trim(subname)//' ERROR rpointer file open returns error', & + call shr_log_error( trim(subname)//' ERROR rpointer file open returns error', & line=__LINE__, file=__FILE__) + rc = ESMF_FAILURE + return end if read(unitn,'(a)', iostat=ierr) restart_file if (ierr < 0) then - call shr_sys_abort(trim(subname)//' ERROR rpointer file read returns error', & + call shr_log_error( trim(subname)//' ERROR rpointer file read returns error', & line=__LINE__, file=__FILE__) + rc = ESMF_FAILURE + return end if close(unitn) if (maintask) then @@ -367,58 +373,78 @@ subroutine esm_time_read_restart(restart_file, start_ymd, start_tod, curr_ymd, c rc = ESMF_SUCCESS status = nf90_open(restart_file, NF90_NOWRITE, ncid) if (status /= nf90_NoErr) then - call shr_sys_abort(trim(subname)//' ERROR: nf90_open: '//trim(restart_file),& + call shr_log_error( trim(subname)//' ERROR: nf90_open: '//trim(restart_file),& file=__FILE__, line=__LINE__) + rc = ESMF_FAILURE + return endif status = nf90_inq_varid(ncid, 'start_ymd', varid) if (status /= nf90_NoErr) then - call shr_sys_abort(trim(subname)//' ERROR: nf90_inq_varid start_ymd', & + call shr_log_error( trim(subname)//' ERROR: nf90_inq_varid start_ymd', & file=__FILE__, line=__LINE__) + rc = ESMF_FAILURE + return end if status = nf90_get_var(ncid, varid, start_ymd) if (status /= nf90_NoErr) then - call shr_sys_abort(trim(subname)//' ERROR: nf90_get_var start_ymd', & + call shr_log_error( trim(subname)//' ERROR: nf90_get_var start_ymd', & file=__FILE__, line=__LINE__) + rc = ESMF_FAILURE + return end if status = nf90_inq_varid(ncid, 'start_tod', varid) if (status /= nf90_NoErr) then - call shr_sys_abort(trim(subname)//' ERROR: nf90_inq_varid start_tod', & + call shr_log_error( trim(subname)//' ERROR: nf90_inq_varid start_tod', & file=__FILE__, line=__LINE__) + rc = ESMF_FAILURE + return end if status = nf90_get_var(ncid, varid, start_tod) if (status /= nf90_NoErr) then - call shr_sys_abort(trim(subname)//' ERROR: nf90_get_var start_tod', & + call shr_log_error( trim(subname)//' ERROR: nf90_get_var start_tod', & file=__FILE__, line=__LINE__) + rc = ESMF_FAILURE + return end if status = nf90_inq_varid(ncid, 'curr_ymd', varid) if (status /= nf90_NoErr) then - call shr_sys_abort(trim(subname)//' ERROR: nf90_inq_varid curr_ymd', & + call shr_log_error( trim(subname)//' ERROR: nf90_inq_varid curr_ymd', & file=__FILE__, line=__LINE__) + rc = ESMF_FAILURE + return end if status = nf90_get_var(ncid, varid, curr_ymd) if (status /= nf90_NoErr) then - call shr_sys_abort(trim(subname)//' ERROR: nf90_get_var curr_ymd', & + call shr_log_error( trim(subname)//' ERROR: nf90_get_var curr_ymd', & file=__FILE__, line=__LINE__) + rc = ESMF_FAILURE + return end if status = nf90_inq_varid(ncid, 'curr_tod', varid) if (status /= nf90_NoErr) then - call shr_sys_abort(trim(subname)//' ERROR: nf90_inq_varid curr_tod', & + call shr_log_error( trim(subname)//' ERROR: nf90_inq_varid curr_tod', & file=__FILE__, line=__LINE__) + rc = ESMF_FAILURE + return end if status = nf90_get_var(ncid, varid, curr_tod) if (status /= nf90_NoErr) then - call shr_sys_abort(trim(subname)//' ERROR: nf90_get_var curr_tod', & + call shr_log_error( trim(subname)//' ERROR: nf90_get_var curr_tod', & file=__FILE__, line=__LINE__) + rc = ESMF_FAILURE + return end if status = nf90_close(ncid) if (status /= nf90_NoErr) then - call shr_sys_abort(trim(subname)//' ERROR: nf90_close', & + call shr_log_error( trim(subname)//' ERROR: nf90_close', & file=__FILE__, line=__LINE__) + rc = ESMF_FAILURE + return end if write(tmpstr,*) trim(subname)//" read start_ymd = ",start_ymd diff --git a/cesm/flux_atmocn/shr_flux_mod.F90 b/cesm/flux_atmocn/shr_flux_mod.F90 index d86805a5b..c40c4d732 100644 --- a/cesm/flux_atmocn/shr_flux_mod.F90 +++ b/cesm/flux_atmocn/shr_flux_mod.F90 @@ -5,9 +5,10 @@ module shr_flux_mod ! !USES: use shr_kind_mod, only : R8=>SHR_KIND_R8, IN=>SHR_KIND_IN ! shared kinds - use shr_const_mod ! shared constants - use shr_sys_mod ! shared system routines - + use shr_const_mod, only : shr_const_zvir, shr_const_cpdair, shr_const_cpvir, shr_const_karman, shr_const_g ! shared constants + use shr_const_mod, only : shr_const_latvap, shr_const_latice, shr_const_stebol, shr_const_tkfrz, shr_const_pi, shr_const_spval + use shr_const_mod, only : shr_const_ocn_ref_sal, shr_const_zsrflyr, shr_const_rgas + use shr_sys_mod, only : shr_sys_abort ! shared system routines implicit none private ! default private diff --git a/cesm/nuopc_cap_share/driver_pio_mod.F90 b/cesm/nuopc_cap_share/driver_pio_mod.F90 index 710373ed9..311387d08 100644 --- a/cesm/nuopc_cap_share/driver_pio_mod.F90 +++ b/cesm/nuopc_cap_share/driver_pio_mod.F90 @@ -6,8 +6,8 @@ module driver_pio_mod use pio , only : pio_set_blocksize, pio_set_buffer_size_limit, pio_finalize use shr_pio_mod, only : io_compname, pio_comp_settings, iosystems, io_compid, shr_pio_getindex use shr_kind_mod, only : CS=>shr_kind_CS, shr_kind_cl, shr_kind_in - use shr_log_mod, only : shr_log_getLogUnit - use shr_sys_mod, only : shr_sys_abort + use shr_log_mod, only : shr_log_getLogUnit, shr_log_error + #ifndef NO_MPI2 use mpi, only : mpi_comm_null, mpi_comm_world, mpi_finalize #endif @@ -424,7 +424,8 @@ subroutine driver_pio_component_init(driver, inst_comm, asyncio_petlist, rc) call MPI_AllReduce(MPI_IN_PLACE, comp_proc_list(:,i), maxprocspercomp, MPI_INTEGER, MPI_MAX, Inst_comm, ierr) enddo if(asyncio_ntasks == 0) then - call shr_sys_abort(subname//' ERROR: ASYNC IO Requested but no IO PES assigned') + call shr_log_error(subname//' ERROR: ASYNC IO Requested but no IO PES assigned', rc=rc) + return endif allocate(async_iosystems(do_async_init)) @@ -440,7 +441,8 @@ subroutine driver_pio_component_init(driver, inst_comm, asyncio_petlist, rc) async_rearr = pio_comp_settings(i)%pio_rearranger elseif(async_rearr .ne. pio_comp_settings(i)%pio_rearranger .and. pio_comp_settings(i)%pio_rearranger > 0) then write(msgstr,*) i,async_rearr,pio_comp_settings(i)%pio_rearranger - call shr_sys_abort(subname//' ERROR: all async component rearrangers must match '//msgstr) + call shr_log_error( subname//' ERROR: all async component rearrangers must match '//msgstr, rc=rc) + return endif endif endif diff --git a/cesm/nuopc_cap_share/shr_drydep_mod.F90 b/cesm/nuopc_cap_share/shr_drydep_mod.F90 index 7f3af4131..aca37e168 100644 --- a/cesm/nuopc_cap_share/shr_drydep_mod.F90 +++ b/cesm/nuopc_cap_share/shr_drydep_mod.F90 @@ -292,7 +292,7 @@ subroutine shr_drydep_readnl(NLFilename, drydep_nflds) ! Note that ierr /= 0, no namelist is present. read(unitn, drydep_inparm, iostat=ierr) if (ierr > 0) then - call shr_sys_abort( 'problem on read of drydep_inparm namelist in shr_drydep_readnl') + call shr_sys_abort( 'problem on read of drydep_inparm namelist in shr_drydep_readnl', rc=ierr) end if endif close( unitn ) @@ -374,19 +374,19 @@ subroutine shr_drydep_init( ) if (localPet==0) then rc = nf90_open(path=trim(dep_data_file), mode=nf90_nowrite, ncid=fileid) - if (rc/=nf90_noerr) call shr_sys_abort(subName//' ERROR: not able to open file: '//trim(dep_data_file)) + if (rc/=nf90_noerr) call shr_sys_abort(subName//' ERROR: not able to open file: '//trim(dep_data_file), rc=rc) rc = nf90_inq_dimid(fileid,'n_species_table',dimid) - if (rc/=nf90_noerr) call shr_sys_abort(subName//' ERROR: nf90_inq_dimid n_species_table') + if (rc/=nf90_noerr) call shr_sys_abort(subName//' ERROR: nf90_inq_dimid n_species_table', rc=rc) rc = nf90_inquire_dimension(fileid,dimid,len=bint(1)) - if (rc/=nf90_noerr) call shr_sys_abort(subName//' ERROR: nf90_inquire_dimension n_species_table') + if (rc/=nf90_noerr) call shr_sys_abort(subName//' ERROR: nf90_inquire_dimension n_species_table', rc=rc) rc = nf90_inq_dimid(fileid,'NHen',dimid) - if (rc/=nf90_noerr) call shr_sys_abort(subName//' ERROR: nf90_inq_dimid NHen') + if (rc/=nf90_noerr) call shr_sys_abort(subName//' ERROR: nf90_inq_dimid NHen', rc=rc) rc = nf90_inquire_dimension(fileid,dimid,len=bint(2)) - if (rc/=nf90_noerr) call shr_sys_abort(subName//' ERROR: nf90_inquire_dimension nHen') + if (rc/=nf90_noerr) call shr_sys_abort(subName//' ERROR: nf90_inquire_dimension nHen', rc=rc) endif write(msg,*) subname//' bcast n_species_table', localPet, bint call ESMF_LogWrite(msg, ESMF_LOGMSG_INFO) @@ -404,27 +404,27 @@ subroutine shr_drydep_init( ) dptr => dheff(:,1) if (localPet==0) then rc = nf90_inq_varid(fileid,'mol_wghts',varid) - if (rc/=nf90_noerr) call shr_sys_abort(subName//' ERROR: nf90_inq_varid mol_wghts') + if (rc/=nf90_noerr) call shr_sys_abort(subName//' ERROR: nf90_inq_varid mol_wghts', rc=rc) rc = nf90_get_var(fileid,varid,mol_wgts) - if (rc/=nf90_noerr) call shr_sys_abort(subName//' ERROR: nf90_get_var mol_wgts') + if (rc/=nf90_noerr) call shr_sys_abort(subName//' ERROR: nf90_get_var mol_wgts', rc=rc) rc = nf90_inq_varid(fileid,'dfoxd',varid) - if (rc/=nf90_noerr) call shr_sys_abort(subName//' ERROR: nf90_inq_varid dfoxd') + if (rc/=nf90_noerr) call shr_sys_abort(subName//' ERROR: nf90_inq_varid dfoxd', rc=rc) rc = nf90_get_var(fileid,varid,dfoxd) - if (rc/=nf90_noerr) call shr_sys_abort(subName//' ERROR: nf90_get_var dfoxd') + if (rc/=nf90_noerr) call shr_sys_abort(subName//' ERROR: nf90_get_var dfoxd', rc=rc) rc = nf90_inq_varid(fileid,'species_name_table',varid) - if (rc/=nf90_noerr) call shr_sys_abort(subName//' ERROR: nf90_inq_varid species_name_table') + if (rc/=nf90_noerr) call shr_sys_abort(subName//' ERROR: nf90_inq_varid species_name_table', rc=rc) rc = nf90_get_var(fileid,varid,species_name_table) - if (rc/=nf90_noerr) call shr_sys_abort(subName//' ERROR: nf90_get_var species_name_table') + if (rc/=nf90_noerr) call shr_sys_abort(subName//' ERROR: nf90_get_var species_name_table', rc=rc) rc = nf90_inq_varid(fileid,'dheff',varid) - if (rc/=nf90_noerr) call shr_sys_abort(subName//' ERROR: nf90_inq_varid dheff') + if (rc/=nf90_noerr) call shr_sys_abort(subName//' ERROR: nf90_inq_varid dheff', rc=rc) rc = nf90_get_var(fileid,varid,dheff) - if (rc/=nf90_noerr) call shr_sys_abort(subName//' ERROR: nf90_get_var dheff') + if (rc/=nf90_noerr) call shr_sys_abort(subName//' ERROR: nf90_get_var dheff', rc=rc) rc = nf90_close(fileid) - if (rc/=nf90_noerr) call shr_sys_abort(subName//' ERROR: nf90_close') + if (rc/=nf90_noerr) call shr_sys_abort(subName//' ERROR: nf90_close', rc=rc) end if call ESMF_LogWrite(subname//' bcast mol_wgts', ESMF_LOGMSG_INFO) call ESMF_VMBroadcast(vm, mol_wgts, n_species_table, 0, rc=rc ) diff --git a/mediator/esmFlds.F90 b/mediator/esmFlds.F90 index 1b29fbe71..7a2959f4c 100644 --- a/mediator/esmFlds.F90 +++ b/mediator/esmFlds.F90 @@ -4,7 +4,7 @@ module esmflds use med_internalstate_mod, only : compname, compocn, compatm, compice, comprof use med_internalstate_mod, only : mapfcopy, mapnames, mapunset use med_utils_mod , only : chkerr => med_utils_ChkErr - use shr_sys_mod , only : shr_sys_abort + use shr_log_mod , only : shr_log_error implicit none private @@ -335,7 +335,8 @@ function med_fldList_GetFld(fields, fldname, rc) result(newfld) write(6,*) trim(subname)//' input flds entry is ',trim(newfld%stdname) newfld => newfld%next end do - call shr_sys_abort(subname // 'ERROR: fldname '// trim(fldname) // ' not found in input flds') + call shr_log_error(subname // 'ERROR: fldname '// trim(fldname) // ' not found in input flds', rc=rc) + return endif end function med_fldList_GetFld @@ -467,8 +468,9 @@ subroutine med_fldList_Realize(state, fldList, flds_scalar_name, flds_scalar_num rc = ESMF_SUCCESS if (present(grid) .and. present(mesh)) then - call shr_sys_abort(trim(subname)//trim(tag)//": ERROR both grid and mesh not allowed", & + call shr_log_error(trim(subname)//trim(tag)//": ERROR both grid and mesh not allowed", & line=__LINE__, file=u_FILE_u, rc=rc) + return endif nullify(StandardNameList) @@ -568,8 +570,9 @@ subroutine med_fldList_Realize(state, fldList, flds_scalar_name, flds_scalar_num field = ESMF_FieldCreate(mesh, ESMF_TYPEKIND_R8, name=shortname, meshloc=ESMF_MESHLOC_ELEMENT, rc=rc) if (ESMF_LogFoundError(rcToCheck=rc, msg=ESMF_LOGERR_PASSTHRU, line=__LINE__, file=u_FILE_u)) return else - call shr_sys_abort(trim(subname)//trim(tag)//": ERROR grid or mesh expected", & - line=__LINE__, file=u_FILE_u) + call shr_log_error(trim(subname)//trim(tag)//": ERROR grid or mesh expected", & + line=__LINE__, file=u_FILE_u, rc=rc) + return endif ! NOW call NUOPC_Realize @@ -667,7 +670,8 @@ subroutine med_fldList_GetFldInfo(fldList, fldindex, compsrc, stdname, shortname newfld => newfld%next enddo if( .not. associated(newfld)) then - call shr_sys_abort(subname//' No field found') + call shr_log_error(subname//' No field found', rc=rc) + return endif call med_fld_GetFldInfo(newfld, compsrc, stdname, shortname, mapindex, mapFile, mapnorm, merge_fields, merge_type, merge_fracname, rc) @@ -708,27 +712,27 @@ subroutine med_fld_GetFldInfo(newfld, compsrc, stdname, shortname, mapindex, map endif if(present(mapindex)) then - if(lcompsrc < 0) call shr_sys_abort("In med_fld_GetFldInfo mapindex requiring compsrc was requested but compsrc was not provided. ") + if(lcompsrc < 0) call shr_log_error("In med_fld_GetFldInfo mapindex requiring compsrc was requested but compsrc was not provided. ", rc=lrc) mapindex = newfld%mapindex(lcompsrc) endif if(present(mapfile)) then - if(lcompsrc < 0) call shr_sys_abort("In med_fld_GetFldInfo mapfile requiring compsrc was requested but compsrc was not provided. ") + if(lcompsrc < 0) call shr_log_error("In med_fld_GetFldInfo mapfile requiring compsrc was requested but compsrc was not provided. ", rc=lrc) mapfile = newfld%mapfile(lcompsrc) endif if(present(mapnorm)) then - if(lcompsrc < 0) call shr_sys_abort("In med_fld_GetFldInfo mapnorm requiring compsrc was requested but compsrc was not provided. ") + if(lcompsrc < 0) call shr_log_error("In med_fld_GetFldInfo mapnorm requiring compsrc was requested but compsrc was not provided. ", rc=lrc) mapnorm = newfld%mapnorm(lcompsrc) endif if(present(merge_fields)) then - if(lcompsrc < 0) call shr_sys_abort("In med_fld_GetFldInfo merge_fields requiring compsrc was requested but compsrc was not provided. ") + if(lcompsrc < 0) call shr_log_error("In med_fld_GetFldInfo merge_fields requiring compsrc was requested but compsrc was not provided. ", rc=lrc) merge_fields = newfld%merge_fields(lcompsrc) endif if(present(merge_type)) then - if(lcompsrc < 0) call shr_sys_abort("In med_fld_GetFldInfo merge_type requiring compsrc was requested but compsrc was not provided. ") + if(lcompsrc < 0) call shr_log_error("In med_fld_GetFldInfo merge_type requiring compsrc was requested but compsrc was not provided. ", rc=lrc) merge_type = newfld%merge_types(lcompsrc) endif if(present(merge_fracname)) then - if(lcompsrc < 0) call shr_sys_abort("In med_fld_GetFldInfo merge_fracname requiring compsrc was requested but compsrc was not provided. ") + if(lcompsrc < 0) call shr_log_error("In med_fld_GetFldInfo merge_fracname requiring compsrc was requested but compsrc was not provided. ", rc=lrc) merge_fracname = newfld%merge_fracnames(lcompsrc) endif if(present(rc)) rc=lrc @@ -775,7 +779,8 @@ subroutine med_fldList_GetFldNames(fields, fldnames, rc) if(present(rc)) rc = ESMF_SUCCESS if (.not. associated(fldnames) .or. .not. allocated(fields%mapindex)) then write(msg, *) "med_fldList_GetFldNames: ERROR either fields or fldnames have not been allocated. ",associated(fldnames), allocated(fields%mapindex) - call shr_sys_abort(msg) + call shr_log_error(msg, rc=rc) + return endif n = 0 newfld => fields diff --git a/mediator/med.F90 b/mediator/med.F90 index 2632c502c..e48057b02 100644 --- a/mediator/med.F90 +++ b/mediator/med.F90 @@ -51,7 +51,8 @@ module MED use esmFldsExchange_cesm_mod , only : esmFldsExchange_cesm use esmFldsExchange_hafs_mod , only : esmFldsExchange_hafs use med_phases_profile_mod , only : med_phases_profile_finalize - + use shr_log_mod , only : shr_log_error + implicit none private @@ -672,7 +673,7 @@ subroutine AdvertiseFields(gcomp, importState, exportState, clock, rc) use ESMF , only : ESMF_GridComp, ESMF_State, ESMF_Clock, ESMF_SUCCESS, ESMF_LogFoundAllocError use ESMF , only : ESMF_StateIsCreated use ESMF , only : ESMF_LogMsg_Info, ESMF_LogWrite - use ESMF , only : ESMF_END_ABORT, ESMF_Finalize, ESMF_MAXSTR + use ESMF , only : ESMF_MAXSTR use NUOPC , only : NUOPC_AddNamespace, NUOPC_Advertise, NUOPC_AddNestedState use NUOPC , only : NUOPC_CompAttributeGet, NUOPC_CompAttributeSet, NUOPC_CompAttributeAdd use esmFlds, only : med_fldlist_init1, med_fld_GetFldInfo, med_fldList_entry_type @@ -800,8 +801,8 @@ subroutine AdvertiseFields(gcomp, importState, exportState, clock, rc) call NUOPC_CompAttributeGet(gcomp, name='aoflux_ccpp_suite', value=cvalue, isPresent=isPresent, isSet=isSet, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return if (.not. isPresent .and. .not. isSet) then - call ESMF_LogWrite("aoflux_ccpp_suite need to be provided when aoflux_code is set to 'ccpp'", ESMF_LOGMSG_INFO) - call ESMF_Finalize(endflag=ESMF_END_ABORT) + call shr_log_error("aoflux_ccpp_suite need to be provided when aoflux_code is set to 'ccpp'", rc=rc) + return end if aoflux_ccpp_suite = trim(cvalue) if (maintask) then @@ -839,8 +840,8 @@ subroutine AdvertiseFields(gcomp, importState, exportState, clock, rc) call esmFldsExchange_hafs(gcomp, phase='advertise', rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return else - call ESMF_LogWrite(trim(coupling_mode)//' is not a valid coupling_mode', ESMF_LOGMSG_INFO) - call ESMF_Finalize(endflag=ESMF_END_ABORT) + call shr_log_error(trim(coupling_mode)//' is not a valid coupling_mode', rc=rc) + return end if ! Set default masking for mapping @@ -1103,7 +1104,7 @@ subroutine realizeConnectedGrid(State,string,rc) use ESMF , only : ESMF_MAXSTR, ESMF_FieldStatus_Flag, ESMF_GeomType_Flag, ESMF_StateGet use ESMF , only : ESMF_FieldGet, ESMF_DistGridGet, ESMF_GridCompGet use ESMF , only : ESMF_GeomType_Grid, ESMF_AttributeGet, ESMF_DistGridCreate, ESMF_FieldEmptySet - use ESMF , only : ESMF_GridCreate, ESMF_LogWrite, ESMF_LogMsg_Info, ESMF_GridGet, ESMF_Failure + use ESMF , only : ESMF_GridCreate, ESMF_LogWrite, ESMF_LogMsg_Info, ESMF_GridGet use ESMF , only : ESMF_LogMsg_Warning use ESMF , only : ESMF_FieldStatus_Empty, ESMF_FieldStatus_Complete, ESMF_FieldStatus_GridSet use ESMF , only : ESMF_GeomType_Mesh, ESMF_MeshGet, ESMF_Mesh, ESMF_MeshEmptyCreate @@ -1328,9 +1329,7 @@ subroutine realizeConnectedGrid(State,string,rc) enddo else ! geomtype - - call ESMF_LogWrite(trim(subname)//": ERROR geomtype not supported ", ESMF_LOGMSG_INFO) - rc=ESMF_FAILURE + call shr_log_error(trim(subname)//": ERROR geomtype not supported ", rc=rc) return endif ! geomtype @@ -1347,10 +1346,9 @@ subroutine realizeConnectedGrid(State,string,rc) else - call ESMF_LogWrite(trim(subname)//": ERROR fieldStatus not supported ", ESMF_LOGMSG_INFO) - rc=ESMF_FAILURE + call shr_log_error(trim(subname)//": ERROR fieldStatus not supported ", rc=rc) return - + endif ! fieldStatus enddo ! nflds @@ -1442,7 +1440,7 @@ subroutine completeFieldInitialization(State,rc) use ESMF , only : ESMF_SUCCESS, ESMF_LogWrite, ESMF_LOGMSG_INFO, ESMF_FieldGet use ESMF , only : ESMF_GeomType_Flag, ESMF_FieldCreate, ESMF_MeshCreate, ESMF_GEOMTYPE_GRID use ESMF , only : ESMF_MeshLoc_Element, ESMF_TYPEKIND_R8, ESMF_FIELDSTATUS_GRIDSET - use ESMF , only : ESMF_AttributeGet, ESMF_MeshWrite, ESMF_FAILURE + use ESMF , only : ESMF_AttributeGet, ESMF_MeshWrite use NUOPC , only : NUOPC_getStateMemberLists, NUOPC_Realize ! input/output variables @@ -1522,8 +1520,7 @@ subroutine completeFieldInitialization(State,rc) call ESMF_FieldGet(meshField, status=fieldStatus, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return if (fieldStatus == ESMF_FIELDSTATUS_GRIDSET ) then - call ESMF_LogWrite(trim(subname)//": ERROR fieldStatus not complete ", ESMF_LOGMSG_INFO) - rc = ESMF_FAILURE + call shr_log_error(trim(subname)//": ERROR fieldStatus not complete ", rc=rc) return end if call Field_GeomPrint(meshField, trim(subname)//':'//trim(fieldName), rc=rc) @@ -2263,7 +2260,7 @@ subroutine SetRunClock(gcomp, rc) use ESMF , only : ESMF_GridComp, ESMF_CLOCK, ESMF_Time, ESMF_TimeInterval use ESMF , only : ESMF_LogWrite, ESMF_LOGMSG_INFO, ESMF_ClockGet, ESMF_ClockSet - use ESMF , only : ESMF_Success, ESMF_Failure + use ESMF , only : ESMF_Success use ESMF , only : ESMF_Alarm, ESMF_ALARMLIST_ALL, ESMF_ClockGetAlarmList use ESMF , only : ESMF_AlarmCreate, ESMF_AlarmSet, ESMF_ClockAdvance use ESMF , only : ESMF_ClockGetAlarmList @@ -2353,7 +2350,7 @@ subroutine med_meshinfo_create(FB, mesh_info, FBArea, rc) use ESMF , only : ESMF_Array, ESMF_ArrayCreate, ESMF_ArrayDestroy, ESMF_Field, ESMF_FieldGet use ESMF , only : ESMF_DistGrid, ESMF_FieldBundle, ESMF_FieldRegridGetArea, ESMF_FieldBundleGet use ESMF , only : ESMF_Mesh, ESMF_MeshGet, ESMF_MESHLOC_ELEMENT, ESMF_TYPEKIND_R8 - use ESMF , only : ESMF_SUCCESS, ESMF_FAILURE, ESMF_LogWrite, ESMF_LOGMSG_INFO + use ESMF , only : ESMF_SUCCESS, ESMF_LogWrite, ESMF_LOGMSG_INFO use ESMF , only : ESMF_FieldCreate, ESMF_FieldBundleCreate, ESMF_FieldBundleAdd use med_internalstate_mod , only : mesh_info_type diff --git a/mediator/med_diag_mod.F90 b/mediator/med_diag_mod.F90 index 8c09b9ccd..df0d4e351 100644 --- a/mediator/med_diag_mod.F90 +++ b/mediator/med_diag_mod.F90 @@ -32,7 +32,7 @@ module med_diag_mod use med_methods_mod , only : fldbun_fldChk => med_methods_FB_FldChk use med_utils_mod , only : chkerr => med_utils_ChkErr use perf_mod , only : t_startf, t_stopf - use shr_sys_mod , only : shr_sys_abort + use shr_log_mod , only : shr_log_error implicit none private @@ -513,9 +513,9 @@ subroutine med_diag_zero_mode(mode, rc) budget_counter(:,:,period_inst) = 0.0_r8 budget_counter(:,:,period_inst+1:) = 1.0_r8 else - call shr_sys_abort(trim(subname)//' mode '//trim(mode)//& + call shr_log_error(trim(subname)//' mode '//trim(mode)//& ' not recognized', & - line=__LINE__, file=u_FILE_u) + line=__LINE__, file=u_FILE_u, rc=rc) endif end subroutine med_diag_zero_mode diff --git a/mediator/med_io_mod.F90 b/mediator/med_io_mod.F90 index d60ce3755..c86f87c72 100644 --- a/mediator/med_io_mod.F90 +++ b/mediator/med_io_mod.F90 @@ -19,7 +19,7 @@ module med_io_mod use med_methods_mod , only : FB_getFldPtr => med_methods_FB_getFldPtr use med_methods_mod , only : FB_getNameN => med_methods_FB_getNameN use med_utils_mod , only : chkerr => med_utils_ChkErr - use shr_sys_mod , only : shr_sys_abort + use shr_log_mod , only : shr_log_error implicit none private @@ -195,7 +195,8 @@ subroutine med_io_init(gcomp, rc) else if (trim(cvalue) .eq. '64BIT_DATA') then pio_ioformat = PIO_64BIT_DATA else - call shr_sys_abort(trim(subname)//': need to provide valid option for pio_ioformat (CLASSIC|64BIT_OFFSET|64BIT_DATA)') + call shr_log_error(trim(subname)//': need to provide valid option for pio_ioformat (CLASSIC|64BIT_OFFSET|64BIT_DATA)', rc=rc) + return end if else cvalue = '64BIT_OFFSET' @@ -218,7 +219,8 @@ subroutine med_io_init(gcomp, rc) else if (trim(cvalue) .eq. 'NETCDF4P') then pio_iotype = PIO_IOTYPE_NETCDF4P else - call shr_sys_abort(trim(subname)//': need to provide valid option for pio_typename (NETCDF|PNETCDF|NETCDF4C|NETCDF4P)') + call shr_log_error(trim(subname)//': need to provide valid option for pio_typename (NETCDF|PNETCDF|NETCDF4C|NETCDF4P)', rc=rc) + return end if else cvalue = 'NETCDF' @@ -327,7 +329,8 @@ subroutine med_io_init(gcomp, rc) else if (trim(cvalue) .eq. 'SUBSET') then pio_rearranger = PIO_REARR_SUBSET else - call shr_sys_abort(trim(subname)//': need to provide valid option for pio_rearranger (BOX|SUBSET)') + call shr_log_error(trim(subname)//': need to provide valid option for pio_rearranger (BOX|SUBSET)', rc=rc) + return end if else cvalue = 'SUBSET' @@ -348,7 +351,8 @@ subroutine med_io_init(gcomp, rc) if (isPresent .and. isSet) then read(cvalue,*) pio_debug_level if (pio_debug_level < 0 .or. pio_debug_level > 6) then - call shr_sys_abort(trim(subname)//': need to provide valid option for pio_debug_level (0-6)') + call shr_log_error(trim(subname)//': need to provide valid option for pio_debug_level (0-6)', rc=rc) + return end if else pio_debug_level = 0 @@ -370,7 +374,8 @@ subroutine med_io_init(gcomp, rc) else if (trim(cvalue) .eq. 'COLL') then pio_rearr_comm_type = PIO_REARR_COMM_COLL else - call shr_sys_abort(trim(subname)//': need to provide valid option for pio_rearr_comm_type (P2P|COLL)') + call shr_log_error(trim(subname)//': need to provide valid option for pio_rearr_comm_type (P2P|COLL)', rc=rc) + return end if else cvalue = 'P2P' @@ -393,7 +398,8 @@ subroutine med_io_init(gcomp, rc) else if (trim(cvalue) .eq. '2DDISABLE') then pio_rearr_comm_fcd = PIO_REARR_COMM_FC_2D_DISABLE else - call shr_sys_abort(trim(subname)//': need to provide valid option for pio_rearr_comm_fcd (2DENABLE|IO2COMP|COMP2IO|2DDISABLE)') + call shr_log_error(trim(subname)//': need to provide valid option for pio_rearr_comm_fcd (2DENABLE|IO2COMP|COMP2IO|2DDISABLE)', rc=rc) + return end if else cvalue = '2DENABLE' @@ -656,7 +662,8 @@ character(len=8) function med_io_sec2hms (seconds, rc) rc = ESMF_SUCCESS if (seconds < 0 .or. seconds > 86400) then - call shr_sys_abort('med_io_sec2hms: bad input seconds') + call shr_log_error('med_io_sec2hms: bad input seconds', rc=rc) + return end if hours = seconds / 3600 @@ -665,12 +672,14 @@ character(len=8) function med_io_sec2hms (seconds, rc) if (minutes < 0 .or. minutes > 60) then write(msg,*)'med_io_sec2hms: bad minutes = ',minutes - call shr_sys_abort(msg) + call shr_log_error(msg, rc=rc) + return end if if (secs < 0 .or. secs > 60) then write(msg,*)'med_io_sec2hms: bad secs = ',secs - call shr_sys_abort(msg) + call shr_log_error(msg, rc=rc) + return end if write(med_io_sec2hms,80) hours, minutes, secs @@ -862,7 +871,8 @@ subroutine med_io_write_FB(io_file, FB, whead, wdata, nx, ny, nt, & call ESMF_LogWrite(trim(tmpstr), ESMF_LOGMSG_INFO) if (lnx*lny*lntile /= ng) then write(tmpstr,*) subname,' ERROR: grid size not consistent ',ng,lnx,lny,lntile - call shr_sys_abort(trim(tmpstr)) + call shr_log_error(trim(tmpstr), rc=rc) + return end if else lnx = ng @@ -1378,8 +1388,9 @@ subroutine med_io_define_time(io_file, time_units, calendar, rc) rc = ESMF_SUCCESS if (.not. ESMF_CalendarIsCreated(calendar)) then - call shr_sys_abort(trim(subname)//' ERROR: calendar is not created ', & - line=__LINE__, file=u_FILE_u) + call shr_log_error(trim(subname)//' ERROR: calendar is not created ', & + line=__LINE__, file=u_FILE_u, rc=rc) + return end if ! define time and add calendar attribute @@ -1539,8 +1550,9 @@ subroutine med_io_read_FB(filename, vm, FB, pre, frame, rc) call ESMF_LogWrite(trim(subname)//' open file '//trim(filename), ESMF_LOGMSG_INFO) if (chkerr(rc,__LINE__,u_FILE_u)) return else - call shr_sys_abort(trim(subname)//' ERROR: file invalid '//trim(filename), & - line=__LINE__, file=u_FILE_u) + call shr_log_error(trim(subname)//' ERROR: file invalid '//trim(filename), & + line=__LINE__, file=u_FILE_u, rc=rc) + return endif call pio_seterrorhandling(pioid, PIO_BCAST_ERROR) @@ -1749,7 +1761,8 @@ subroutine med_io_read_init_iodesc(FB, name1, pioid, iodesc, rc) deallocate(minIndexPTile, maxIndexPTile) else - call shr_sys_abort(trim(subname)//' ERROR: '//trim(name1)//' is not present, aborting ') + call shr_log_error(trim(subname)//' ERROR: '//trim(name1)//' is not present, aborting ', rc=rc) + return end if ! end if rcode check end subroutine med_io_read_init_iodesc @@ -1822,7 +1835,8 @@ subroutine med_io_read_int1d(filename, vm, idata, dname, rc) rcode = pio_get_att(pioid,pio_global,"file_version",lversion) call pio_seterrorhandling(pioid,PIO_INTERNAL_ERROR) else - call shr_sys_abort(trim(subname)//'ERROR: file invalid '//trim(filename)//' '//trim(dname)) + call shr_log_error(trim(subname)//'ERROR: file invalid '//trim(filename)//' '//trim(dname), rc=rc) + return endif if (trim(lversion) == trim(version)) then @@ -1904,7 +1918,8 @@ subroutine med_io_read_r81d(filename, vm, rdata, dname, rc) rcode = pio_get_att(pioid,pio_global,"file_version",lversion) call pio_seterrorhandling(pioid,PIO_INTERNAL_ERROR) else - call shr_sys_abort(trim(subname)//'ERROR: file invalid '//trim(filename)//' '//trim(dname)) + call shr_log_error(trim(subname)//'ERROR: file invalid '//trim(filename)//' '//trim(dname), rc=rc) + return endif if (trim(lversion) == trim(version)) then @@ -1961,7 +1976,8 @@ subroutine med_io_read_char(filename, vm, rdata, dname, rc) rcode = pio_get_att(pioid,pio_global,"file_version",lversion) call pio_seterrorhandling(pioid,PIO_INTERNAL_ERROR) else - call shr_sys_abort(trim(subname)//'ERROR: file invalid '//trim(filename)//' '//trim(dname)) + call shr_log_error(trim(subname)//'ERROR: file invalid '//trim(filename)//' '//trim(dname), rc=rc) + return endif if (trim(lversion) == trim(version)) then diff --git a/mediator/med_map_mod.F90 b/mediator/med_map_mod.F90 index f75792698..5caeb8ca6 100644 --- a/mediator/med_map_mod.F90 +++ b/mediator/med_map_mod.F90 @@ -9,7 +9,7 @@ module med_map_mod use med_constants_mod , only : dbug_flag => med_constants_dbug_flag use med_utils_mod , only : chkerr => med_utils_ChkErr use perf_mod , only : t_startf, t_stopf - use shr_sys_mod , only : shr_sys_abort + use shr_log_mod , only : shr_log_error implicit none private @@ -145,8 +145,9 @@ subroutine med_map_RouteHandles_initfrom_esmflds(gcomp, flds_scalar_name, llogun ! Check number of fields in source FB on destination mesh and get destination field if (.not. ESMF_FieldBundleIsCreated(is_local%wrap%FBImp(n1,n2))) then - call shr_sys_abort(trim(subname)//'FBImp('//trim(compname(n1))//','//trim(compname(n2))//')'// & - ' has not been created', line=__LINE__, file=u_FILE_u) + call shr_log_error(trim(subname)//'FBImp('//trim(compname(n1))//','//trim(compname(n2))//')'// & + ' has not been created', line=__LINE__, file=u_FILE_u, rc=rc) + return end if call ESMF_FieldBundleGet(is_local%wrap%FBImp(n1,n2), fieldCount=fieldCount, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return @@ -582,8 +583,9 @@ subroutine med_map_routehandles_initfrom_field(n1, n2, fldsrc, flddst, mapindex, if (chkerr(rc,__LINE__,u_FILE_u)) return end if else - call shr_sys_abort(trim(subname)//' mapindex '//trim(mapname)//' not supported for '//trim(string), & - line=__LINE__, file=u_FILE_u) + call shr_log_error(trim(subname)//' mapindex '//trim(mapname)//' not supported for '//trim(string), & + line=__LINE__, file=u_FILE_u, rc=rc) + return end if ! consd_nstod method requires a second routehandle @@ -810,7 +812,8 @@ subroutine med_map_packed_field_create(destcomp, flds_scalar_name, & //', mapnorm '//trim(mapnorm_mapindex) & //' set; cannot set mapnorm to '//trim(packed_data(mapindex)%mapnorm) & //' '//trim(fieldnamelist(nf)) - call shr_sys_abort(trim(tmpstr)) + call shr_log_error(trim(tmpstr), rc=rc) + return end if end if diff --git a/mediator/med_merge_mod.F90 b/mediator/med_merge_mod.F90 index 9bdcb82a4..6d12fa929 100644 --- a/mediator/med_merge_mod.F90 +++ b/mediator/med_merge_mod.F90 @@ -16,7 +16,7 @@ module med_merge_mod use esmFlds , only : med_fldList_entry_type use esmFlds , only : med_fldList_findName use perf_mod , only : t_startf, t_stopf - use shr_sys_mod , only : shr_sys_abort + use shr_log_mod , only : shr_log_error implicit none private @@ -345,12 +345,14 @@ subroutine med_merge_auto_field(merge_type, field_out, ungriddedUBound_out, & if (merge_type == 'copy_with_weights' .or. merge_type == 'merge') then if (trim(fldw) == 'unset') then - call shr_sys_abort(trim(subname)//": error required merge_fracname is not set", & - line=__LINE__, file=u_FILE_u) + call shr_log_error(trim(subname)//": error required merge_fracname is not set", & + line=__LINE__, file=u_FILE_u, rc=rc) + return end if if (.not. FB_FldChk(FBw, trim(fldw), rc=rc)) then - call shr_sys_abort(trim(subname)//": error "//trim(fldw)//"is not in FBw", & - line=__LINE__, file=u_FILE_u) + call shr_log_error(trim(subname)//": error "//trim(fldw)//"is not in FBw", & + line=__LINE__, file=u_FILE_u, rc=rc) + return end if end if @@ -415,8 +417,9 @@ subroutine med_merge_auto_field(merge_type, field_out, ungriddedUBound_out, & dp1(:) = dp1(:) + dpf1(:) endif else - call shr_sys_abort(trim(subname)//": merge type "//trim(merge_type)//" not supported", & - line=__LINE__, file=u_FILE_u) + call shr_log_error(trim(subname)//": merge type "//trim(merge_type)//" not supported", & + line=__LINE__, file=u_FILE_u, rc=rc) + return end if end subroutine med_merge_auto_field @@ -470,8 +473,9 @@ subroutine med_merge_auto_errcheck(compsrc, fldname_out, field_out, & call ESMF_FieldBundleGet(FBMed2, trim(merge_fldname), field=field_in, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return else - call shr_sys_abort(trim(subname)//": ERROR merge_fldname = "//trim(merge_fldname)//" not found", & + call shr_log_error(trim(subname)//": ERROR merge_fldname = "//trim(merge_fldname)//" not found", & rc=rc) + return end if end if endif @@ -486,7 +490,7 @@ subroutine med_merge_auto_errcheck(compsrc, fldname_out, field_out, & ' for '//trim(merge_fldname), & ' not equal to output field ungriddedUbound ',ungriddedUbound_out,' for '//trim(fldname_out) - call shr_sys_abort(errmsg) + call shr_log_error(errmsg, rc=rc) endif end subroutine med_merge_auto_errcheck @@ -547,8 +551,9 @@ subroutine med_merge_field_1D(FBout, fnameout, & (present(FBinC) .and. .not.present(fnameC)) .or. & (present(FBinD) .and. .not.present(fnameD)) .or. & (present(FBinE) .and. .not.present(fnameE))) then - call shr_sys_abort(trim(subname)//": ERROR fname not present with FBin", & + call shr_log_error(trim(subname)//": ERROR fname not present with FBin", & line=__LINE__, file=u_FILE_u, rc=dbrc) + return endif if (.not. FB_FldChk(FBout, trim(fnameout), rc=rc)) then @@ -636,14 +641,16 @@ subroutine med_merge_field_1D(FBout, fnameout, & if (FBinfound) then if (lbound(dataPtr,1) /= lbound(dataOut,1) .or. ubound(dataPtr,1) /= ubound(dataOut,1)) then - call shr_sys_abort(trim(subname)//": ERROR FBin wrong size", & + call shr_log_error(trim(subname)//": ERROR FBin wrong size", & line=__LINE__, file=u_FILE_u, rc=dbrc) + return endif if (wgtfound) then if (lbound(dataPtr,1) /= lbound(wgt,1) .or. ubound(dataPtr,1) /= ubound(wgt,1)) then - call shr_sys_abort(trim(subname)//": ERROR wgt wrong size", & + call shr_log_error(trim(subname)//": ERROR wgt wrong size", & line=__LINE__, file=u_FILE_u, rc=dbrc) + return endif do i = lb1,ub1 dataOut(i) = dataOut(i) + dataPtr(i) * wgt(i) @@ -731,13 +738,15 @@ subroutine merge_listGetName(list, k, name, rc) return end if if (.not. valid_list) then - call shr_sys_abort("ERROR: invalid list = "//trim(list)) + call shr_log_error("ERROR: invalid list = "//trim(list), rc=rc) + return end if !--- check that this is a valid index --- kFlds = merge_listGetNum(list) if (k<1 .or. kFlds fieldCount) then - call shr_sys_abort(trim(subname)//": ERROR fieldnum > fieldCount ") + call shr_log_error(trim(subname)//": ERROR fieldnum > fieldCount ", rc=rc) + return endif allocate(lfieldnamelist(fieldCount)) call ESMF_FieldBundleGet(FB, fieldNameList=lfieldnamelist, rc=rc) @@ -606,7 +616,8 @@ subroutine med_methods_State_getNameN(State, fieldnum, fieldname, rc) call ESMF_StateGet(State, itemCount=fieldCount, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return if (fieldnum > fieldCount) then - call shr_sys_abort(trim(subname)//": ERROR fieldnum > fieldCount ") + call shr_log_error(trim(subname)//": ERROR fieldnum > fieldCount ", rc=rc) + return endif allocate(lfieldnamelist(fieldCount)) call ESMF_StateGet(State, itemNameList=lfieldnamelist, rc=rc) @@ -721,8 +732,9 @@ subroutine med_methods_FB_reset(FB, value, rc) elseif (lrank == 2) then fldptr2 = lvalue else - call shr_sys_abort(trim(subname)//": ERROR in rank "//trim(lfieldnamelist(n)), & - line=__LINE__, file=u_FILE_u) + call shr_log_error(trim(subname)//": ERROR in rank "//trim(lfieldnamelist(n)), & + line=__LINE__, file=u_FILE_u, rc=rc) + return endif enddo @@ -791,8 +803,9 @@ subroutine med_methods_State_reset(State, value, rc) elseif (lrank == 2) then fldptr2 = lvalue else - call shr_sys_abort(trim(subname)//": ERROR in rank "//trim(lfieldnamelist(n)), & - line=__LINE__, file=u_FILE_u) + call shr_log_error(trim(subname)//": ERROR in rank "//trim(lfieldnamelist(n)), & + line=__LINE__, file=u_FILE_u, rc=rc) + return endif enddo deallocate(lfieldnamelist) @@ -868,7 +881,8 @@ subroutine med_methods_FB_average(FB, count, rc) enddo enddo else - call shr_sys_abort(trim(subname)//": ERROR rank not supported ") + call shr_log_error(trim(subname)//": ERROR rank not supported ", rc=rc) + return endif enddo deallocate(lfieldnamelist) @@ -950,7 +964,8 @@ subroutine med_methods_FB_diagnose(FB, string, rc) endif else - call shr_sys_abort(trim(subname)//": ERROR rank not supported ") + call shr_log_error(trim(subname)//": ERROR rank not supported ", rc=rc) + return endif call ESMF_LogWrite(trim(msgString), ESMF_LOGMSG_INFO) enddo @@ -1015,7 +1030,8 @@ subroutine med_methods_FB_write(FB, string, rc) call ESMF_FieldWriteVTK(lfield, trim(lfieldnamelist(n))//'_'//trim(lstring), rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return else - call shr_sys_abort(trim(subname)//": ERROR rank not supported ") + call shr_log_error(trim(subname)//": ERROR rank not supported ", rc=rc) + return endif end do @@ -1140,7 +1156,8 @@ subroutine med_methods_State_diagnose(State, string, rc) " no data" endif else - call shr_sys_abort(trim(subname)//": ERROR rank not supported ") + call shr_log_error(trim(subname)//": ERROR rank not supported ", rc=rc) + return endif call ESMF_LogWrite(trim(msgString), ESMF_LOGMSG_INFO) @@ -1279,7 +1296,8 @@ subroutine med_methods_Field_diagnose(field, fieldname, string, rc) write(msgString,'(A,a)') trim(subname)//' '//trim(lstring)//': '//trim(fieldname)," no data" endif else - call shr_sys_abort(trim(subname)//": ERROR rank not supported ") + call shr_log_error(trim(subname)//": ERROR rank not supported ", rc=rc) + return endif call ESMF_LogWrite(trim(msgString), ESMF_LOGMSG_INFO) @@ -1384,7 +1402,8 @@ subroutine med_methods_FB_accum(FBout, FBin, copy, rc) elseif (lranki == 1 .and. lranko == 1) then if (.not.med_methods_FieldPtr_Compare(dataPtro1, dataPtri1, subname, rc)) then - call shr_sys_abort(trim(subname)//": ERROR in dataPtr1 size ") + call shr_log_error(trim(subname)//": ERROR in dataPtr1 size ", rc=rc) + return endif if (lcopy) then @@ -1400,7 +1419,8 @@ subroutine med_methods_FB_accum(FBout, FBin, copy, rc) elseif (lranki == 2 .and. lranko == 2) then if (.not.med_methods_FieldPtr_Compare(dataPtro2, dataPtri2, subname, rc)) then - call shr_sys_abort(trim(subname)//": ERROR in dataPtr2 size ") + call shr_log_error(trim(subname)//": ERROR in dataPtr2 size ", rc=rc) + return endif if (lcopy) then @@ -1419,7 +1439,8 @@ subroutine med_methods_FB_accum(FBout, FBin, copy, rc) else write(msgString,'(a,2i8)') trim(subname)//": ranki, ranko = ",lranki,lranko - call shr_sys_abort(trim(subname)//": ERROR ranki ranko not supported "//trim(msgstring)//"\n"//trim(lfieldnamelist(n))) + call shr_log_error(trim(subname)//": ERROR ranki ranko not supported "//trim(msgstring)//"\n"//trim(lfieldnamelist(n)), rc=rc) + return endif endif @@ -1469,7 +1490,8 @@ logical function med_methods_FB_FldChk(FB, fldname, rc) call ESMF_FieldBundleGet(FB, fieldName=trim(fldname), isPresent=isPresent, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) then - call shr_sys_abort(string=trim(subname)//" Error checking field: "//trim(fldname), line=__LINE__,file=u_FILE_u) + call shr_log_error(string=trim(subname)//" Error checking field: "//trim(fldname), line=__LINE__,file=u_FILE_u, rc=rc) + return endif if (isPresent) then med_methods_FB_FldChk = .true. @@ -1516,8 +1538,9 @@ subroutine med_methods_Field_GetFldPtr(field, fldptr1, fldptr2, rank, abort, rc) endif if (.not.present(rc)) then - call shr_sys_abort(trim(subname)//": ERROR rc not present ", & - line=__LINE__, file=u_FILE_u) + call shr_log_error(trim(subname)//": ERROR rc not present ", & + line=__LINE__, file=u_FILE_u, rc=rc) + return endif rc = ESMF_SUCCESS @@ -1534,7 +1557,8 @@ subroutine med_methods_Field_GetFldPtr(field, fldptr1, fldptr2, rank, abort, rc) if (status /= ESMF_FIELDSTATUS_COMPLETE) then lrank = 0 if (labort) then - call shr_sys_abort(trim(subname)//": ERROR data not allocated ") + call shr_log_error(trim(subname)//": ERROR data not allocated ", rc=rc) + return else call ESMF_LogWrite(trim(subname)//": WARNING data not allocated ", ESMF_LOGMSG_INFO) endif @@ -1555,7 +1579,8 @@ subroutine med_methods_Field_GetFldPtr(field, fldptr1, fldptr2, rank, abort, rc) if (chkerr(rc,__LINE__,u_FILE_u)) return if (nnodes == 0 .and. nelements == 0) lrank = 0 else - call shr_sys_abort(trim(subname)//": ERROR geomtype not supported ") + call shr_log_error(trim(subname)//": ERROR geomtype not supported ", rc=rc) + return endif ! geomtype if (lrank == 0) then @@ -1564,23 +1589,26 @@ subroutine med_methods_Field_GetFldPtr(field, fldptr1, fldptr2, rank, abort, rc) elseif (lrank == 1) then if (.not.present(fldptr1)) then - call shr_sys_abort(trim(subname)//": ERROR missing rank=1 array ", & - line=__LINE__, file=u_FILE_u) + call shr_log_error(trim(subname)//": ERROR missing rank=1 array ", & + line=__LINE__, file=u_FILE_u, rc=rc) + return endif call ESMF_FieldGet(field, farrayPtr=fldptr1, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return elseif (lrank == 2) then if (.not.present(fldptr2)) then - call shr_sys_abort(trim(subname)//": ERROR missing rank=2 array ", & - line=__LINE__, file=u_FILE_u) + call shr_log_error(trim(subname)//": ERROR missing rank=2 array ", & + line=__LINE__, file=u_FILE_u, rc=rc) + return endif call ESMF_FieldGet(field, farrayPtr=fldptr2, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return else - call shr_sys_abort(trim(subname)//": ERROR in rank ", & - line=__LINE__, file=u_FILE_u) + call shr_log_error(trim(subname)//": ERROR in rank ", & + line=__LINE__, file=u_FILE_u, rc=rc) + return endif endif ! status @@ -1624,16 +1652,17 @@ subroutine med_methods_FB_GetFldPtr(FB, fldname, fldptr1, fldptr2, rank, field, endif if (.not.present(rc)) then - call shr_sys_abort(trim(subname)//": ERROR rc not present "//trim(fldname), & - line=__LINE__, file=u_FILE_u) + call shr_log_error(trim(subname)//": ERROR rc not present "//trim(fldname), & + line=__LINE__, file=u_FILE_u, rc=rc) + return endif rc = ESMF_SUCCESS if (.not. med_methods_FB_FldChk(FB, trim(fldname), rc=rc)) then - - call shr_sys_abort(trim(subname)//": ERROR field "//trim(fldname)//" not in FB ", & - line=__LINE__, file=u_FILE_u) + call shr_log_error(trim(subname)//": ERROR field "//trim(fldname)//" not in FB ", & + line=__LINE__, file=u_FILE_u, rc=rc) + return endif call ESMF_FieldBundleGet(FB, fieldName=trim(fldname), field=lfield, rc=rc) @@ -1676,7 +1705,8 @@ logical function med_methods_FieldPtr_Compare1(fldptr1, fldptr2, cstring, rc) if (lbound(fldptr2,1) /= lbound(fldptr1,1) .or. ubound(fldptr2,1) /= ubound(fldptr1,1)) then write(msgString,*) trim(subname)//': fldptr1 ',lbound(fldptr1),ubound(fldptr1),"\n",& trim(subname)//': fldptr2 ',lbound(fldptr2),ubound(fldptr2),": ERROR in data size "//trim(cstring) - call shr_sys_abort(msgstring,rc=rc) + call shr_log_error(msgstring,rc=rc) + return else med_methods_FieldPtr_Compare1 = .true. endif @@ -1711,7 +1741,8 @@ logical function med_methods_FieldPtr_Compare2(fldptr1, fldptr2, cstring, rc) ubound(fldptr2,2) /= ubound(fldptr1,2) .or. ubound(fldptr2,1) /= ubound(fldptr1,1)) then write(msgString,*) trim(subname)//': fldptr2 ',lbound(fldptr2),ubound(fldptr2),': fldptr1 ',lbound(fldptr1),ubound(fldptr1),& ": ERROR in data size "//trim(cstring) - call shr_sys_abort(trim(msgString)) + call shr_log_error(trim(msgString),rc=rc) + return else med_methods_FieldPtr_Compare2 = .true. endif @@ -1834,8 +1865,9 @@ subroutine med_methods_Field_GeomPrint(field, string, rc) call ESMF_FieldGet(field, status=status, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return if (status == ESMF_FIELDSTATUS_EMPTY) then - call shr_sys_abort(trim(subname)//":"//trim(string)//": ERROR field does not have a geom yet ", & - line=__LINE__, file=u_FILE_u) + call shr_log_error(trim(subname)//":"//trim(string)//": ERROR field does not have a geom yet ", & + line=__LINE__, file=u_FILE_u, rc=rc) + return endif call ESMF_FieldGet(field, geomtype=geomtype, rc=rc) @@ -1870,8 +1902,9 @@ subroutine med_methods_Field_GeomPrint(field, string, rc) ! means data allocation does not exist yet continue else - call shr_sys_abort(trim(subname)//": ERROR rank not supported ", & - line=__LINE__, file=u_FILE_u) + call shr_log_error(trim(subname)//": ERROR rank not supported ", & + line=__LINE__, file=u_FILE_u, rc=rc) + return endif if (dbug_flag > 10) then @@ -2123,7 +2156,8 @@ subroutine med_methods_Grid_Print(grid, string, rc) staggerloc = ESMF_STAGGERLOC_CORNER staggerstr = 'ESMF_STAGGERLOC_CORNER' else - call shr_sys_abort(trim(subname)//":staggerloc failure") + call shr_log_error(trim(subname)//":staggerloc failure", rc=rc) + return endif call ESMF_GridGetCoord(grid, staggerloc=staggerloc, isPresent=isPresent, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return @@ -2286,7 +2320,8 @@ subroutine med_methods_State_GetScalar(state, scalar_id, scalar_value, flds_scal call ESMF_FieldGet(field, farrayPtr = farrayptr, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return if (scalar_id < 0 .or. scalar_id > flds_scalar_num) then - call shr_sys_abort(trim(subname)//": ERROR in scalar_id", line=__LINE__, file=u_FILE_u) + call shr_log_error(trim(subname)//": ERROR in scalar_id", line=__LINE__, file=u_FILE_u, rc=rc) + return endif tmp(:) = farrayptr(scalar_id,:) endif @@ -2342,7 +2377,8 @@ subroutine med_methods_State_SetScalar(scalar_value, scalar_id, State, flds_scal call ESMF_FieldGet(field, farrayPtr = farrayptr, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return if (scalar_id < 0 .or. scalar_id > flds_scalar_num) then - call shr_sys_abort(trim(subname)//": ERROR in scalar_id") + call shr_log_error(trim(subname)//": ERROR in scalar_id", rc=rc) + return endif farrayptr(scalar_id,1) = scalar_value endif @@ -2542,11 +2578,12 @@ subroutine med_methods_FB_check_for_nans(FB, maintask, logunit, rc) write(nancount_char, '(i0)') nancount msg_error = "ERROR: " // trim(nancount_char) //" nans found in "//trim(fieldname) nanfound = .true. - call ESMF_LogWrite(trim(msg_error), ESMF_LOGMSG_ERROR, line=__LINE__, file=u_FILE_u) + call shr_log_error(trim(msg_error)) end if end do if (nanfound) then - call shr_sys_abort('ABORTING JOB, see PET file for details', line=__LINE__, file=u_FILE_u) + call shr_log_error('ABORTING JOB, see PET file for details', line=__LINE__, file=u_FILE_u, rc=rc) + return end if end subroutine med_methods_FB_check_for_nans diff --git a/mediator/med_phases_aofluxes_mod.F90 b/mediator/med_phases_aofluxes_mod.F90 index 80fe1956f..b3618c1ba 100644 --- a/mediator/med_phases_aofluxes_mod.F90 +++ b/mediator/med_phases_aofluxes_mod.F90 @@ -39,7 +39,7 @@ module med_phases_aofluxes_mod use shr_const_mod , only : rearth => SHR_CONST_REARTH use shr_const_mod , only : pi => SHR_CONST_PI #endif - use shr_sys_mod , only : shr_sys_abort + use shr_log_mod , only : shr_log_error implicit none private @@ -667,9 +667,10 @@ subroutine med_aofluxes_init_agrid(gcomp, aoflux_in, aoflux_out, rc) else if (med_map_RH_is_created(is_local%wrap%RH(compocn,compatm,:), mapconsd, rc=rc)) then maptype = mapconsd else - call shr_sys_abort(trim(subname)//& + call shr_log_error(trim(subname)//& ": maptype for atm->ocn mapping of So_mask must be either mapfcopy or mapconsd", & - line=__LINE__, file=u_FILE_u) + line=__LINE__, file=u_FILE_u, rc=rc) + return end if ! ------------------------ @@ -1224,9 +1225,10 @@ subroutine med_aofluxes_map_ogrid2agrid_input(gcomp, rc) else if (med_map_RH_is_created(is_local%wrap%RH(compocn,compatm,:), mapconsd, rc=rc)) then maptype = mapconsd else - call shr_sys_abort(trim(subname)//& + call shr_log_error(trim(subname)//& ": maptype for atm->ocn mapping of aofluxes from atm->ocn either mapfcopy or mapconsd", & - line=__LINE__, file=u_FILE_u) + line=__LINE__, file=u_FILE_u, rc=rc) + return end if ! Map ocn->atm conservatively without fractions @@ -1421,9 +1423,10 @@ subroutine med_aofluxes_map_agrid2ogrid_output(gcomp, rc) else if (med_map_RH_is_created(is_local%wrap%RH(compatm,compocn,:), mapconsf, rc=rc)) then maptype = mapconsf else - call shr_sys_abort(trim(subname)//& + call shr_log_error(trim(subname)//& ": maptype for atm->ocn mapping of aofluxes from atm->ocn either mapfcopy or mapconsf", & - line=__LINE__, file=u_FILE_u) + line=__LINE__, file=u_FILE_u, rc=rc) + return end if call ESMF_FieldRegrid(field_src, field_dst, & routehandle=is_local%wrap%RH(compatm, compocn, maptype), & diff --git a/mediator/med_phases_history_mod.F90 b/mediator/med_phases_history_mod.F90 index daeb46458..b3899c285 100644 --- a/mediator/med_phases_history_mod.F90 +++ b/mediator/med_phases_history_mod.F90 @@ -23,7 +23,7 @@ module med_phases_history_mod use med_io_mod , only : med_io_write, med_io_wopen, med_io_enddef, med_io_close use perf_mod , only : t_startf, t_stopf use pio , only : file_desc_t - use shr_sys_mod , only : shr_sys_abort + use shr_log_mod , only : shr_log_error implicit none private @@ -1207,7 +1207,8 @@ subroutine med_phases_history_write_comp_aux(gcomp, compid, auxcomp, rc) call ESMF_FieldBundleGet(auxcomp%files(nfcnt)%FBAccum, fieldCount=nfld, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return if (nfld == 0) then - call shr_sys_abort(subname//'FBAccum is zero for '//trim(auxcomp%files(nfcnt)%auxname)) + call shr_log_error(subname//'FBAccum is zero for '//trim(auxcomp%files(nfcnt)%auxname), rc=rc) + return end if end if @@ -1370,7 +1371,8 @@ subroutine get_auxflds(str, flds, rc) valid = .false. end if if (.not. valid) then - call shr_sys_abort("ERROR: invalid list = "//trim(str)) + call shr_log_error("ERROR: invalid list = "//trim(str), rc=rc) + return end if ! get number of fields in a colon delimited string list nflds = 0 @@ -1453,8 +1455,9 @@ subroutine med_phases_history_fldbun_accum(fldbun, fldbun_accum, count, rc) if (chkerr(rc,__LINE__,u_FILE_u)) return if (ungriddedUBound(1) /= ungriddedUBound_accum(1)) then - call shr_sys_abort(" upper bounds for field and field_accum do not match", & - line=__LINE__, file=u_FILE_u) + call shr_log_error(" upper bounds for field and field_accum do not match", & + line=__LINE__, file=u_FILE_u, rc=rc) + return end if if (ungriddedUBound(1) > 0) then diff --git a/mediator/med_phases_ocnalb_mod.F90 b/mediator/med_phases_ocnalb_mod.F90 index 1d9426c7d..0a09c76aa 100644 --- a/mediator/med_phases_ocnalb_mod.F90 +++ b/mediator/med_phases_ocnalb_mod.F90 @@ -10,8 +10,7 @@ module med_phases_ocnalb_mod use perf_mod , only : t_startf, t_stopf use shr_orb_mod , only : shr_orb_cosz, shr_orb_decl use shr_orb_mod , only : shr_orb_params, SHR_ORB_UNDEF_INT, SHR_ORB_UNDEF_REAL - use shr_log_mod , only : shr_log_unit - use shr_sys_mod , only : shr_sys_abort + use shr_log_mod , only : shr_log_unit, shr_log_error implicit none private @@ -572,7 +571,8 @@ subroutine med_phases_ocnalb_orbital_init(gcomp, logunit, maintask, rc) write(logunit,*) trim(subname),' ERROR: invalid settings orb_mode =',trim(orb_mode) write(logunit,*) trim(subname),' ERROR: fixed_year settings = ',orb_iyear write (msgstr, *) ' ERROR: invalid settings for orb_mode '//trim(orb_mode) - call shr_sys_abort(msgstr, line=__LINE__, file=__FILE__) + call shr_log_error(msgstr, line=__LINE__, file=__FILE__, rc=rc) + return endif elseif (trim(orb_mode) == trim(orb_variable_year)) then orb_obliq = SHR_ORB_UNDEF_REAL @@ -582,7 +582,8 @@ subroutine med_phases_ocnalb_orbital_init(gcomp, logunit, maintask, rc) write(logunit,*) trim(subname),' ERROR: invalid settings orb_mode =',trim(orb_mode) write(logunit,*) trim(subname),' ERROR: variable_year settings = ',orb_iyear, orb_iyear_align write (msgstr, *) subname//' ERROR: invalid settings for orb_mode '//trim(orb_mode) - call shr_sys_abort(msgstr, line=__LINE__, file=__FILE__, rc=rc) + call shr_log_error(msgstr, line=__LINE__, file=__FILE__, rc=rc) + return endif elseif (trim(orb_mode) == trim(orb_fixed_parameters)) then !-- force orb_iyear to undef to make sure shr_orb_params works properly @@ -596,11 +597,13 @@ subroutine med_phases_ocnalb_orbital_init(gcomp, logunit, maintask, rc) write(logunit,*) trim(subname),' ERROR: orb_obliq = ',orb_obliq write(logunit,*) trim(subname),' ERROR: orb_mvelp = ',orb_mvelp write (msgstr, *) subname//' ERROR: invalid settings for orb_mode '//trim(orb_mode) - call shr_sys_abort(msgstr, line=__LINE__, file=__FILE__, rc=rc) + call shr_log_error(msgstr, line=__LINE__, file=__FILE__, rc=rc) + return endif else write (msgstr, *) subname//' ERROR: invalid orb_mode '//trim(orb_mode) - call shr_sys_abort(msgstr, line=__LINE__, file=__FILE__, rc=rc) + call shr_log_error(msgstr, line=__LINE__, file=__FILE__, rc=rc) + return endif end subroutine med_phases_ocnalb_orbital_init @@ -660,7 +663,8 @@ subroutine med_phases_ocnalb_orbital_update(clock, logunit, maintask, eccen, ob if ( eccen == SHR_ORB_UNDEF_REAL .or. obliqr == SHR_ORB_UNDEF_REAL .or. & mvelpp == SHR_ORB_UNDEF_REAL .or. lambm0 == SHR_ORB_UNDEF_REAL) then write (msgstr, *) subname//' ERROR: orb params incorrect' - call shr_sys_abort(msgstr, line=__LINE__, file=__FILE__, rc=rc) + call shr_log_error(msgstr, line=__LINE__, file=__FILE__, rc=rc) + return endif end subroutine med_phases_ocnalb_orbital_update diff --git a/mediator/med_phases_post_glc_mod.F90 b/mediator/med_phases_post_glc_mod.F90 index 15e4577d3..311324229 100644 --- a/mediator/med_phases_post_glc_mod.F90 +++ b/mediator/med_phases_post_glc_mod.F90 @@ -30,7 +30,7 @@ module med_phases_post_glc_mod use med_map_mod , only : med_map_field_packed, med_map_field_normalized, med_map_field use glc_elevclass_mod , only : glc_mean_elevation_virtual, glc_get_fractional_icecov use perf_mod , only : t_startf, t_stopf - use shr_sys_mod , only : shr_sys_abort + use shr_log_mod , only : shr_log_error implicit none private @@ -333,8 +333,8 @@ subroutine map_glc2lnd_init(gcomp, rc) ! Currently cannot map hflx in multiple elevation classes from glc to land if (fldbun_fldchk(is_local%wrap%FBExp(complnd), trim(Flgg_hflx), rc=rc)) then - call shr_sys_abort(trim(subname)//'ERROR: Flgg_hflx to land has not been implemented yet', & - line=__LINE__, file=__FILE__) + call shr_log_error(trim(subname)//'ERROR: Flgg_hflx to land has not been implemented yet', & + line=__LINE__, file=__FILE__, rc=rc) end if end subroutine map_glc2lnd_init diff --git a/mediator/med_phases_post_rof_mod.F90 b/mediator/med_phases_post_rof_mod.F90 index afcaa27fb..f21bf2271 100644 --- a/mediator/med_phases_post_rof_mod.F90 +++ b/mediator/med_phases_post_rof_mod.F90 @@ -22,7 +22,7 @@ module med_phases_post_rof_mod use med_methods_mod , only : fldbun_getdata1d => med_methods_FB_getdata1d use med_methods_mod , only : fldbun_getmesh => med_methods_FB_getmesh use perf_mod , only : t_startf, t_stopf - use shr_sys_mod , only : shr_sys_abort + use shr_log_mod , only : shr_log_error implicit none private @@ -105,7 +105,8 @@ subroutine med_phases_post_rof_init(gcomp, rc) flds_wiso = .false. end if if ((remove_negative_runoff_lnd .or. remove_negative_runoff_glc) .and. flds_wiso) then - call shr_sys_abort('remove_negative_runoff_lnd and remove_negative_runoff_glc must be set to false when flds_wiso is true') + call shr_log_error('remove_negative_runoff_lnd and remove_negative_runoff_glc must be set to false when flds_wiso is true', rc=rc) + return end if if (maintask) then diff --git a/mediator/med_phases_prep_glc_mod.F90 b/mediator/med_phases_prep_glc_mod.F90 index 00a246f1b..e0e29089a 100644 --- a/mediator/med_phases_prep_glc_mod.F90 +++ b/mediator/med_phases_prep_glc_mod.F90 @@ -44,7 +44,7 @@ module med_phases_prep_glc_mod use glc_elevclass_mod , only : glc_get_elevation_classes use glc_elevclass_mod , only : glc_get_fractional_icecov use perf_mod , only : t_startf, t_stopf - use shr_sys_mod , only : shr_sys_abort + use shr_log_mod , only : shr_log_error implicit none private @@ -223,8 +223,9 @@ subroutine med_phases_prep_glc_init(gcomp, rc) ! create route handle if it has not been created if (.not. med_map_RH_is_created(is_local%wrap%RH(complnd,compglc(ns),:),mapbilnr,rc=rc)) then - call shr_sys_abort(trim(subname)//" mapbilnr is not created for lnd->glc mapping", & - line=__LINE__, file=u_FILE_u) + call shr_log_error(trim(subname)//" mapbilnr is not created for lnd->glc mapping", & + line=__LINE__, file=u_FILE_u, rc=rc) + return end if end do @@ -238,8 +239,9 @@ subroutine med_phases_prep_glc_init(gcomp, rc) case ('off') smb_renormalize = .false. case default - call shr_sys_abort(trim(subname)//' ERROR: unknown value for glc_renormalize_smb: '// trim(glc_renormalize_smb), & - line=__LINE__, file=__FILE__) + call shr_log_error(trim(subname)//' ERROR: unknown value for glc_renormalize_smb: '// trim(glc_renormalize_smb), & + line=__LINE__, file=__FILE__, rc=rc) + return end select if (maintask) then write(logunit,'(a,l4)') trim(subname)//' smb_renormalize is ',smb_renormalize @@ -327,8 +329,9 @@ subroutine med_phases_prep_glc_init(gcomp, rc) ! create route handle if it has not been created do ns = 1,is_local%wrap%num_icesheets if (.not. med_map_RH_is_created(is_local%wrap%RH(compocn,compglc(ns),:),mapbilnr,rc=rc)) then - call shr_sys_abort(trim(subname)//" mapbilnr is not created for ocn->glc mapping", & - line=__LINE__, file=u_FILE_u) + call shr_log_error(trim(subname)//" mapbilnr is not created for ocn->glc mapping", & + line=__LINE__, file=u_FILE_u, rc=rc) + return end if end do diff --git a/mediator/med_phases_prep_rof_mod.F90 b/mediator/med_phases_prep_rof_mod.F90 index 591966e4b..1f6eeb0ba 100644 --- a/mediator/med_phases_prep_rof_mod.F90 +++ b/mediator/med_phases_prep_rof_mod.F90 @@ -26,7 +26,7 @@ module med_phases_prep_rof_mod use med_methods_mod , only : fldbun_fldchk => med_methods_FB_fldchk use med_methods_mod , only : FB_check_for_nans => med_methods_FB_check_for_nans use perf_mod , only : t_startf, t_stopf - use shr_sys_mod , only : shr_sys_abort + use shr_log_mod , only : shr_log_error implicit none private @@ -517,8 +517,9 @@ subroutine med_phases_prep_rof_irrig(gcomp, rc) else if ( med_map_RH_is_created(is_local%wrap%RH(complnd,comprof,:),mapfcopy, rc=rc)) then maptype_lnd2rof = mapfcopy else - call shr_sys_abort(trim(subname)//& - ": ERROR conservative or redist route handles not created for lnd->rof mapping") + call shr_log_error(trim(subname)//& + ": ERROR conservative or redist route handles not created for lnd->rof mapping", rc=rc) + return end if if (med_map_RH_is_created(is_local%wrap%RH(comprof,complnd,:),mapconsf, rc=rc)) then @@ -526,8 +527,9 @@ subroutine med_phases_prep_rof_irrig(gcomp, rc) else if ( med_map_RH_is_created(is_local%wrap%RH(comprof,complnd,:),mapfcopy, rc=rc)) then maptype_rof2lnd = mapfcopy else - call shr_sys_abort(trim(subname)//& - ": ERROR conservative or redist route handles not created for rof->lnd mapping") + call shr_log_error(trim(subname)//& + ": ERROR conservative or redist route handles not created for rof->lnd mapping", rc=rc) + return end if ! ------------------------------------------------------------------------ diff --git a/mediator/med_phases_restart_mod.F90 b/mediator/med_phases_restart_mod.F90 index e37c6d4d7..ebf3727d5 100644 --- a/mediator/med_phases_restart_mod.F90 +++ b/mediator/med_phases_restart_mod.F90 @@ -14,7 +14,7 @@ module med_phases_restart_mod use med_phases_prep_glc_mod , only : FBocnAccum2glc_o, ocnAccum2glc_cnt use med_phases_prep_rof_mod , only : FBlndAccum2rof_l, lndAccum2rof_cnt use pio , only : file_desc_t - use shr_sys_mod , only : shr_sys_abort + use shr_log_mod , only : shr_log_error implicit none private @@ -547,7 +547,8 @@ subroutine med_phases_restart_read(gcomp, rc) open(newunit=unitn, file=restart_pfile, form='FORMATTED', status='old', iostat=ierr) read (unitn,'(a)', iostat=ierr) restart_file if (ierr < 0) then - call shr_sys_abort(trim(subname)//' rpointer file read returns error') + call shr_log_error(trim(subname)//' rpointer file read returns error', rc=rc) + return end if close(unitn) call ESMF_LogWrite(trim(subname)//' restart file from rpointer = '//trim(restart_file), ESMF_LOGMSG_INFO)