From 10b9b484353ac9d9e679ec4e1362a3308b90452d Mon Sep 17 00:00:00 2001 From: Raffaele Montuoro Date: Wed, 14 Sep 2022 20:02:42 +0000 Subject: [PATCH 01/12] Enable CMAQ simplistic scavenging and wet removal in resolved clouds. --- CMakeLists.txt | 2 ++ aqm_files.cmake | 5 +++++ src/drv/cmaq_mod.F90 | 7 +++++++ src/shr/aqm_methods.F90 | 27 +++++++++++++++++++++++++++ 4 files changed, 41 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5fe78d86..b2a51eae 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -86,6 +86,8 @@ target_compile_definitions(CCTM PUBLIC SUBST_FILES_ID="FILES_CTM.EXT" SUBST_COMM=NOOP_COMM SUBST_BARRIER=NOOP_BARRIER SUBST_SUBGRID_INDEX=NOOP_SUBGRID_INDEX + AQ_MAP=DUMMY_AQ_MAP + CONVCLD_ACM=DUMMY_CONVCLD_ACM EDDYX=DUMMY_EDDYX MOSAIC_MOD=MOSAIC_MODULE Mosaic_Mod=Mosaic_Module diff --git a/aqm_files.cmake b/aqm_files.cmake index c3f7420c..d4d51439 100644 --- a/aqm_files.cmake +++ b/aqm_files.cmake @@ -114,6 +114,11 @@ list(APPEND aqm_CCTM_files ${BIOG}/tmpbeis.F ${BIOG}/wrdaymsg.f ${CLOUD}/hlconst.F + ${CLOUD}/cldproc_acm.F + ${CLOUD}/getalpha.F + ${CLOUD}/indexn.f + ${CLOUD}/rescld.F + ${CLOUD}/scavwdep.F ${DEPV}/ABFLUX_MOD.F ${DEPV}/BIDI_MOD.F ${DEPV}/cgrid_depv.F diff --git a/src/drv/cmaq_mod.F90 b/src/drv/cmaq_mod.F90 index 88404340..9889e92f 100644 --- a/src/drv/cmaq_mod.F90 +++ b/src/drv/cmaq_mod.F90 @@ -131,6 +131,11 @@ SUBROUTINE VDIFF ( CGRID, JDATE, JTIME, TSTEP ) INTEGER :: JDATE, JTIME INTEGER :: TSTEP( 3 ) END SUBROUTINE VDIFF + SUBROUTINE CLDPROC ( CGRID, JDATE, JTIME, TSTEP ) + REAL, POINTER :: CGRID( :,:,:,: ) + INTEGER, INTENT( IN ) :: JDATE, JTIME + INTEGER, INTENT( IN ) :: TSTEP( 3 ) + END SUBROUTINE CLDPROC SUBROUTINE CHEM ( CGRID, JDATE, JTIME, TSTEP ) REAL, POINTER :: CGRID( :,:,:,: ) INTEGER :: JDATE, JTIME @@ -151,6 +156,8 @@ END SUBROUTINE AERO CALL CHEM ( CGRID, JDATE, JTIME, TSTEP ) + CALL CLDPROC ( CGRID, JDATE, JTIME, TSTEP ) + if (run_aero) then CALL AERO ( CGRID, JDATE, JTIME, TSTEP ) end if diff --git a/src/shr/aqm_methods.F90 b/src/shr/aqm_methods.F90 index f4c4a8ff..98f0e7f4 100644 --- a/src/shr/aqm_methods.F90 +++ b/src/shr/aqm_methods.F90 @@ -1200,6 +1200,33 @@ END FUNCTION WRITE3_REAL4D ! -- dummy subroutines +SUBROUTINE DUMMY_AQ_MAP( JDATE, JTIME, WTBAR, WCBAR, TBARC, PBARC, & + CTHK1, AIRM, PRATE1, TAUCLD, POLC, CEND, & + REMOV, REMOVAC, ALFA0, ALFA2, ALFA3, DARK ) + INTEGER, INTENT( IN ) :: JDATE, JTIME + REAL, INTENT( IN ) :: WTBAR, WCBAR, TBARC, PBARC, & + CTHK1, AIRM, PRATE1, TAUCLD + REAL, INTENT( IN ) :: POLC ( : ) + REAL, INTENT( INOUT ) :: REMOVAC + REAL, INTENT( INOUT ) :: CEND( : ), REMOV( : ) + REAL, INTENT( IN ) :: ALFA0, ALFA2, ALFA3 + LOGICAL, INTENT( IN ) :: DARK +END SUBROUTINE DUMMY_AQ_MAP + +SUBROUTINE DUMMY_CONVCLD_ACM ( CGRID, JDATE, JTIME, TSTEP, & + N_SPC_WDEP, WDEP_MAP, CONV_DEP, SUBTRANS ) + REAL, POINTER :: CGRID( :,:,:,: ) + INTEGER, INTENT( IN ) :: JDATE + INTEGER, INTENT( IN ) :: JTIME + INTEGER, INTENT( IN ) :: TSTEP( 3 ) + INTEGER, INTENT( IN ) :: N_SPC_WDEP + INTEGER, INTENT( IN ) :: WDEP_MAP( : ) + REAL, INTENT( INOUT ) :: CONV_DEP( :,:,: ) + REAL, INTENT( OUT ) :: SUBTRANS( :,:,: ) + CONV_DEP = 0.0 + SUBTRANS = 0.0 +END SUBROUTINE DUMMY_CONVCLD_ACM + SUBROUTINE DUMMY_EDDYX ( EDDYV ) REAL, INTENT( OUT ) :: EDDYV ( :,:,: ) EDDYV = 0.0 From 9d67b9922db45e6ec5e1f8034fc8741db2a94f92 Mon Sep 17 00:00:00 2001 From: Raffaele Montuoro Date: Wed, 14 Sep 2022 20:41:13 +0000 Subject: [PATCH 02/12] Fix naming inconsistency for convective and nonconvective precipitation fields. --- src/shr/aqm_methods.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shr/aqm_methods.F90 b/src/shr/aqm_methods.F90 index 98f0e7f4..b3d5e658 100644 --- a/src/shr/aqm_methods.F90 +++ b/src/shr/aqm_methods.F90 @@ -155,7 +155,7 @@ LOGICAL FUNCTION DESC3( FNAME ) 'ZRUF ', & 'HFX ', 'WSPD10 ', & 'GSW ', 'RGRND ', & - 'RNA ', 'RCA ', & + 'RN ', 'RC ', & 'CFRAC ', 'CLDT ', & 'CLDB ', 'WBAR ', & 'RA ', 'RS ', & From ca5bcbc7e3e87765cf8825628249216177843589 Mon Sep 17 00:00:00 2001 From: Raffaele Montuoro Date: Wed, 14 Sep 2022 20:47:40 +0000 Subject: [PATCH 03/12] Properly set compiler flags in GNU build system for fixed source form files. --- src/io/ioapi/Makefile.am | 2 +- src/io/ioapi/Makefile.in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/io/ioapi/Makefile.am b/src/io/ioapi/Makefile.am index a7087123..5676ec89 100644 --- a/src/io/ioapi/Makefile.am +++ b/src/io/ioapi/Makefile.am @@ -7,7 +7,7 @@ libioapi_a_SOURCES += crlf.F currec.f currstep.f dt2str.f findc.f getefile.F ind poly.f promptmfile.f sec2time.f secsdiff.F setlam.f sortic.f str2real.f time2sec.f upcase.f wkday.F yr2day.F libioapi_a_SOURCES += m3exit.F90 m3mesg.F90 m3msg2.F90 m3warn.F90 m3utilio.F90 -libioapi_a_FFLAGS = $(ESMF_F90COMPILEOPTS) $(ESMF_F90COMPILEPATHS) $(ESMF_F90COMPILEFREECPP) $(ESMF_F90COMPILECPPFLAGS) +libioapi_a_FFLAGS = $(CCTM_FFLAGS) $(ESMF_F90COMPILEOPTS) $(ESMF_F90COMPILEPATHS) $(ESMF_F90COMPILEFREECPP) $(ESMF_F90COMPILECPPFLAGS) libioapi_a_FCFLAGS = $(ESMF_F90COMPILEOPTS) $(ESMF_F90COMPILEPATHS) $(ESMF_F90COMPILEFREECPP) $(ESMF_F90COMPILECPPFLAGS) libioapi_a_FCFLAGS += -DSUBST_FILES_ID=\"FILES_CTM.EXT\" diff --git a/src/io/ioapi/Makefile.in b/src/io/ioapi/Makefile.in index 1401c367..6d52ee3e 100644 --- a/src/io/ioapi/Makefile.in +++ b/src/io/ioapi/Makefile.in @@ -326,7 +326,7 @@ libioapi_a_SOURCES = FDESC3.EXT PARMS3.EXT crlf.F currec.f currstep.f \ setlam.f sortic.f str2real.f time2sec.f upcase.f wkday.F \ yr2day.F m3exit.F90 m3mesg.F90 m3msg2.F90 m3warn.F90 \ m3utilio.F90 -libioapi_a_FFLAGS = $(ESMF_F90COMPILEOPTS) $(ESMF_F90COMPILEPATHS) $(ESMF_F90COMPILEFREECPP) $(ESMF_F90COMPILECPPFLAGS) +libioapi_a_FFLAGS = $(CCTM_FFLAGS) $(ESMF_F90COMPILEOPTS) $(ESMF_F90COMPILEPATHS) $(ESMF_F90COMPILEFREECPP) $(ESMF_F90COMPILECPPFLAGS) libioapi_a_FCFLAGS = $(ESMF_F90COMPILEOPTS) $(ESMF_F90COMPILEPATHS) \ $(ESMF_F90COMPILEFREECPP) $(ESMF_F90COMPILECPPFLAGS) \ -DSUBST_FILES_ID=\"FILES_CTM.EXT\" -I \ From 548e6cd1d2df2ed5953ba3edfb58854d734ba860 Mon Sep 17 00:00:00 2001 From: Brian Curtis <64433609+BrianCurtis-NOAA@users.noreply.github.com> Date: Fri, 14 Oct 2022 14:29:27 -0400 Subject: [PATCH 04/12] Fix indentation issue --- aqm_files.cmake | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/aqm_files.cmake b/aqm_files.cmake index e223f718..90d8e6d4 100644 --- a/aqm_files.cmake +++ b/aqm_files.cmake @@ -9,15 +9,15 @@ list(APPEND aqm_files list(APPEND aqm_shr_files src/shr/aqm_config_mod.F90 src/shr/aqm_const_mod.F90 - src/shr/aqm_domain_mod.F90 + src/shr/aqm_domain_mod.F90 src/shr/aqm_emis_mod.F90 src/shr/aqm_fires_mod.F90 src/shr/aqm_internal_mod.F90 - src/shr/aqm_model_mod.F90 + src/shr/aqm_model_mod.F90 src/shr/aqm_rc_mod.F90 src/shr/aqm_methods.F90 src/shr/aqm_species_mod.F90 - src/shr/aqm_state_mod.F90 + src/shr/aqm_state_mod.F90 src/shr/aqm_tools_mod.F90 src/shr/aqm_types_mod.F90 ) @@ -114,11 +114,11 @@ list(APPEND aqm_CCTM_files ${BIOG}/tmpbeis.F ${BIOG}/wrdaymsg.f ${CLOUD}/hlconst.F - ${CLOUD}/cldproc_acm.F - ${CLOUD}/getalpha.F - ${CLOUD}/indexn.f - ${CLOUD}/rescld.F - ${CLOUD}/scavwdep.F + ${CLOUD}/cldproc_acm.F + ${CLOUD}/getalpha.F + ${CLOUD}/indexn.f + ${CLOUD}/rescld.F + ${CLOUD}/scavwdep.F ${DEPV}/ABFLUX_MOD.F ${DEPV}/BIDI_MOD.F ${DEPV}/cgrid_depv.F From dd6d4eb0851caa0288b17341d40d129963d7c57c Mon Sep 17 00:00:00 2001 From: Raffaele Montuoro Date: Wed, 26 Oct 2022 20:04:20 +0000 Subject: [PATCH 05/12] Add time information to virtualized EDSS/Model-3 I/O API. --- src/shr/aqm_methods.F90 | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/shr/aqm_methods.F90 b/src/shr/aqm_methods.F90 index 637c59f9..1d0a6999 100644 --- a/src/shr/aqm_methods.F90 +++ b/src/shr/aqm_methods.F90 @@ -76,8 +76,8 @@ LOGICAL FUNCTION DESC3( FNAME ) USE M3UTILIO, ONLY : & GDNAM3D, NLAYS3D, NVARS3D, VDESC3D, VGLVS3D, & VGSGPN3, VGTOP3D, VGTYP3D, VNAME3D, UNITS3D, & - NCOLS3D, NROWS3D - + NCOLS3D, NROWS3D, SDATE3D, STIME3D, TSTEP3D + USE aqm_emis_mod USE aqm_model_mod, ONLY : aqm_config_type, & aqm_model_get, aqm_model_domain_get @@ -101,6 +101,10 @@ LOGICAL FUNCTION DESC3( FNAME ) UNITS3D = "" VDESC3D = "" + SDATE3D = 0 + STIME3D = 0 + TSTEP3D = 0 + IF ( (TRIM(FNAME) .EQ. TRIM(INIT_GASC_1)) .OR. & (TRIM(FNAME) .EQ. TRIM(INIT_AERO_1)) .OR. & (TRIM(FNAME) .EQ. TRIM(INIT_NONR_1)) .OR. & @@ -188,6 +192,14 @@ LOGICAL FUNCTION DESC3( FNAME ) '1 ', '1 ', & '1 ', 'M/S ' /) + call aqm_model_get(config=config, rc=localrc) + if (aqm_rc_check(localrc, msg="Failure to retrieve model input state", & + file=__FILE__, line=__LINE__)) return + + SDATE3D = config % ctm_stdate + STIME3D = config % ctm_sttime + TSTEP3D = config % ctm_tstep + ELSE IF ( TRIM( FNAME ) .EQ. TRIM( MET_CRO_3D ) ) THEN CALL aqm_model_domain_get(nl=NLAYS3D, rc=localrc) @@ -226,6 +238,10 @@ LOGICAL FUNCTION DESC3( FNAME ) if (aqm_rc_check(localrc, msg="Failure to retrieve model input state", & file=__FILE__, line=__LINE__)) return + SDATE3D = config % ctm_stdate + STIME3D = config % ctm_sttime + TSTEP3D = config % ctm_tstep + if (config % species % p_atm_qr > 0) then NVARS3D = NVARS3D + 1 VNAME3D( NVARS3D ) = 'QR' @@ -259,6 +275,14 @@ LOGICAL FUNCTION DESC3( FNAME ) (/ 'M/S ', 'M/S ', & 'KG/(M*S) ', 'KG/(M*S) ' /) + call aqm_model_get(config=config, rc=localrc) + if (aqm_rc_check(localrc, msg="Failure to retrieve model input state", & + file=__FILE__, line=__LINE__)) return + + SDATE3D = config % ctm_stdate + STIME3D = config % ctm_sttime + TSTEP3D = config % ctm_tstep + ELSE IF ( TRIM( FNAME ) .EQ. 'MODIS_FPAR' ) THEN NVARS3D = 1 VNAME3D( 1:NVARS3D ) = & From 0d634437e1c6254a1da998935c8be70dd6e144fc Mon Sep 17 00:00:00 2001 From: Raffaele Montuoro Date: Wed, 26 Oct 2022 22:30:55 +0000 Subject: [PATCH 06/12] Replace ESMF I/O format flag with AQMIO flag. --- src/io/aqmio/aqmio.F90 | 37 ++++++++++++++++++++---------------- src/shr/aqm_emis_mod.F90 | 12 ++++++------ src/shr/aqm_internal_mod.F90 | 4 ++-- 3 files changed, 29 insertions(+), 24 deletions(-) diff --git a/src/io/aqmio/aqmio.F90 b/src/io/aqmio/aqmio.F90 index bedc98a4..f29beaec 100644 --- a/src/io/aqmio/aqmio.F90 +++ b/src/io/aqmio/aqmio.F90 @@ -24,9 +24,14 @@ module AQMIO type(ioData), pointer :: IO => null() end type ioWrapper + integer, parameter :: AQMIO_FMT_BIN = 101, & + AQMIO_FMT_NETCDF = 102 private + public :: AQMIO_FMT_BIN + public :: AQMIO_FMT_NETCDF + public :: AQMIO_Create public :: AQMIO_Destroy public :: AQMIO_FileCreate @@ -332,20 +337,20 @@ subroutine AQMIO_Open(IOComp, fileName, filePath, iomode, iofmt, rc) character(len=*), intent(in) :: fileName character(len=*), intent(in), optional :: filePath character(len=*), intent(in), optional :: iomode - type(ESMF_IOFmt_flag), intent(in), optional :: iofmt + integer, intent(in), optional :: iofmt integer, intent(out), optional :: rc ! -- local variables integer :: localrc integer :: ncStatus integer :: item, localDe, localDeCount, tileCount + integer :: liofmt integer :: cmode logical :: create character(len=ESMF_MAXPATHLEN) :: fullName character(len=6) :: liomode, fmode type(ioWrapper) :: is type(ESMF_Grid) :: grid - type(ESMF_IOFmt_flag) :: liofmt ! -- begin if (present(rc)) rc = ESMF_SUCCESS @@ -363,7 +368,7 @@ subroutine AQMIO_Open(IOComp, fileName, filePath, iomode, iofmt, rc) localDeCount = size(is % IO % IOLayout) - liofmt = ESMF_IOFMT_NETCDF + liofmt = AQMIO_FMT_NETCDF if (present(iofmt)) liofmt = iofmt liomode = "read" @@ -409,7 +414,7 @@ subroutine AQMIO_Open(IOComp, fileName, filePath, iomode, iofmt, rc) else call AQMIO_FileNameGet(fullName, fileName, filePath=filePath) end if - if (liofmt == ESMF_IOFMT_NETCDF) then + if (liofmt == AQMIO_FMT_NETCDF) then #if HAVE_NETCDF if (create) then ncStatus = nf90_create(trim(fullName), cmode, & @@ -442,7 +447,7 @@ subroutine AQMIO_Open(IOComp, fileName, filePath, iomode, iofmt, rc) rcToReturn=rc) return #endif - else if (liofmt == ESMF_IOFMT_BIN) then + else if (liofmt == AQMIO_FMT_BIN) then call ESMF_UtilIOUnitGet (unit=is % IO % IOLayout(localDe) % iounit, rc=localrc) if (ESMF_LogFoundError(rcToCheck=localrc, msg=ESMF_LOGERR_PASSTHRU, & @@ -547,18 +552,18 @@ logical function AQMIO_IsOpen(IOComp, fileName, filePath, iofmt, rc) type(ESMF_GridComp), intent(inout) :: IOComp character(len=*), intent(in) :: fileName character(len=*), intent(in), optional :: filePath - type(ESMF_IOFmt_flag), intent(in), optional :: iofmt + integer, intent(in), optional :: iofmt integer, intent(out), optional :: rc ! -- local variables integer :: localrc integer :: ncStatus integer :: item, localDe, localDeCount, tileCount, pathLen + integer :: liofmt logical :: isFileOpen character(len=ESMF_MAXPATHLEN) :: fullName, pathIn type(ioWrapper) :: is type(ESMF_Grid) :: grid - type(ESMF_IOFmt_flag) :: liofmt ! -- begin if (present(rc)) rc = ESMF_SUCCESS @@ -578,7 +583,7 @@ logical function AQMIO_IsOpen(IOComp, fileName, filePath, iofmt, rc) localDeCount = size(is % IO % IOLayout) - liofmt = ESMF_IOFMT_NETCDF + liofmt = AQMIO_FMT_NETCDF if (present(iofmt)) liofmt = iofmt call ESMF_GridCompGet(IOComp, grid=grid, rc=localrc) @@ -602,7 +607,7 @@ logical function AQMIO_IsOpen(IOComp, fileName, filePath, iofmt, rc) else call AQMIO_FileNameGet(fullName, fileName, filePath=filePath) end if - if (liofmt == ESMF_IOFMT_NETCDF) then + if (liofmt == AQMIO_FMT_NETCDF) then #if HAVE_NETCDF if (is % IO % IOLayout(localDe) % ncid > 0) then ncStatus = nf90_inq_path(is % IO % IOLayout(localDe) % ncid, & @@ -642,21 +647,21 @@ subroutine AQMIO_Write(IOComp, fieldList, fieldNameList, timeSlice, & integer, intent(in), optional :: timeSlice character(len=*), intent(in), optional :: fileName character(len=*), intent(in), optional :: filePath - type(ESMF_IOFmt_flag), intent(in), optional :: iofmt + integer, intent(in), optional :: iofmt integer, intent(out), optional :: rc ! -- local variables integer :: localrc integer :: item, localDe, localDeCount + integer :: liofmt type(ioWrapper) :: is - type(ESMF_IOFmt_flag) :: liofmt ! -- begin if (present(rc)) rc = ESMF_SUCCESS if (.not.ESMF_GridCompIsPetLocal(IOComp)) return - liofmt = ESMF_IOFMT_NETCDF + liofmt = AQMIO_FMT_NETCDF if (present(iofmt)) liofmt = iofmt if (present(fieldNameList)) then @@ -736,7 +741,7 @@ subroutine AQMIO_Read(IOComp, fieldList, fieldNameList, timeSlice, & integer, intent(in), optional :: timeSlice character(len=*), intent(in), optional :: fileName character(len=*), intent(in), optional :: filePath - type(ESMF_IOFmt_flag), intent(in), optional :: iofmt + integer, intent(in), optional :: iofmt integer, intent(out), optional :: rc ! -- local variables @@ -833,7 +838,7 @@ subroutine AQMIO_ReadTimes(IOComp, variableName, timesList, fileName, filePath, type(ESMF_Time), intent(inout), pointer :: timesList(:) character(len=*), intent(in), optional :: fileName character(len=*), intent(in), optional :: filePath - type(ESMF_IOFmt_flag), intent(in), optional :: iofmt + integer, intent(in), optional :: iofmt integer, intent(out), optional :: rc ! -- local variables @@ -857,7 +862,7 @@ subroutine AQMIO_ReadTimes(IOComp, variableName, timesList, fileName, filePath, if (.not.associated(is % IO % IOLayout)) return if (present(iofmt)) then - if (.not.(iofmt == ESMF_IOFMT_NETCDF)) then + if (.not.(iofmt == AQMIO_FMT_NETCDF)) then call ESMF_LogSetError(ESMF_RC_ARG_INCOMP, & msg="This function only supports NetCDF I/O", & line=__LINE__, & @@ -925,6 +930,7 @@ subroutine AQMIO_FieldAccess(IOComp, field, action, variableName, timeSlice, rc) integer :: localrc integer :: localDe, localDeCount, rank integer :: de, deCount, dimCount, tile, tileCount, ungriddedCount + integer :: iofmt integer, dimension(:), pointer :: ungriddedLBound, ungriddedUBound integer, dimension(:), allocatable :: deToTileMap, localDeToDeMap integer, dimension(:,:), allocatable :: minIndexPDe, maxIndexPDe @@ -936,7 +942,6 @@ subroutine AQMIO_FieldAccess(IOComp, field, action, variableName, timeSlice, rc) type(ESMF_GeomType_flag) :: geomtype type(ESMF_StaggerLoc) :: staggerloc type(ESMF_TypeKind_Flag) :: typekind - type(ESMF_IOFmt_flag) :: iofmt ! -- begin if (present(rc)) rc = ESMF_SUCCESS diff --git a/src/shr/aqm_emis_mod.F90 b/src/shr/aqm_emis_mod.F90 index 12cf8171..ba0fc7cd 100644 --- a/src/shr/aqm_emis_mod.F90 +++ b/src/shr/aqm_emis_mod.F90 @@ -196,7 +196,7 @@ subroutine aqm_emis_src_create(config, em, rc) em(item) % file = "" em(item) % frequency = "" em(item) % format = "netcdf" - em(item) % iofmt = ESMF_IOFMT_NETCDF + em(item) % iofmt = AQMIO_FMT_NETCDF em(item) % irec = 0 em(item) % verbose = .false. em(item) % logprefix = "" @@ -311,9 +311,9 @@ subroutine aqm_emis_src_init(model, em, rc) select case (trim(em % format)) case ("binary") - em % iofmt = ESMF_IOFMT_BIN + em % iofmt = AQMIO_FMT_BIN case ("netcdf") - em % iofmt = ESMF_IOFMT_NETCDF + em % iofmt = AQMIO_FMT_NETCDF case default call ESMF_LogSetError(ESMF_RC_NOT_VALID, & msg="- invalid emission format: "//trim(em % format), & @@ -382,7 +382,7 @@ subroutine aqm_emis_src_init(model, em, rc) rcToReturn=rc)) & return ! bail out - if (em % iofmt == ESMF_IOFMT_BIN) then + if (em % iofmt == AQMIO_FMT_BIN) then if (trim(em % frequency) /= "static") then em % frequency = "static" if (em % verbose) then @@ -694,7 +694,7 @@ subroutine aqm_emis_src_init(model, em, rc) end if ! -- open single netCDF file if selected - if (em % iofmt == ESMF_IOFMT_NETCDF) then + if (em % iofmt == AQMIO_FMT_NETCDF) then call AQMIO_Open(em % IO, em % file, filePath=em % path, iomode="read", & iofmt=em % iofmt, rc=localrc) if (ESMF_LogFoundError(rcToCheck=localrc, msg=ESMF_LOGERR_PASSTHRU, & @@ -1038,7 +1038,7 @@ subroutine aqm_emis_update(model, rc) rcToReturn=rc)) & return ! bail out end if - if (em % iofmt == ESMF_IOFMT_BIN) then + if (em % iofmt == AQMIO_FMT_BIN) then do n = 1, size(em % sources) call AQMIO_Read(em % IO, (/ em % fields(n) /), fileName=em % sources(n), & filePath=em % path, iofmt=em % iofmt, rc=localrc) diff --git a/src/shr/aqm_internal_mod.F90 b/src/shr/aqm_internal_mod.F90 index 9134d71d..7ddf0367 100644 --- a/src/shr/aqm_internal_mod.F90 +++ b/src/shr/aqm_internal_mod.F90 @@ -16,9 +16,9 @@ module aqm_internal_mod character(len=ESMF_MAXSTR) :: specfile character(len=ESMF_MAXSTR) :: specprofile character(len=6) :: period - integer :: irec logical :: verbose - type(ESMF_IOFmt_flag) :: iofmt + integer :: irec + integer :: iofmt type(ESMF_GridComp) :: IO type(ESMF_Alarm) :: alarm character(len=ESMF_MAXSTR), dimension(:), pointer :: sources => null() From 40d8d48ca251b203560f7529be480030bc112cc9 Mon Sep 17 00:00:00 2001 From: Raffaele Montuoro Date: Mon, 31 Oct 2022 16:24:03 +0000 Subject: [PATCH 07/12] Call resolved cloud process driver using proper sequence. --- src/drv/cmaq_mod.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/drv/cmaq_mod.F90 b/src/drv/cmaq_mod.F90 index 9889e92f..e235a5c7 100644 --- a/src/drv/cmaq_mod.F90 +++ b/src/drv/cmaq_mod.F90 @@ -154,10 +154,10 @@ END SUBROUTINE AERO ! -- advance all physical and chemical processes on a grid CALL VDIFF ( CGRID, JDATE, JTIME, TSTEP ) - CALL CHEM ( CGRID, JDATE, JTIME, TSTEP ) - CALL CLDPROC ( CGRID, JDATE, JTIME, TSTEP ) + CALL CHEM ( CGRID, JDATE, JTIME, TSTEP ) + if (run_aero) then CALL AERO ( CGRID, JDATE, JTIME, TSTEP ) end if From d66cfb9dbc932462666e6d14a0bc3771eec80aba Mon Sep 17 00:00:00 2001 From: Raffaele Montuoro Date: Mon, 31 Oct 2022 16:26:08 +0000 Subject: [PATCH 08/12] Remove argument intent from subroutine interface. --- src/drv/cmaq_mod.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/drv/cmaq_mod.F90 b/src/drv/cmaq_mod.F90 index e235a5c7..3dda19a1 100644 --- a/src/drv/cmaq_mod.F90 +++ b/src/drv/cmaq_mod.F90 @@ -133,8 +133,8 @@ SUBROUTINE VDIFF ( CGRID, JDATE, JTIME, TSTEP ) END SUBROUTINE VDIFF SUBROUTINE CLDPROC ( CGRID, JDATE, JTIME, TSTEP ) REAL, POINTER :: CGRID( :,:,:,: ) - INTEGER, INTENT( IN ) :: JDATE, JTIME - INTEGER, INTENT( IN ) :: TSTEP( 3 ) + INTEGER :: JDATE, JTIME + INTEGER :: TSTEP( 3 ) END SUBROUTINE CLDPROC SUBROUTINE CHEM ( CGRID, JDATE, JTIME, TSTEP ) REAL, POINTER :: CGRID( :,:,:,: ) From 4ce5cf3e02d26c52090a05c9bc891da8d91ffa8a Mon Sep 17 00:00:00 2001 From: Raffaele Montuoro Date: Mon, 31 Oct 2022 18:23:46 +0000 Subject: [PATCH 09/12] Enable CMAQ's interface processor between cloud dynamics and aqueous chemistry while keeping aqueous chemistry disabled. --- CMakeLists.txt | 2 +- aqm_files.cmake | 2 ++ src/shr/aqm_methods.F90 | 35 +++++++++++++++++++++++------------ 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9ffcc81d..fc6c8f49 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -94,7 +94,7 @@ target_compile_definitions(CCTM PUBLIC SUBST_FILES_ID="FILES_CTM.EXT" SUBST_COMM=NOOP_COMM SUBST_BARRIER=NOOP_BARRIER SUBST_SUBGRID_INDEX=NOOP_SUBGRID_INDEX - AQ_MAP=DUMMY_AQ_MAP + AQCHEM=DUMMY_AQCHEM CONVCLD_ACM=DUMMY_CONVCLD_ACM EDDYX=DUMMY_EDDYX MOSAIC_MOD=MOSAIC_MODULE diff --git a/aqm_files.cmake b/aqm_files.cmake index 90d8e6d4..c8890099 100644 --- a/aqm_files.cmake +++ b/aqm_files.cmake @@ -119,6 +119,8 @@ list(APPEND aqm_CCTM_files ${CLOUD}/indexn.f ${CLOUD}/rescld.F ${CLOUD}/scavwdep.F + ${CLOUD}/aq_map.F + ${CLOUD}/AQ_DATA.F ${DEPV}/ABFLUX_MOD.F ${DEPV}/BIDI_MOD.F ${DEPV}/cgrid_depv.F diff --git a/src/shr/aqm_methods.F90 b/src/shr/aqm_methods.F90 index 1d0a6999..a5946dd9 100644 --- a/src/shr/aqm_methods.F90 +++ b/src/shr/aqm_methods.F90 @@ -1276,18 +1276,29 @@ END FUNCTION WRITE3_REAL4D ! -- dummy subroutines -SUBROUTINE DUMMY_AQ_MAP( JDATE, JTIME, WTBAR, WCBAR, TBARC, PBARC, & - CTHK1, AIRM, PRATE1, TAUCLD, POLC, CEND, & - REMOV, REMOVAC, ALFA0, ALFA2, ALFA3, DARK ) - INTEGER, INTENT( IN ) :: JDATE, JTIME - REAL, INTENT( IN ) :: WTBAR, WCBAR, TBARC, PBARC, & - CTHK1, AIRM, PRATE1, TAUCLD - REAL, INTENT( IN ) :: POLC ( : ) - REAL, INTENT( INOUT ) :: REMOVAC - REAL, INTENT( INOUT ) :: CEND( : ), REMOV( : ) - REAL, INTENT( IN ) :: ALFA0, ALFA2, ALFA3 - LOGICAL, INTENT( IN ) :: DARK -END SUBROUTINE DUMMY_AQ_MAP +SUBROUTINE DUMMY_AQCHEM ( JDATE, JTIME, TEMP, PRES_PA, TAUCLD, PRCRATE, & + WCAVG, WTAVG, AIRM, ALFA0, ALFA2, ALFA3, GAS, & + AEROSOL, GASWDEP, AERWDEP, HPWDEP, BETASO4, DARK ) + INTEGER, INTENT( IN ) :: JDATE + INTEGER, INTENT( IN ) :: JTIME + REAL, INTENT( IN ) :: AIRM + REAL, INTENT( IN ) :: ALFA0 + REAL, INTENT( IN ) :: ALFA2 + REAL, INTENT( IN ) :: ALFA3 + REAL, INTENT( OUT ) :: HPWDEP + REAL( 8 ), INTENT( OUT ) :: BETASO4 + REAL, INTENT( IN ) :: PRCRATE + REAL, INTENT( IN ) :: PRES_PA + REAL, INTENT( IN ) :: TAUCLD + REAL, INTENT( IN ) :: TEMP + REAL, INTENT( IN ) :: WCAVG + REAL, INTENT( IN ) :: WTAVG + REAL( 8 ), INTENT( INOUT ) :: GAS ( : ) + REAL( 8 ), INTENT( INOUT ) :: AEROSOL( :,: ) + REAL( 8 ), INTENT( INOUT ) :: GASWDEP( : ) + REAL( 8 ), INTENT( INOUT ) :: AERWDEP( :,: ) + LOGICAL, INTENT( IN ) :: DARK +END SUBROUTINE DUMMY_AQCHEM SUBROUTINE DUMMY_CONVCLD_ACM ( CGRID, JDATE, JTIME, TSTEP, & N_SPC_WDEP, WDEP_MAP, CONV_DEP, SUBTRANS ) From ce50213cb0c497ea4e318e49c6040861718bba08 Mon Sep 17 00:00:00 2001 From: Raffaele Montuoro Date: Mon, 31 Oct 2022 19:14:55 +0000 Subject: [PATCH 10/12] Update GNU build system. --- src/model/Makefile.am | 8 +++++ src/model/Makefile.in | 83 ++++++++++++++++++++++++------------------- 2 files changed, 54 insertions(+), 37 deletions(-) diff --git a/src/model/Makefile.am b/src/model/Makefile.am index 280d509c..c5fed5d3 100644 --- a/src/model/Makefile.am +++ b/src/model/Makefile.am @@ -53,6 +53,13 @@ CLOUD = $(CCTM)/cloud/acm_ae6 libCLOUD = $(CLOUD)/$(libCCTM)- libCCTM_a_SOURCES += \ $(CLOUD)/hlconst.F + $(CLOUD)/cldproc_acm.F + $(CLOUD)/getalpha.F + $(CLOUD)/indexn.f + $(CLOUD)/rescld.F + $(CLOUD)/scavwdep.F + $(CLOUD)/aq_map.F + $(CLOUD)/AQ_DATA.F # depv DEPV = $(CCTM)/depv/m3dry @@ -254,6 +261,7 @@ libCCTM_a_CPPFLAGS += -DSUBST_COMM=NOOP_COMM libCCTM_a_CPPFLAGS += -DSUBST_BARRIER=NOOP_BARRIER libCCTM_a_CPPFLAGS += -DSUBST_SUBGRID_INDEX=NOOP_SUBGRID_INDEX libCCTM_a_CPPFLAGS += -DMOSAIC_MOD=MOSAIC_MODULE -DMosaic_Mod=Mosaic_Module +libCCTM_a_CPPFLAGS += -DAQCHEM=DUMMY_AQCHEM -DCONVCLD_ACM=DUMMY_CONVCLD_ACM libCCTM_a_CPPFLAGS += -DEDDYX=DUMMY_EDDYX libCCTM_a_CPPFLAGS += -DOPCONC=DUMMY_OPCONC -DOPACONC=DUMMY_OPACONC libCCTM_a_CPPFLAGS += -DOPWDEP=DUMMY_OPWDEP -DWR_INIT=DUMMY_WR_INIT diff --git a/src/model/Makefile.in b/src/model/Makefile.in index 42b6fd24..4177970a 100644 --- a/src/model/Makefile.in +++ b/src/model/Makefile.in @@ -468,11 +468,11 @@ libCCTM_a_SOURCES = $(AERO)/AERO_DATA.F $(AERO)/aero_depv.F \ $(DEPV)/MOSAIC_MOD.F $(DEPV)/opdepv_diag.F \ $(DEPV)/opdepv_mos.F $(DEPV)/opdepv_fst.F $(DEPV)/m3dry.F \ $(EMIS)/BEIS_DEFN.F $(EMIS)/BIOG_EMIS.F $(EMIS)/cropcal.F \ - $(EMIS)/EMIS_DEFN.F $(EMIS)/LTNG_DEFN.F \ - $(EMIS)/LUS_DEFN.F $(EMIS)/MGEMIS.F $(EMIS)/opemis.F \ - $(EMIS)/PTBILIN.F $(EMIS)/SSEMIS.F $(EMIS)/STK_EMIS.F \ - $(EMIS)/STK_PRMS.F $(EMIS)/tfabove.F $(EMIS)/tfbelow.F \ - $(EMIS)/UDTYPES.F $(GAS)/degrade_data.F $(GAS)/degrade.F \ + $(EMIS)/EMIS_DEFN.F $(EMIS)/LTNG_DEFN.F $(EMIS)/LUS_DEFN.F \ + $(EMIS)/MGEMIS.F $(EMIS)/opemis.F $(EMIS)/PTBILIN.F \ + $(EMIS)/SSEMIS.F $(EMIS)/STK_EMIS.F $(EMIS)/STK_PRMS.F \ + $(EMIS)/tfabove.F $(EMIS)/tfbelow.F $(EMIS)/UDTYPES.F \ + $(GAS)/degrade_data.F $(GAS)/degrade.F \ $(GAS)/DEGRADE_SETUP_TOX.F $(GAS)/final_degrade.F \ $(GAS)/find_degraded.F $(GAS)/hrdata_mod.F $(GAS)/hrdriver.F \ $(GAS)/hrg1.F $(GAS)/hrg2.F $(GAS)/hrg3.F $(GAS)/hrg4.F \ @@ -504,14 +504,14 @@ libCCTM_a_SOURCES = $(AERO)/AERO_DATA.F $(AERO)/aero_depv.F \ $(STENEX)/noop_util_module.f $(UTIL)/bmatvec.F \ $(UTIL)/findex.f $(UTIL)/get_envlist.f $(UTIL)/setup_logdev.F \ $(UTIL)/subhdomain.F $(UTIL)/UTILIO_DEFN.F \ - $(VDIFF)/aero_sedv.F \ - $(VDIFF)/conv_cgrid.F $(VDIFF)/matrix1.F $(VDIFF)/opddep.F \ - $(VDIFF)/opddep_fst.F $(VDIFF)/opddep_mos.F $(VDIFF)/rddepv.F \ - $(VDIFF)/SEDIMENTATION.F $(VDIFF)/tri.F $(VDIFF)/VDIFF_DIAG.F \ - $(VDIFF)/VDIFF_MAP.F $(VDIFF)/vdiffproc.F \ - $(localCCTM)/o3totcol.f $(localCCTM)/vdiffacmx.F \ - $(localCCTM)/PTMAP.F $(localCCTM)/PT3D_DEFN.F \ - $(localCCTM)/ASX_DATA_MOD.F $(localCCTM)/DUST_EMIS.F + $(VDIFF)/aero_sedv.F $(VDIFF)/conv_cgrid.F $(VDIFF)/matrix1.F \ + $(VDIFF)/opddep.F $(VDIFF)/opddep_fst.F $(VDIFF)/opddep_mos.F \ + $(VDIFF)/rddepv.F $(VDIFF)/SEDIMENTATION.F $(VDIFF)/tri.F \ + $(VDIFF)/VDIFF_DIAG.F $(VDIFF)/VDIFF_MAP.F \ + $(VDIFF)/vdiffproc.F $(localCCTM)/o3totcol.f \ + $(localCCTM)/vdiffacmx.F $(localCCTM)/PTMAP.F \ + $(localCCTM)/PT3D_DEFN.F $(localCCTM)/ASX_DATA_MOD.F \ + $(localCCTM)/DUST_EMIS.F # local version of CCTM source files localCCTM = $(builddir)/src @@ -591,6 +591,7 @@ libCCTM_a_CPPFLAGS = -DSUBST_FILES_ID=\"FILES_CTM.EXT\" \ -DSUBST_BARRIER=NOOP_BARRIER \ -DSUBST_SUBGRID_INDEX=NOOP_SUBGRID_INDEX \ -DMOSAIC_MOD=MOSAIC_MODULE -DMosaic_Mod=Mosaic_Module \ + -DAQCHEM=DUMMY_AQCHEM -DCONVCLD_ACM=DUMMY_CONVCLD_ACM \ -DEDDYX=DUMMY_EDDYX -DOPCONC=DUMMY_OPCONC \ -DOPACONC=DUMMY_OPACONC -DOPWDEP=DUMMY_OPWDEP \ -DWR_INIT=DUMMY_WR_INIT -Dverbose_aero -Dverbose_gas -Dmpas \ @@ -1019,10 +1020,12 @@ $(localCCTM)/libCCTM_a-PTMAP.$(OBJEXT): $(localCCTM)/$(am__dirstamp) \ $(localCCTM)/libCCTM_a-PT3D_DEFN.$(OBJEXT): \ $(localCCTM)/$(am__dirstamp) \ $(localCCTM)/$(DEPDIR)/$(am__dirstamp) -$(localCCTM)/libCCTM_a-ASX_DATA_MOD.$(OBJEXT): $(localCCTM)/$(am__dirstamp) \ - $(localCCTM)/$(DEPDIR)/$(am__dirstamp) -$(localCCTM)/libCCTM_a-DUST_EMIS.$(OBJEXT): $(localCCTM)/$(am__dirstamp) \ - $(localCCTM)/$(DEPDIR)/$(am__dirstamp) +$(localCCTM)/libCCTM_a-ASX_DATA_MOD.$(OBJEXT): \ + $(localCCTM)/$(am__dirstamp) \ + $(localCCTM)/$(DEPDIR)/$(am__dirstamp) +$(localCCTM)/libCCTM_a-DUST_EMIS.$(OBJEXT): \ + $(localCCTM)/$(am__dirstamp) \ + $(localCCTM)/$(DEPDIR)/$(am__dirstamp) libCCTM.a: $(libCCTM_a_OBJECTS) $(libCCTM_a_DEPENDENCIES) $(EXTRA_libCCTM_a_DEPENDENCIES) $(AM_V_at)-rm -f libCCTM.a @@ -1274,14 +1277,6 @@ $(EMIS)/libCCTM_a-cropcal.o: $(EMIS)/cropcal.F $(EMIS)/libCCTM_a-cropcal.obj: $(EMIS)/cropcal.F $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCCTM_a_CPPFLAGS) $(CPPFLAGS) $(libCCTM_a_FFLAGS) $(FFLAGS) -c -o $(EMIS)/libCCTM_a-cropcal.obj `if test -f '$(EMIS)/cropcal.F'; then $(CYGPATH_W) '$(EMIS)/cropcal.F'; else $(CYGPATH_W) '$(srcdir)/$(EMIS)/cropcal.F'; fi` -$(localCCTM)/libCCTM_a-DUST_EMIS.o: $(localCCTM)/DUST_EMIS.F - $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCCTM_a_CPPFLAGS) $(CPPFLAGS) $(libCCTM_a_FFLAGS) $(FFLAGS) -c -o $(localCCTM)/libCCTM_a-DUST_EMIS.o `test -f '$(local -CCTM)/DUST_EMIS.F' || echo '$(srcdir)/'`$(localCCTM)/DUST_EMIS.F - -$(localCCTM)/libCCTM_a-DUST_EMIS.obj: $(localCCTM)/DUST_EMIS.F - $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCCTM_a_CPPFLAGS) $(CPPFLAGS) $(libCCTM_a_FFLAGS) $(FFLAGS) -c -o $(localCCTM)/libCCTM_a-DUST_EMIS.obj `if test -f '$( -localCCTM)/DUST_EMIS.F'; then $(CYGPATH_W) '$(localCCTM)/DUST_EMIS.F'; else $(CYGPATH_W) '$(srcdir)/$(localCCTM)/DUST_EMIS.F'; fi` - $(EMIS)/libCCTM_a-EMIS_DEFN.o: $(EMIS)/EMIS_DEFN.F $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCCTM_a_CPPFLAGS) $(CPPFLAGS) $(libCCTM_a_FFLAGS) $(FFLAGS) -c -o $(EMIS)/libCCTM_a-EMIS_DEFN.o `test -f '$(EMIS)/EMIS_DEFN.F' || echo '$(srcdir)/'`$(EMIS)/EMIS_DEFN.F @@ -1618,12 +1613,6 @@ $(VDIFF)/libCCTM_a-aero_sedv.o: $(VDIFF)/aero_sedv.F $(VDIFF)/libCCTM_a-aero_sedv.obj: $(VDIFF)/aero_sedv.F $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCCTM_a_CPPFLAGS) $(CPPFLAGS) $(libCCTM_a_FFLAGS) $(FFLAGS) -c -o $(VDIFF)/libCCTM_a-aero_sedv.obj `if test -f '$(VDIFF)/aero_sedv.F'; then $(CYGPATH_W) '$(VDIFF)/aero_sedv.F'; else $(CYGPATH_W) '$(srcdir)/$(VDIFF)/aero_sedv.F'; fi` -$(liblocalCCTM)/libCCTM_a-ASX_DATA_MOD.o: $(liblocalCCTM)/ASX_DATA_MOD.F - $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCCTM_a_CPPFLAGS) $(CPPFLAGS) $(libCCTM_a_FFLAGS) $(FFLAGS) -c -o $(liblocalCCTM)/libCCTM_a-ASX_DATA_MOD.o `test -f '$(liblocalCCTM)/ASX_DATA_MOD.F' || echo '$(srcdir)/'`$(liblocalCCTM)/ASX_DATA_MOD.F - -$(liblocalCCTM)/libCCTM_a-ASX_DATA_MOD.obj: $(liblocalCCTM)/ASX_DATA_MOD.F - $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCCTM_a_CPPFLAGS) $(CPPFLAGS) $(libCCTM_a_FFLAGS) $(FFLAGS) -c -o $(liblocalCCTM)/libCCTM_a-ASX_DATA_MOD.obj `if test -f '$(liblocalCCTM)/ASX_DATA_MOD.F'; then $(CYGPATH_W) '$(liblocalCCTM)/ASX_DATA_MOD.F'; else $(CYGPATH_W) '$(srcdir)/$(liblocalCCTM)/ASX_DATA_MOD.F'; fi` - $(VDIFF)/libCCTM_a-conv_cgrid.o: $(VDIFF)/conv_cgrid.F $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCCTM_a_CPPFLAGS) $(CPPFLAGS) $(libCCTM_a_FFLAGS) $(FFLAGS) -c -o $(VDIFF)/libCCTM_a-conv_cgrid.o `test -f '$(VDIFF)/conv_cgrid.F' || echo '$(srcdir)/'`$(VDIFF)/conv_cgrid.F @@ -1707,6 +1696,18 @@ $(localCCTM)/libCCTM_a-PT3D_DEFN.o: $(localCCTM)/PT3D_DEFN.F $(localCCTM)/libCCTM_a-PT3D_DEFN.obj: $(localCCTM)/PT3D_DEFN.F $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCCTM_a_CPPFLAGS) $(CPPFLAGS) $(libCCTM_a_FFLAGS) $(FFLAGS) -c -o $(localCCTM)/libCCTM_a-PT3D_DEFN.obj `if test -f '$(localCCTM)/PT3D_DEFN.F'; then $(CYGPATH_W) '$(localCCTM)/PT3D_DEFN.F'; else $(CYGPATH_W) '$(srcdir)/$(localCCTM)/PT3D_DEFN.F'; fi` + +$(localCCTM)/libCCTM_a-ASX_DATA_MOD.o: $(localCCTM)/ASX_DATA_MOD.F + $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCCTM_a_CPPFLAGS) $(CPPFLAGS) $(libCCTM_a_FFLAGS) $(FFLAGS) -c -o $(localCCTM)/libCCTM_a-ASX_DATA_MOD.o `test -f '$(localCCTM)/ASX_DATA_MOD.F' || echo '$(srcdir)/'`$(localCCTM)/ASX_DATA_MOD.F + +$(localCCTM)/libCCTM_a-ASX_DATA_MOD.obj: $(localCCTM)/ASX_DATA_MOD.F + $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCCTM_a_CPPFLAGS) $(CPPFLAGS) $(libCCTM_a_FFLAGS) $(FFLAGS) -c -o $(localCCTM)/libCCTM_a-ASX_DATA_MOD.obj `if test -f '$(localCCTM)/ASX_DATA_MOD.F'; then $(CYGPATH_W) '$(localCCTM)/ASX_DATA_MOD.F'; else $(CYGPATH_W) '$(srcdir)/$(localCCTM)/ASX_DATA_MOD.F'; fi` + +$(localCCTM)/libCCTM_a-DUST_EMIS.o: $(localCCTM)/DUST_EMIS.F + $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCCTM_a_CPPFLAGS) $(CPPFLAGS) $(libCCTM_a_FFLAGS) $(FFLAGS) -c -o $(localCCTM)/libCCTM_a-DUST_EMIS.o `test -f '$(localCCTM)/DUST_EMIS.F' || echo '$(srcdir)/'`$(localCCTM)/DUST_EMIS.F + +$(localCCTM)/libCCTM_a-DUST_EMIS.obj: $(localCCTM)/DUST_EMIS.F + $(AM_V_PPF77)$(F77) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libCCTM_a_CPPFLAGS) $(CPPFLAGS) $(libCCTM_a_FFLAGS) $(FFLAGS) -c -o $(localCCTM)/libCCTM_a-DUST_EMIS.obj `if test -f '$(localCCTM)/DUST_EMIS.F'; then $(CYGPATH_W) '$(localCCTM)/DUST_EMIS.F'; else $(CYGPATH_W) '$(srcdir)/$(localCCTM)/DUST_EMIS.F'; fi` .F.f: $(F77COMPILE) -F $< @@ -2147,6 +2148,13 @@ uninstall-am: mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am + $(CLOUD)/cldproc_acm.F + $(CLOUD)/getalpha.F + $(CLOUD)/indexn.f + $(CLOUD)/rescld.F + $(CLOUD)/scavwdep.F + $(CLOUD)/aq_map.F + $(CLOUD)/AQ_DATA.F include $(ESMFMKFILE) @@ -2550,13 +2558,14 @@ $(liblocalCCTM)PT3D_DEFN.$(OBJEXT) : $(libAERO)AERO_DATA.$(OBJEXT) \ $(liblocalCCTM)PTMAP.$(OBJEXT) $(libMECHS)RXNS_DATA_MODULE.$(OBJEXT) \ $(libEMIS)STK_EMIS.$(OBJEXT) $(libUTIL)UTILIO_DEFN.$(OBJEXT) $(liblocalCCTM)ASX_DATA_MOD.$(OBJEXT) : $(ICL)/const/CONST.EXT $(ICL)/filenames/FILES_CTM.EXT $(ICL)/mpi/PE_COMM.EXT \ - $(libDEPV)DEPVVARS.$(OBJEXT) $(libGRID)GRID_CONF.$(OBJEXT) \ - $(libDEPV)LSM_MOD.$(OBJEXT) $(libSTENEX)noop_modules.$(OBJEXT) \ - $(libUTIL)UTILIO_DEFN.$(OBJEXT) + $(libDEPV)DEPVVARS.$(OBJEXT) $(libGRID)GRID_CONF.$(OBJEXT) \ + $(libDEPV)LSM_MOD.$(OBJEXT) $(libSTENEX)noop_modules.$(OBJEXT) \ + $(libUTIL)UTILIO_DEFN.$(OBJEXT) $(liblocalCCTM)DUST_EMIS.$(OBJEXT) : $(ICL)/const/CONST.EXT $(ICL)/filenames/FILES_CTM.EXT \ - $(libAERO)AERO_DATA.$(OBJEXT) $(liblocalCCTM)ASX_DATA_MOD.$(OBJEXT) \ - $(libGRID)GRID_CONF.$(OBJEXT) $(libGRID)HGRD_DEFN.$(OBJEXT) \ - $(libEMIS)LUS_DEFN.$(OBJEXT) $(libUTIL)UTILIO_DEFN.$(OBJEXT) + $(libAERO)AERO_DATA.$(OBJEXT) $(liblocalCCTM)ASX_DATA_MOD.$(OBJEXT) \ + $(libGRID)GRID_CONF.$(OBJEXT) $(libGRID)HGRD_DEFN.$(OBJEXT) \ + $(libEMIS)LUS_DEFN.$(OBJEXT) $(libUTIL)UTILIO_DEFN.$(OBJEXT) + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: From c9e54f287e9a5284145e60605ed99e5ab962a856 Mon Sep 17 00:00:00 2001 From: Raffaele Montuoro Date: Tue, 1 Nov 2022 18:20:16 +0000 Subject: [PATCH 11/12] Initialize output arguments of dummy methods. --- src/shr/aqm_methods.F90 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/shr/aqm_methods.F90 b/src/shr/aqm_methods.F90 index a5946dd9..9ecefa05 100644 --- a/src/shr/aqm_methods.F90 +++ b/src/shr/aqm_methods.F90 @@ -1298,6 +1298,8 @@ SUBROUTINE DUMMY_AQCHEM ( JDATE, JTIME, TEMP, PRES_PA, TAUCLD, PRCRATE, & REAL( 8 ), INTENT( INOUT ) :: GASWDEP( : ) REAL( 8 ), INTENT( INOUT ) :: AERWDEP( :,: ) LOGICAL, INTENT( IN ) :: DARK + BETASO4 = 0.0D0 + HPWDEP = 0.0 END SUBROUTINE DUMMY_AQCHEM SUBROUTINE DUMMY_CONVCLD_ACM ( CGRID, JDATE, JTIME, TSTEP, & @@ -1311,7 +1313,7 @@ SUBROUTINE DUMMY_CONVCLD_ACM ( CGRID, JDATE, JTIME, TSTEP, & REAL, INTENT( INOUT ) :: CONV_DEP( :,:,: ) REAL, INTENT( OUT ) :: SUBTRANS( :,:,: ) CONV_DEP = 0.0 - SUBTRANS = 0.0 + SUBTRANS = 1.0 END SUBROUTINE DUMMY_CONVCLD_ACM SUBROUTINE DUMMY_EDDYX ( EDDYV ) From 98c5d3b7b3d04c0347d862b71216fb23a38c8c0b Mon Sep 17 00:00:00 2001 From: Raffaele Montuoro Date: Tue, 1 Nov 2022 20:27:45 +0000 Subject: [PATCH 12/12] Add run_rescld: configuration key to enable(true)/disable(false) CMAQ wet deposition processes in resolved-scale clouds. --- examples/aqm.rc | 8 +++++++- src/drv/cmaq_mod.F90 | 8 +++++--- src/drv/cmaq_model_mod.F90 | 2 +- src/shr/aqm_config_mod.F90 | 16 ++++++++++++++++ 4 files changed, 29 insertions(+), 5 deletions(-) diff --git a/examples/aqm.rc b/examples/aqm.rc index b09c9e5f..db18f4fd 100644 --- a/examples/aqm.rc +++ b/examples/aqm.rc @@ -35,9 +35,15 @@ omi_data: /scratch1/NCEPDEV/nems/Raffaele.Montuoro/dev/aqm/epa/data/omi_cmaq_ init_concentrations: true # -# Run aerosol module +# Run options: +# +# - enable aerosol module # run_aerosol: true +# +# - enable wet deposition processes in resolved-scale clouds +# +run_rescld: true # # Microphysics scheme used by coupled atmospheric model diff --git a/src/drv/cmaq_mod.F90 b/src/drv/cmaq_mod.F90 index 3dda19a1..b7852dd2 100644 --- a/src/drv/cmaq_mod.F90 +++ b/src/drv/cmaq_mod.F90 @@ -116,10 +116,10 @@ subroutine cmaq_init(rc) end subroutine cmaq_init - subroutine cmaq_advance(jdate, jtime, tstep, run_aero, rc) + subroutine cmaq_advance(jdate, jtime, tstep, run_aero, run_rescld, rc) integer, intent(in) :: jdate, jtime, tstep(3) - logical, intent(in) :: run_aero + logical, intent(in) :: run_aero, run_rescld integer, optional, intent(out) :: rc ! -- local variables @@ -154,7 +154,9 @@ END SUBROUTINE AERO ! -- advance all physical and chemical processes on a grid CALL VDIFF ( CGRID, JDATE, JTIME, TSTEP ) - CALL CLDPROC ( CGRID, JDATE, JTIME, TSTEP ) + if (run_rescld) then + CALL CLDPROC ( CGRID, JDATE, JTIME, TSTEP ) + end if CALL CHEM ( CGRID, JDATE, JTIME, TSTEP ) diff --git a/src/drv/cmaq_model_mod.F90 b/src/drv/cmaq_model_mod.F90 index 4fc0afff..5430c5fb 100644 --- a/src/drv/cmaq_model_mod.F90 +++ b/src/drv/cmaq_model_mod.F90 @@ -122,7 +122,7 @@ subroutine cmaq_model_advance(jdate, jtime, tstep, rc) end if ! -- advance model - call cmaq_advance(jdate, jtime, tstep, config % run_aero, rc=localrc) + call cmaq_advance(jdate, jtime, tstep, config % run_aero, config % run_rescld, rc=localrc) if (aqm_rc_check(localrc, msg="Failed to advance CMAQ on local DE", & file=__FILE__, line=__LINE__, rc=rc)) return diff --git a/src/shr/aqm_config_mod.F90 b/src/shr/aqm_config_mod.F90 index 971f8b20..626d043f 100644 --- a/src/shr/aqm_config_mod.F90 +++ b/src/shr/aqm_config_mod.F90 @@ -35,6 +35,7 @@ module aqm_config_mod logical :: ctm_wb_dust = .false. logical :: init_conc = .false. logical :: run_aero = .false. + logical :: run_rescld = .false. logical :: fengsha_yn = .true. logical :: verbose = .false. type(aqm_species_type), pointer :: species => null() @@ -142,6 +143,14 @@ subroutine aqm_config_read(model, config, rc) rcToReturn=rc)) & return ! bail out + call ESMF_ConfigGetAttribute(cf, config % run_rescld, & + label="run_rescld:", default=.true., rc=localrc) + if (ESMF_LogFoundError(rcToCheck=localrc, msg=ESMF_LOGERR_PASSTHRU, & + line=__LINE__, & + file=__FILE__, & + rcToReturn=rc)) & + return ! bail out + ! -- read start up settings call ESMF_ConfigGetAttribute(cf, config % init_conc, & label="init_concentrations:", default=config % initial_run, rc=localrc) @@ -513,6 +522,13 @@ subroutine aqm_config_log(config, name, rc) call ESMF_LogWrite(trim(name) // ": config: read: run_aerosol: false", & ESMF_LOGMSG_INFO, rc=localrc) end if + if (config % run_rescld) then + call ESMF_LogWrite(trim(name) // ": config: read: run_rescld: true", & + ESMF_LOGMSG_INFO, rc=localrc) + else + call ESMF_LogWrite(trim(name) // ": config: read: run_rescld: false", & + ESMF_LOGMSG_INFO, rc=localrc) + end if if (config % fengsha_yn) then call ESMF_LogWrite(trim(name) // ": config: read: fengsha_yn: true", & ESMF_LOGMSG_INFO, rc=localrc)