diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ac76cbf..02cae785 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,34 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [3.10.1] - 2025-01-10 +### Added +- Added optional LUN argument to ConfigInit to allow external models to pass LUN of existing log file +- Added two log LUN variables (stdLogLUN and hcoLogLUN) to HcoState%Config for stdout and HEMCO log and initialize both in ConfigInit to stdout or optional LUN (if passed) +- Added output argument LUN to HCO_LOGFILE_OPEN to update HcoState%Config%hcoLogLun to LUN of new log (if using) +- Added optional LUN argument to HCO_MSG, HCO_WARNING, and HCO_ERROR to specify log to print to +- Added special log handling for CESM to ignore LogFile entry in HEMCO_Config.rc (will get passed CAM log LUN to use instead) + +### Changed +- Changed interfaces HCO_MSG, HCO_WARNING, and HCO_ERROR to each be a single subroutine that does not use HcoState%Config%Err +- Changed HCO_MSG, HCO_WARNING, and HCO_ERROR to be independent of verbose and cores +- Updated calls to HCO_MSG to send output to HcoState%Config%hcoLogLUN +- Updated calls to HCO_WARNING to print to stdout unless related to units +- Replaced usage of HCO_IsVerb with HcoState_Config%doVerbose +- Changed documentation in HCO_Error_Mod.F90 to summarize error and log handling in HEMCO +- Updated ReadTheDocs "Understand what error messages mean" supplemental guide + +### Fixed +- Fixed excessive prints when using MPI +- Fixed F77 formating in hcox_dustdead_mod.F + +### Removed +- Removed warnings count in HcoState%Config%Err +- Removed RC argument in HCO_WARNING +- Deleted subroutine HCO_IsVerb +- Remove print of HcoDiagn%MassScal since never set in the model +- Added ReadTheDocs documentation for the HEMCO `LogFile` setting + ## [3.10.0] - 2024-11-07 ### Added - Added TSOIL1 field to `ExtState` diff --git a/CMakeLists.txt b/CMakeLists.txt index 9c8d5d72..ee04cbcd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ # HEMCO/CMakeLists.txt cmake_minimum_required(VERSION 3.5) -project(HEMCO VERSION 3.10.0 LANGUAGES Fortran) +project(HEMCO VERSION 3.10.1 LANGUAGES Fortran) # Reminder: Make sure to also update version in src/Core/hco_error_mod.F90 #----------------------------------------------------------------------------- diff --git a/docs/source/conf.py b/docs/source/conf.py index 27abe255..f7be06e5 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -23,7 +23,7 @@ author = 'GEOS-Chem Support Team' # The full version, including alpha/beta/rc tags -release = '3.10.0' +release = '3.10.1' # -- General configuration --------------------------------------------------- diff --git a/docs/source/geos-chem-shared-docs b/docs/source/geos-chem-shared-docs index 14adeb4d..18712bb6 160000 --- a/docs/source/geos-chem-shared-docs +++ b/docs/source/geos-chem-shared-docs @@ -1 +1 @@ -Subproject commit 14adeb4d8a9cfbdebd688033e4c22dd034ac105b +Subproject commit 18712bb6a61caa921be73ee993996b35cfc8c0da diff --git a/docs/source/hco-ref-guide/hemco-config.rst b/docs/source/hco-ref-guide/hemco-config.rst index 338499d7..f3451716 100644 --- a/docs/source/hco-ref-guide/hemco-config.rst +++ b/docs/source/hco-ref-guide/hemco-config.rst @@ -292,10 +292,20 @@ description file. This is usually named :file:`HEMCO_sa_Grid.rc`. LogFile ------- -Path and name of the output log file (which is typically named -:file:`HEMCO.log`). If set to the -:ref:`hco-cfg-set-wildcard` character, all HEMCO -output is written to **stdout** (i.e. the screen). +Path and name of the output log file. + ++------------------------------------+--------------------------------------------+ +| Value | What it does | ++====================================+============================================+ +| ``*`` | HEMCO will write to stdout (screen output) | ++------------------------------------+--------------------------------------------+ +| A file path (e.g. ``./HEMCO.log``) | HEMCO will open and write to that file | ++------------------------------------+--------------------------------------------+ + +.. note:: + + If you are using HEMCO within CESM, then :literal:`LogFile` will be + ignored and HEMCO will write to the CAM log file :file:`atm.log`. .. _hco-cfg-set-mask-fractions: @@ -416,7 +426,7 @@ the units set in the :ref:`HEMCO configuration file ` and the netCDF :literal:`units` attribute found in the source file. +---------+-----------------------------------------------------------+ -| Setting | What it does | +| Value | What it does | +=========+===========================================================+ | ``0`` | **No tolerance**. A units mismatch will halt a HEMCO | | | simulation. | diff --git a/src/Core/hco_calc_mod.F90 b/src/Core/hco_calc_mod.F90 index 137ce2d2..d320f099 100644 --- a/src/Core/hco_calc_mod.F90 +++ b/src/Core/hco_calc_mod.F90 @@ -247,17 +247,17 @@ SUBROUTINE HCO_CalcEmis( HcoState, UseConc, RC ) DoDiagn = HcoState%Options%AutoFillDiagn !Write AutoFill diagnostics? ! Verbose mode - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE (MSG, *) 'Run HEMCO calculation w/ following options:' - CALL HCO_MSG ( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE (MSG, "(A20,I5)") 'Extension number:', ExtNr - CALL HCO_MSG ( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE (MSG, "(A20,I5,I5)") 'Tracer range:', SpcMin, SpcMax - CALL HCO_MSG ( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE (MSG, "(A20,I5,I5)") 'Category range:', CatMin, CatMax - CALL HCO_MSG ( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE (MSG, *) 'Auto diagnostics: ', DoDiagn - CALL HCO_MSG ( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF !================================================================= @@ -391,17 +391,17 @@ SUBROUTINE HCO_CalcEmis( HcoState, UseConc, RC ) SpcFlx(:,:,:) = SpcFlx(:,:,:) + CatFlx(:,:,:) ! verbose - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Added category emissions to species array: ' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) 'Species : ', PrevSpc - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) 'Category : ', PrevCat - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) 'Cat. emissions: ', SUM(CatFlx) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) 'Spc. emissions: ', SUM(SpcFlx) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! Add category emissions to diagnostics at category level @@ -452,15 +452,15 @@ SUBROUTINE HCO_CalcEmis( HcoState, UseConc, RC ) OutArr(:,:,:) = OutArr(:,:,:) + SpcFlx(:,:,:) ! testing only - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Added total emissions to output array: ' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) 'Species: ', PrevSpc - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) 'SpcFlx : ', SUM(SpcFlx) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) 'OutArr : ', SUM(OutArr) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! Add to diagnostics at extension number level. @@ -568,10 +568,10 @@ SUBROUTINE HCO_CalcEmis( HcoState, UseConc, RC ) ENDIF ! verbose mode - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Calculating emissions for species ', & TRIM(HcoState%Spc(ThisSpc)%SpcName) - CALL HCO_MSG( HcoState%Config%Err, MSG, SEP1='-', SEP2='-' ) + CALL HCO_MSG( MSG, SEP1='-', SEP2='-', LUN=HcoState%Config%hcoLogLUN ) ENDIF ENDIF @@ -604,7 +604,7 @@ SUBROUTINE HCO_CalcEmis( HcoState, UseConc, RC ) IF ( HcoState%Options%NegFlag == 1 ) THEN WHERE ( TmpFlx < 0.0_hp ) TmpFlx = 0.0_hp MSG = 'Negative emissions set to zero: '// TRIM(Dct%cName) - CALL HCO_WARNING( HcoState%Config%Err, MSG, RC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG ) ! Return with error ELSE @@ -701,9 +701,9 @@ SUBROUTINE HCO_CalcEmis( HcoState, UseConc, RC ) OutArr => NULL() ! verbose - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE (MSG, *) 'HEMCO emissions successfully calculated!' - CALL HCO_MSG ( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ! Leave w/ success @@ -879,9 +879,9 @@ SUBROUTINE Get_Current_Emissions( HcoState, BaseDct, nI, nJ, & MaskFractions = HcoState%Options%MaskFractions ! Verbose output - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(msg,*) 'Evaluate field ', TRIM(BaseDct%cName) - CALL HCO_Msg( HcoState%Config%Err, msg, sep1=' ' ) + CALL HCO_Msg( msg, sep1=' ', LUN=HcoState%Config%hcoLogLUN ) ENDIF #if !defined ( ESMF_ ) @@ -1114,18 +1114,18 @@ SUBROUTINE Get_Current_Emissions( HcoState, BaseDct, nI, nJ, & ! the simulation datetime is outside of this range. !------------------------------------------------------------------ IF ( .not. FileData_ArrIsDefined( ScalDct%Dta ) ) THEN - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN msg = 'Skip scale factor ' // TRIM( ScalDct%cName ) // & ' because it is not defined for this datetime.' - CALL HCO_MSG( HcoState%Config%Err, msg ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF CYCLE ENDIF ! Verbose printout - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN MSG = 'Applying scale factor ' // TRIM(ScalDct%cName) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF !------------------------------------------------------------------ @@ -1241,11 +1241,11 @@ SUBROUTINE Get_Current_Emissions( HcoState, BaseDct, nI, nJ, & mask(I,J,:) = mask(I,J,:) * TMPVAL ! Verbose printout - IF ( HCO_IsVerb(HcoState%Config%Err) .and. & + IF ( HcoState%Config%doVerbose .and. & I==1 .AND. J==1 ) THEN msg = 'Mask field ' // TRIM( ScalDct%cName ) // & ' found and added to temporary mask.' - CALL HCO_Msg( HcoState%Config%Err, msg ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ! Advance to next grid box @@ -1310,7 +1310,7 @@ SUBROUTINE Get_Current_Emissions( HcoState, BaseDct, nI, nJ, & error = -1 CYCLE ELSE - WRITE( 6, * ) 'Negative scale factor at ', & + WRITE(HcoState%Config%stdLogLUN,*) 'Negative scale factor at ', & I, J, TmpLL, tidx, ': ', & TRIM(ScalDct%cName), TMPVAL error = 1 @@ -1340,18 +1340,18 @@ SUBROUTINE Get_Current_Emissions( HcoState, BaseDct, nI, nJ, & !--------------------------------------------------------------- ! Verbose printout !---------------------------------------------------------------- - IF ( HCO_IsVerb(HcoState%Config%Err) .and. & + IF ( HcoState%Config%doVerbose .and. & I == ix .and. J == iy ) THEN write(MSG,*) 'Scale field ', TRIM(ScalDct%cName) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) 'Time slice: ', tIdx - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) 'IX, IY: ', IX, IY - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) 'Scale factor (IX,IY,L1): ', TMPVAL - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) 'Mathematical operation : ', ScalDct%Oper - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDDO !I @@ -1390,7 +1390,7 @@ SUBROUTINE Get_Current_Emissions( HcoState, BaseDct, nI, nJ, & IF ( ERROR == -1 ) THEN msg = 'Negative scale factor found (ignored): ' // & TRIM( ScalDct%cName ) - CALL HCO_WARNING( HcoState%Config%Err, msg, RC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG ) ENDIF ! Free pointer @@ -1923,7 +1923,7 @@ SUBROUTINE HCO_EvalFld_2D( HcoState, cName, Arr2D, RC, FOUND ) UseLL = MIN( MAX(useLL,1), SIZE(Arr3D,3) ) IF ( UseLL /= 1 ) THEN WRITE(MSG,*) "2D data was emitted above surface - this information might be lost: " , TRIM(cName), UseLL - CALL HCO_WARNING( HcoState%Config%Err, MSG, RC, THISLOC=LOC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG, THISLOC=LOC ) ENDIF ! Pass 3D data to 2D array @@ -2087,13 +2087,13 @@ SUBROUTINE HCO_MaskFld ( HcoState, MaskName, Mask, RC, FOUND ) IF ( .NOT. FND .AND. .NOT. PRESENT(FOUND) ) THEN MSG = 'Cannot find mask field ' // TRIM(MaskName) - CALL HCO_MSG(HcoState%Config%Err,MSG,SEP1='!') + CALL HCO_MSG(MSG,SEP1='!',LUN=HcoState%Config%hcoLogLUN) MSG = 'Make sure this field is listed in the mask section ' // & 'of the HEMCO configuration file. You may also need to ' // & 'set the optional attribute `ReadAlways` to `yes`, e.g.' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) MSG = '5000 TESTMASK -140/10/-40/90 - - - xy 1 1 -140/10/-40/90 yes' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) CALL HCO_ERROR ( & 'Error reading mask '//TRIM(MaskName), RC, THISLOC=LOC ) RETURN @@ -2510,7 +2510,7 @@ SUBROUTINE GetIdx( HcoState, I, J, alt, altu, lidx, RC ) lidx = HcoState%NZ WRITE(MSG,*) & 'Level is above max. grid box level - use top level ', alt - CALL HCO_WARNING ( HcoState%Config%Err, MSG, RC, THISLOC=LOC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG, THISLOC=LOC ) RETURN ENDIF @@ -2651,7 +2651,7 @@ SUBROUTINE GetDilFact( HcoState, EmisL1, EmisL1Unit, EmisL2, & DilFact = dh / ( h2 - h1 ) ELSE MSG = 'GetDilFact h2 not greater than h1' - CALL HCO_ERROR ( HcoState%Config%Err, MSG, RC, THISLOC=LOC ) + CALL HCO_ERROR ( MSG, RC, THISLOC=LOC ) RETURN ENDIF @@ -2828,9 +2828,9 @@ SUBROUTINE Get_Current_Emissions_Adj( HcoState, BaseDct, & MaskFractions = HcoState%Options%MaskFractions ! Verbose - IF ( HCO_IsVerb(HcoState%Config%Err) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Evaluate field ', TRIM(BaseDct%cName) - CALL HCO_MSG(HcoState%Config%Err,MSG,SEP1=' ') + CALL HCO_MSG(SEP1=' ',LUN=HcoState%Config%hcoLogLUN) ENDIF ! ---------------------------------------------------------------- @@ -2873,7 +2873,7 @@ SUBROUTINE Get_Current_Emissions_Adj( HcoState, BaseDct, & LevDct1_Unit = GetEmisLUnit( HcoState, LevDct1 ) IF ( LevDct1_Unit < 0 ) THEN MSG = 'LevDct1 units are not defined!' - CALL HCO_ERROR ( HcoState%Config%Err, MSG, RC, THISLOC=LOC ) + CALL HCO_ERROR ( MSG, RC, THISLOC=LOC ) RC = HCO_FAIL RETURN ENDIF @@ -2886,7 +2886,7 @@ SUBROUTINE Get_Current_Emissions_Adj( HcoState, BaseDct, & LevDct2_Unit = GetEmisLUnit( HcoState, LevDct2 ) IF ( LevDct2_Unit < 0 ) THEN MSG = 'LevDct2_Units are not defined!' - CALL HCO_ERROR ( HcoState%Config%Err, MSG, RC, THISLOC=LOC ) + CALL HCO_ERROR ( MSG, RC, THISLOC=LOC ) RETURN ENDIF ELSE @@ -2898,7 +2898,7 @@ SUBROUTINE Get_Current_Emissions_Adj( HcoState, BaseDct, & LevDct2_Unit == HCO_EMISL_M ) THEN IF ( .NOT. ASSOCIATED(HcoState%Grid%BXHEIGHT_M%Val) ) THEN MSG = 'Boxheight (in meters) is missing in HEMCO state' - CALL HCO_ERROR ( HcoState%Config%Err, MSG, RC, THISLOC=LOC ) + CALL HCO_ERROR ( MSG, RC, THISLOC=LOC ) RETURN ENDIF ENDIF @@ -2908,7 +2908,7 @@ SUBROUTINE Get_Current_Emissions_Adj( HcoState, BaseDct, & LevDct2_Unit == HCO_EMISL_PBL ) THEN IF ( .NOT. ASSOCIATED(HcoState%Grid%PBLHEIGHT%Val) ) THEN MSG = 'Boundary layer height is missing in HEMCO state' - CALL HCO_ERROR ( HcoState%Config%Err, MSG, RC, THISLOC=LOC ) + CALL HCO_ERROR ( MSG, RC, THISLOC=LOC ) RETURN ENDIF ENDIF @@ -3038,18 +3038,18 @@ SUBROUTINE Get_Current_Emissions_Adj( HcoState, BaseDct, & ! if scale factors are only defined for a given time range and ! the simulation datetime is outside of this range. IF ( .NOT. FileData_ArrIsDefined(ScalDct%Dta) ) THEN - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN MSG = 'Skip scale factor '//TRIM(ScalDct%cName)// & ' because it is not defined for this datetime.' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF CYCLE ENDIF ! Verbose mode - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN MSG = 'Applying scale factor ' // TRIM(ScalDct%cName) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! Get vertical extension of this scale factor array. @@ -3146,10 +3146,10 @@ SUBROUTINE Get_Current_Emissions_Adj( HcoState, BaseDct, & MASK(I,J,:) = MASK(I,J,:) * TMPVAL ! testing only - IF ( HCO_IsVerb(HcoState%Config%Err) .AND. I==1 .AND. J==1 ) THEN + IF ( HcoState%Config%doVerbose .AND. I==1 .AND. J==1 ) THEN write(MSG,*) 'Mask field ', TRIM(ScalDct%cName), & ' found and added to temporary mask.' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! Advance to next grid box @@ -3251,17 +3251,17 @@ SUBROUTINE Get_Current_Emissions_Adj( HcoState, BaseDct, & ENDDO !LL ! Verbose mode - if ( HCO_IsVerb(HcoState%Config%Err) .and. i == ix .and. j == iy ) then + if ( HcoState%Config%doVerbose .and. i == ix .and. j == iy ) then write(MSG,*) 'Scale field ', TRIM(ScalDct%cName) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) 'Time slice: ', tIdx - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) 'IX, IY: ', IX, IY - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) 'Scale factor (IX,IY,L1): ', TMPVAL - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) 'Mathematical operation : ', ScalDct%Oper - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ! write(lun,*) 'Updt (IX,IY,L1): ', OUTARR_3D(IX,IY,1) endif @@ -3290,7 +3290,7 @@ SUBROUTINE Get_Current_Emissions_Adj( HcoState, BaseDct, & ! eventually prompt warning for negative values IF ( ERROR == -1 ) THEN MSG = 'Negative scale factor found (ignored): ' // TRIM(ScalDct%cName) - CALL HCO_WARNING( HcoState%Config%Err, MSG, RC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG ) ENDIF ! Free pointer diff --git a/src/Core/hco_clock_mod.F90 b/src/Core/hco_clock_mod.F90 index a0028395..5c1ee8bf 100644 --- a/src/Core/hco_clock_mod.F90 +++ b/src/Core/hco_clock_mod.F90 @@ -319,9 +319,9 @@ SUBROUTINE HcoClock_InitTzPtr( HcoState, RC ) ! Make sure HcoClock obj. is associated IF ( .NOT. ASSOCIATED(HcoState%Clock) ) THEN - CALL HCO_WARNING( HcoState%Config%Err, & + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( & 'CANNOT SET TIMEZONES - HEMCO CLOCK IS NOT DEFINED', & - RC, THISLOC='HcoClock_InitTzPtr (hco_clock_mod.F90)' ) + THISLOC='HcoClock_InitTzPtr (hco_clock_mod.F90)' ) RETURN ENDIF @@ -332,11 +332,13 @@ SUBROUTINE HcoClock_InitTzPtr( HcoState, RC ) ! Print a message IF ( HcoState%amIRoot ) THEN IF ( FOUND ) THEN - CALL HCO_MSG( HcoState%Config%Err, & - 'TIMEZONES (i.e. OFFSETS FROM UTC) WERE READ FROM A FILE' ) + CALL HCO_MSG( & + 'TIMEZONES (i.e. OFFSETS FROM UTC) WERE READ FROM A FILE', & + LUN=HcoState%Config%hcoLogLUN ) ELSE - CALL HCO_MSG( HcoState%Config%Err, & - 'TIMEZONES (i.e. OFFSETS FROM UTC) WERE COMPUTED FROM LONGITUDE' ) + CALL HCO_MSG( & + 'TIMEZONES (i.e. OFFSETS FROM UTC) WERE COMPUTED FROM LONGITUDE', & + LUN=HcoState%Config%hcoLogLUN ) ENDIF ENDIF @@ -425,7 +427,7 @@ SUBROUTINE HcoClock_Set ( HcoState, cYr, cMt, cDy, cHr, & IF ( FND ) THEN Clock%FixYY = DUM WRITE(MSG,*) 'Emission year will be fixed to day ', Clock%FixYY - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF CALL GetExtOpt( CF, CoreNr, 'Emission month', OptValInt=DUM, & @@ -439,7 +441,7 @@ SUBROUTINE HcoClock_Set ( HcoState, cYr, cMt, cDy, cHr, & IF ( FND ) THEN Clock%FixMM = DUM WRITE(MSG,*) 'Emission month will be fixed to day ', Clock%FixMM - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF CALL GetExtOpt( CF, CoreNr, 'Emission day', OptValInt=DUM, & @@ -453,7 +455,7 @@ SUBROUTINE HcoClock_Set ( HcoState, cYr, cMt, cDy, cHr, & IF ( FND ) THEN Clock%Fixdd = DUM WRITE(MSG,*) 'Emission day will be fixed to day ', Clock%Fixdd - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF CALL GetExtOpt( CF, CoreNr, 'Emission hour', OptValInt=DUM, & @@ -467,7 +469,7 @@ SUBROUTINE HcoClock_Set ( HcoState, cYr, cMt, cDy, cHr, & IF ( FND ) THEN Clock%Fixhh = DUM WRITE(MSG,*) 'Emission hour will be fixed to day ', Clock%Fixhh - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF @@ -608,21 +610,21 @@ SUBROUTINE HcoClock_Set ( HcoState, cYr, cMt, cDy, cHr, & ! ---------------------------------------------------------------- ! Verbose mode ! ---------------------------------------------------------------- - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN IF ( NewStep ) THEN WRITE(MSG,110) Clock%ThisYear, Clock%ThisMonth, & Clock%ThisDay, Clock%ThisHour, & Clock%ThisMin, Clock%ThisSec - CALL HCO_MSG(HcoState%Config%Err,MSG,SEP1='=') + CALL HCO_MSG( msg, SEP1='=', LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,120) Clock%ThisWD - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,130) EmisTime - CALL HCO_MSG(HcoState%Config%Err,MSG,SEP2=' ') + CALL HCO_MSG(MSG,SEP2=' ',LUN=HcoState%Config%hcoLogLUN) ELSEIF ( EmisTime ) THEN WRITE(MSG,140) Clock%ThisYear, Clock%ThisMonth, & Clock%ThisDay, Clock%ThisHour, & Clock%ThisMin, Clock%ThisSec - CALL HCO_MSG(HcoState%Config%Err,MSG,SEP1=' ', SEP2=' ') + CALL HCO_MSG(MSG,SEP1=' ', SEP2=' ',LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF diff --git a/src/Core/hco_config_mod.F90 b/src/Core/hco_config_mod.F90 index f1b27372..03606a34 100644 --- a/src/Core/hco_config_mod.F90 +++ b/src/Core/hco_config_mod.F90 @@ -107,9 +107,9 @@ MODULE HCO_Config_Mod ! ! !DESCRIPTION: Subroutine CONFIG\_READFILE reads the HEMCO configuration file, ! archives all HEMCO options and settings (including traceback/error setup), -! and creates a data container for every (used) emission field in the config. +! and creates a data container for every (used) emission field in the config ! file. All containers become linked through the ConfigList linked list. -! Note that lists EmisList and ReadList (created lateron) will point to the +! Note that lists EmisList and ReadList (created later on) will point to the ! same containers, but will order the containers in a manner that is most ! efficient for the respective purpose. ! Argument HcoConfig represents the HEMCO configuration object. It contains @@ -135,7 +135,8 @@ SUBROUTINE Config_ReadFile( am_I_Root, HcoConfig, ConfigFile, Phase, & TYPE(ConfigObj), POINTER :: HcoConfig ! HEMCO config obj CHARACTER(LEN=*), INTENT(IN) :: ConfigFile ! Full file name INTEGER, INTENT(IN) :: Phase ! 0: all - ! 1: Settings and switches only + ! 1: Settings and + ! switches only ! 2: fields only LOGICAL, INTENT(IN), OPTIONAL :: IsNest ! Nested call? LOGICAL, INTENT(IN), OPTIONAL :: IsDryRun ! Dry-run? @@ -202,7 +203,7 @@ SUBROUTINE Config_ReadFile( am_I_Root, HcoConfig, ConfigFile, Phase, & DoDryRun = .FALSE. ENDIF - ! Prompt to standard output (only on the root core + ! Prompt to standard output (only on the root core) IF ( HcoConfig%amIRoot ) THEN IF ( DoDryRun ) THEN @@ -223,7 +224,7 @@ SUBROUTINE Config_ReadFile( am_I_Root, HcoConfig, ConfigFile, Phase, & ENDIF ! Write message to stdout - WRITE( 6, 300 ) TRIM( FileMsg ), TRIM( ConfigFile ) + WRITE( HcoConfig%stdLogLUN, 300 ) TRIM( FileMsg ), TRIM( ConfigFile ) 300 FORMAT( a, ' ./', a ) ELSE @@ -232,17 +233,17 @@ SUBROUTINE Config_ReadFile( am_I_Root, HcoConfig, ConfigFile, Phase, & ! For regular simulations, write a message containing ! the configuration file as well as the Phase value. !----------------------------------------------------------------- - WRITE(6,*) ' ' + WRITE(HcoConfig%stdLogLUN,*) ' ' IF ( Phase == 1 ) THEN - WRITE( 6, 310 ) TRIM(ConfigFile) + WRITE( HcoConfig%stdLogLUN, 310 ) TRIM(ConfigFile) 310 FORMAT( 'Reading settings & switches of HEMCO configuration file: ', a ) ELSEIF ( Phase == 2 ) THEN - WRITE( 6, 320 ) TRIM(ConfigFile) + WRITE( HcoConfig%stdLogLUN, 320 ) TRIM(ConfigFile) 320 FORMAT( 'Reading fields of HEMCO configuration file: ', a ) ELSE - WRITE( 6, 330 ) TRIM(ConfigFile) + WRITE( HcoConfig%stdLogLUN, 330 ) TRIM(ConfigFile) 330 FORMAT( 'Reading entire HEMCO configuration file: ', a ) ENDIF ENDIF @@ -264,7 +265,7 @@ SUBROUTINE Config_ReadFile( am_I_Root, HcoConfig, ConfigFile, Phase, & INQUIRE( FILE=TRIM(ConfigFile), EXIST=EXISTS ) IF ( .NOT. EXISTS ) THEN IF ( HcoConfig%amIRoot ) THEN - WRITE(*,*) 'Cannot read file - it does not exist: ', TRIM(ConfigFile) + WRITE(HcoConfig%stdLogLUN,*) 'Cannot read file - it does not exist: ', TRIM(ConfigFile) ENDIF RC = HCO_FAIL RETURN @@ -274,7 +275,7 @@ SUBROUTINE Config_ReadFile( am_I_Root, HcoConfig, ConfigFile, Phase, & OPEN ( IU_HCO, FILE=TRIM( ConfigFile ), STATUS='OLD', IOSTAT=IOS ) IF ( IOS /= 0 ) THEN IF ( HcoConfig%amIRoot ) THEN - WRITE(*,*) 'Error reading ', TRIM(ConfigFile) + WRITE(HcoConfig%stdLogLUN,*) 'Error reading ', TRIM(ConfigFile) ENDIF RC = HCO_FAIL RETURN @@ -412,13 +413,13 @@ SUBROUTINE Config_ReadFile( am_I_Root, HcoConfig, ConfigFile, Phase, & ! Check if we caught all sections. Do that only for phase 1. ! Sections SETTINGS and extension switches are needed. IF ( PHASE == 1 .AND. NN /= 2 .AND. .NOT. NEST ) THEN - WRITE(*,*) 'Expected 2 sections, found/read ', NN - WRITE(*,*) 'Should read SETTINGS and EXTENSION SWITCHES' + WRITE(HcoConfig%stdLogLUN,*) 'Expected 2 sections, found/read ', NN + WRITE(HcoConfig%stdLogLUN,*) 'Should read SETTINGS and EXTENSION SWITCHES' RC = HCO_FAIL RETURN ENDIF - ! Close file + ! Close configuration file CLOSE( UNIT=IU_HCO, IOSTAT=IOS ) IF ( IOS /= 0 ) THEN msg = 'Error closing ' // TRIM(ConfigFile) @@ -558,7 +559,7 @@ SUBROUTINE SetReadList( HcoState, RC ) HcoState%SetReadListCalled = .TRUE. ! Debug - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN CALL ReadList_Print( HcoState, HcoState%ReadLists ) ENDIF @@ -1370,7 +1371,6 @@ SUBROUTINE BracketCheck( HcoConfig, STAT, LINE, SKIP, RC ) INTEGER :: IDX, STRLEN, ExtNr LOGICAL :: FOUND LOGICAL :: UseBracket, UseThis - LOGICAL :: verb LOGICAL :: REV INTEGER, SAVE :: NEST = 0 INTEGER, SAVE :: SKIPLEVEL = 0 @@ -1384,9 +1384,6 @@ SUBROUTINE BracketCheck( HcoConfig, STAT, LINE, SKIP, RC ) ! BracketCheck begins here !====================================================================== - ! Init - verb = HCO_IsVerb( HcoConfig%Err ) - ! Get name of this bracket IF ( STAT == 5 .OR. STAT == 6 ) THEN STRLEN = LEN(LINE) @@ -1515,11 +1512,11 @@ SUBROUTINE BracketCheck( HcoConfig, STAT, LINE, SKIP, RC ) ENDIF ! Verbose mode - IF ( verb ) THEN + IF ( HcoConfig%doVerbose ) THEN MSG = 'Opened shortcut bracket: '//TRIM(TmpBracket) - CALL HCO_MSG( HcoConfig%Err, msg ) + CALL HCO_MSG( msg, LUN=HcoConfig%hcoLogLUN ) WRITE(MSG,*) ' - Skip content of this bracket: ', SKIP - CALL HCO_MSG( HcoConfig%Err, msg ) + CALL HCO_MSG( msg, LUN=HcoConfig%hcoLogLUN ) ENDIF ENDIF @@ -1544,11 +1541,11 @@ SUBROUTINE BracketCheck( HcoConfig, STAT, LINE, SKIP, RC ) NEST = NEST - 1 ! Verbose mode - IF ( verb ) THEN + IF ( HcoConfig%doVerbose ) THEN MSG = 'Closed shortcut bracket: '//TRIM(TmpBracket) - CALL HCO_MSG( HcoConfig%Err, msg ) + CALL HCO_MSG( msg, LUN=HcoConfig%hcoLogLUN ) WRITE(MSG,*) ' - Skip following lines: ', SKIP - CALL HCO_MSG( HcoConfig%Err, msg ) + CALL HCO_MSG( msg, LUN=HcoConfig%hcoLogLUN ) ENDIF ENDIF @@ -1599,7 +1596,6 @@ SUBROUTINE AddShadowFields( HcoConfig, Lct, Cats, nCat, RC ) ! ! !LOCAL VARIABLES: ! - LOGICAL :: verb INTEGER :: I, N TYPE(ListCont), POINTER :: Shd CHARACTER(LEN=512) :: msg @@ -1618,10 +1614,8 @@ SUBROUTINE AddShadowFields( HcoConfig, Lct, Cats, nCat, RC ) ENDIF ! Init - verb = HCO_IsVerb( HcoConfig%Err ) Shd => NULL() - ! ! Get number of currently used scale factors ! N = 0 ! DO I = 1, SclMax @@ -1674,9 +1668,9 @@ SUBROUTINE AddShadowFields( HcoConfig, Lct, Cats, nCat, RC ) Shd%Dct%Dta => Lct%Dct%Dta ! verbose mode - IF ( verb ) THEN + IF ( HcoConfig%doVerbose ) THEN MSG = 'Created shadow base emission field: ' // TRIM(Shd%Dct%cName) - CALL HCO_MSG( HcoConfig%Err, msg ) + CALL HCO_MSG( msg, LUN=HcoConfig%hcoLogLUN ) ENDIF ! Cleanup @@ -1781,12 +1775,12 @@ SUBROUTINE AddZeroScal( HcoConfig, RC ) Lct%Dct%Dta => Dta ! verbose mode - IF ( HCO_IsVerb( HcoConfig%Err ) ) THEN + IF ( HcoConfig%doVerbose ) THEN MSG = 'Created a fake scale factor with zeros' - CALL HCO_MSG(HcoConfig%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoConfig%hcoLogLUN ) MSG = 'This field will be used to artificially expand ' // & 'over multiple emission categories' - CALL HCO_MSG(HcoConfig%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoConfig%hcoLogLUN ) ENDIF ! Cleanup @@ -2044,7 +2038,7 @@ SUBROUTINE ReadSettings( HcoConfig, IU_HCO, EOF, RC ) ! !LOCAL VARIABLES: ! ! Scalars - LOGICAL :: doVerbose, doVerboseOnRoot, found + LOGICAL :: isVerbose, isVerboseOnRoot, found INTEGER :: I, N, POS ! Strings @@ -2160,13 +2154,13 @@ SUBROUTINE ReadSettings( HcoConfig, IU_HCO, EOF, RC ) IF ( .NOT. ASSOCIATED(HcoConfig%Err) ) THEN ! Initialize - doVerbose = .FALSE. - doVerboseOnRoot = .FALSE. + isVerbose = .FALSE. + isVerboseOnRoot = .FALSE. onCores = '' ! First look for Verbose CALL GetExtOpt( HcoConfig, CoreNr, 'Verbose', & - OptValBool=doVerbose, found=found, RC=RC ) + OptValBool=isVerbose, found=found, RC=RC ) IF ( RC /= HCO_SUCCESS ) THEN msg = 'Error looking for "Verbose" in HEMCO_Config.rc!' CALL HCO_Error( msg, RC, thisLoc=loc ) @@ -2174,7 +2168,7 @@ SUBROUTINE ReadSettings( HcoConfig, IU_HCO, EOF, RC ) ENDIF ! First look for Verbose (logical). This is now the default - ! inthe HEMCO_Config.rc file for HEMCO 3.7.0 and later. + ! in the HEMCO_Config.rc file for HEMCO 3.7.0 and later. CALL GetExtOpt( HcoConfig, CoreNr, 'VerboseOnCores', & OptValChar=onCores, found=found, RC=RC ) IF ( RC /= HCO_SUCCESS ) THEN @@ -2186,12 +2180,12 @@ SUBROUTINE ReadSettings( HcoConfig, IU_HCO, EOF, RC ) ! Set a flag if Verbose output is to be done on the root core only ! (if false, it will be done on all cores) CALL TranLC( onCores ) - doVerboseOnRoot = ( TRIM( onCores ) == "root" ) + isVerboseOnRoot = ( TRIM( onCores ) == "root" ) ! Print status message - IF ( doVerbose ) THEN + IF ( isVerbose ) THEN msg = NEW_LINE( 'A' ) // 'HEMCO verbose output is ON ' - IF ( doVerboseOnRoot ) THEN + IF ( isVerboseOnRoot ) THEN msg = TRIM( msg ) // ' (root core only)' ELSE msg = TRIM( msg ) // ' (all cores)' @@ -2199,9 +2193,11 @@ SUBROUTINE ReadSettings( HcoConfig, IU_HCO, EOF, RC ) ELSE msg = NEW_LINE( 'A' ) // 'HEMCO verbose output is OFF' ENDIF - IF ( HcoConfig%amIRoot ) CALL HCO_Msg( msg, verb=.TRUE. ) + IF ( HcoConfig%amIRoot ) & + CALL HCO_Msg( msg, LUN=HcoConfig%stdLogLUN ) ! Logfile to write into +#ifndef MODEL_CESM CALL GetExtOpt( HcoConfig, CoreNr, 'Logfile', & OptValChar=Logfile, FOUND=FOUND, RC=RC ) IF ( RC /= HCO_SUCCESS ) THEN @@ -2209,10 +2205,19 @@ SUBROUTINE ReadSettings( HcoConfig, IU_HCO, EOF, RC ) CALL HCO_Error( msg, RC, thisLoc=loc ) RETURN ENDIF + IF ( .NOT. FOUND ) THEN LogFile = 'HEMCO.log' - WRITE(*,*) 'Setting `Logfile` not found in HEMCO logfile - use `HEMCO.log`' + msg = 'Setting `Logfile` not found in HEMCO logfile - use '//trim(LogFile) + CALL HCO_MSG( msg, LUN=HcoConfig%hcoLogLUN ) ENDIF +#else + ! Always write to atm.log in CESM. LogFile entry in HEMCO_Config.rc + ! is omitted in CESM HEMCO_Config.rc. If it is found it will be ignored. + LogFile = 'atm.log' + msg = 'WARNING: HEMCO config entry for LogFile is ignored in CESM' + CALL HCO_MSG( msg, LUN=HcoConfig%stdLogLUN) +#endif ! Initialize (standard) HEMCO tokens CALL HCO_SetDefaultToken( HcoConfig, RC ) @@ -2222,21 +2227,34 @@ SUBROUTINE ReadSettings( HcoConfig, IU_HCO, EOF, RC ) RETURN ENDIF - ! If LogFile is equal to wildcard character, set LogFile to asterik + ! If LogFile is equal to wildcard character, set LogFile to asterisk ! character. This will ensure that all output is written to standard ! output! IF ( TRIM(LogFile) == HCO_GetOpt(HcoConfig%ExtList,'Wildcard') ) & LogFile = '*' ! We should now have everything to define the HEMCO error settings +#ifndef MODEL_CESM + CALL HCO_ERROR_SET( HcoConfig%amIRoot, HcoConfig%Err, LogFile, & + isVerbose, isVerboseOnRoot, RC ) +#else + ! Set Err%LUN to stdLogLUN if using CESM, which is CAM atm.log LUN + ! rather than stdout. If omitted here then CESM will output to + ! the cesm.log file which is LUN=6 in CESM. CALL HCO_ERROR_SET( HcoConfig%amIRoot, HcoConfig%Err, LogFile, & - doVerbose, doVerboseOnRoot, RC ) + isVerbose, isVerboseOnRoot, RC, & + LUN=HcoConfig%stdLogLUN ) +#endif IF ( RC /= HCO_SUCCESS ) THEN msg = 'Error encountered in routine "Hco_Error_Set"!' CALL HCO_Error( msg, RC, thisLoc=loc ) RETURN ENDIF + ! Also set verbose in HcoConfig + IF ( isVerbose .AND. ( HcoConfig%amIRoot .OR. .NOT. isVerboseOnRoot ) ) & + HcoConfig%doVerbose = .TRUE. + ENDIF ! Leave w/ success @@ -2330,13 +2348,13 @@ SUBROUTINE RegisterPrepare( HcoState, RC ) IF ( cpux2 >= 180 ) cpux2 = cpux2 - 360 ! verbose - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Start to prepare fields for registering!' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) 'This CPU x-range: ', cpux1, cpux2 - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) 'This CPU y-range: ', cpuy1, cpuy2 - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! Get next (first) line of ConfigList @@ -2352,9 +2370,9 @@ SUBROUTINE RegisterPrepare( HcoState, RC ) ENDIF ! verbose - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Prepare ', TRIM(Lct%Dct%cName) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! For base fields or data fields used in one of the HEMCO @@ -2370,9 +2388,9 @@ SUBROUTINE RegisterPrepare( HcoState, RC ) Lct%Dct%HcoID = ThisHcoID ! verbose - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Assigned HEMCO species ID: ', Lct%Dct%HcoID - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! Else: assign default value. These containers will be @@ -2465,9 +2483,9 @@ SUBROUTINE RegisterPrepare( HcoState, RC ) Lct%Dct%Dta%ncYrs(:) = -999 Lct%Dct%Dta%ncMts(:) = -999 - IF ( HCO_IsVerb(HcoSTate%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Coverage: ', Lct%Dct%Dta%Cover - CALL HCO_MSG( HcoState%Config%Err, msg ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ENDIF @@ -2585,11 +2603,11 @@ SUBROUTINE Register_Base( HcoState, RC ) ENDIF IF ( Ignore ) THEN - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) & 'Register_Base: Ignore (and remove) base field ', & TRIM(Lct%Dct%cName) - CALL HCO_MSG(HcoState%Config%Err,MSG,SEP1='-') + CALL HCO_MSG(MSG,SEP1='-',LUN=HcoState%Config%hcoLogLUN) ENDIF ! Remove data container from list. @@ -2600,9 +2618,9 @@ SUBROUTINE Register_Base( HcoState, RC ) ENDIF ! Verbose mode - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Register_Base: Checking ', TRIM(Lct%Dct%cName) - CALL HCO_MSG(HcoState%Config%Err,MSG,SEP1='-') + CALL HCO_MSG(MSG,SEP1='-',LUN=HcoState%Config%hcoLogLUN) ENDIF ! ------------------------------------------------------------- @@ -2635,11 +2653,11 @@ SUBROUTINE Register_Base( HcoState, RC ) ENDIF ! verbose - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Container ID : ', Lct%Dct%cID - CALL HCO_MSG( HcoState%Config%Err, msg ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) 'Assigned targetID: ', targetID - CALL HCO_MSG( HcoState%Config%Err, msg ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ! Negative targetID is assigned to base data that doesn't need @@ -2668,9 +2686,9 @@ SUBROUTINE Register_Base( HcoState, RC ) ENDIF ! Print some information if verbose mode is on - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Base field registered: ', TRIM(Lct%Dct%cName) - CALL HCO_MSG( HcoState%Config%Err, msg ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ! Advance to next line @@ -2812,9 +2830,9 @@ SUBROUTINE Register_Scal( HcoState, RC ) ENDIF ! Print some information if verbose mode is on - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Scale field registered: ', TRIM(Lct%Dct%cName) - CALL HCO_MSG( HcoState%Config%Err, msg ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ! Advance @@ -2981,10 +2999,10 @@ SUBROUTINE Get_targetID( HcoState, Lct, targetID, RC ) IF ( (mskLct%Dct%DctType == HCO_DCTTYPE_MASK ) .AND. & (mskLct%Dct%Dta%Cover == 0 ) ) THEN targetID = -999 - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Data not defined over this CPU, skip ' // & TRIM(Lct%Dct%cName) - CALL HCO_MSG( HcoState%Config%Err, msg ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ! Return @@ -3120,10 +3138,10 @@ SUBROUTINE Get_targetID( HcoState, Lct, targetID, RC ) ! replace all values of Lct. Hence, set targetID to -999 ! (= ignore container) and return here. IF ( (tmpLct%Dct%Hier > Hier) .AND. (tmpCov==1) ) THEN - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Skip container ', TRIM(Lct%Dct%cName), & ' because of ', TRIM(tmpLct%Dct%cName) - CALL HCO_MSG( HcoState%Config%Err, msg ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ! Return @@ -4611,11 +4629,11 @@ SUBROUTINE ExtractSrcDim( HcoConfig, SrcDim, Dta, Lscal1, Lscal2, RC ) ENDIF ! Verbose - IF ( HcoConfig%amIRoot .AND. HCO_IsVerb(HcoConfig%Err ) ) THEN + IF ( HcoConfig%amIRoot .AND. HcoConfig%doVerbose ) THEN WRITE(MSG,*) 'Will use additional dimension on file ', & TRIM(Dta%ncFile), ': ', TRIM(Dta%ArbDimName), ' = ', & TRIM(Dta%ArbDimVal) - CALL HCO_Msg( HcoConfig%Err, msg ) + CALL HCO_Msg( msg, LUN=HcoConfig%hcoLogLUN ) ENDIF ENDIF @@ -4637,11 +4655,13 @@ END SUBROUTINE ExtractSrcDim !\\ ! !INTERFACE: ! - SUBROUTINE ConfigInit ( HcoConfig, RC, nModelSpecies ) + SUBROUTINE ConfigInit ( HcoConfig, RC, nModelSpecies, stdLogLUN ) ! ! !INPUT PARAMETERS: ! - INTEGER, INTENT(IN), OPTIONAL :: nModelSpecies ! # model species + INTEGER, INTENT(IN), OPTIONAL :: nModelSpecies ! # model species + INTEGER, INTENT(IN), OPTIONAL :: stdLogLUN ! LUN for alternative + ! to LogFile set in HEMCO_Config.rc ! ! !INPUT/OUTPUT PARAMETERS: ! @@ -4669,11 +4689,25 @@ SUBROUTINE ConfigInit ( HcoConfig, RC, nModelSpecies ) HcoConfig%ConfigFileName = '' HcoConfig%ROOT = '' HcoConfig%ConfigFileRead = .FALSE. + HcoConfig%doVerbose = .FALSE. HcoConfig%ConfigList => NULL() HcoConfig%ScalIDList => NULL() HcoConfig%SpecNameList => NULL() HcoConfig%ExtList => NULL() HcoConfig%Err => NULL() + IF ( PRESENT(stdLogLUN) ) THEN + HcoConfig%stdLogLUN = stdLogLUN + ELSE + HcoConfig%stdLogLUN = 6 ! Default is stdout if not passed + ENDIF + + ! Initialize HEMCO log LUN to be same as standard log LUN. + ! This will get updated later if the HEMCO_Config.rc entry for + ! LogFile specifies a dedicated log for HEMCO. If that is the + ! case then it will get updated when the file is opened (to new + ! LUN) and again when it is closed (back to stdLogLUN). hcoLogLUN + ! will therefore always be valid. + HcoConfig%hcoLogLUN = HcoConfig%stdLogLUN IF ( PRESENT( nModelSpecies ) ) THEN diff --git a/src/Core/hco_datacont_mod.F90 b/src/Core/hco_datacont_mod.F90 index 7c116eb2..220ea1f2 100644 --- a/src/Core/hco_datacont_mod.F90 +++ b/src/Core/hco_datacont_mod.F90 @@ -382,7 +382,6 @@ SUBROUTINE cIDList_Create( HcoState, List, RC ) ! INTEGER :: II TYPE(ListCont), POINTER :: TmpLct - LOGICAL :: verbose CHARACTER(LEN=255) :: MSG, LOC !====================================================================== @@ -400,9 +399,6 @@ SUBROUTINE cIDList_Create( HcoState, List, RC ) RETURN ENDIF - ! Set verbose flag - verbose = HCO_IsVerb ( HcoState%Config%Err ) - ! Set # of data container in list HcoState%nnDataCont = ListCont_Length( List ) @@ -416,18 +412,18 @@ SUBROUTINE cIDList_Create( HcoState, List, RC ) ! Leave if no emission fields defined IF ( HcoState%nnDataCont == 0 ) THEN - IF ( verbose ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'No emission fields defined!' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF RC = HCO_SUCCESS RETURN ENDIF ! verbose - IF ( verbose ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Create cID list: # of fields: ', HcoState%nnDataCont - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! Allocate IDList diff --git a/src/Core/hco_diagn_mod.F90 b/src/Core/hco_diagn_mod.F90 index 3d911c93..252285b0 100644 --- a/src/Core/hco_diagn_mod.F90 +++ b/src/Core/hco_diagn_mod.F90 @@ -384,7 +384,7 @@ SUBROUTINE HcoDiagn_Init( HcoState, RC ) ELSE WRITE(MSG,*) 'Unrecognized output time stamp location: ', & TRIM(OutTimeStampChar), ' - will use default (start)' - CALL HCO_WARNING(HcoState%Config%Err,MSG,RC,THISLOC=LOC) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG, THISLOC=LOC ) OutTimeStamp = HcoDiagnStart ENDIF ENDIF @@ -495,7 +495,7 @@ SUBROUTINE HcoDiagn_Init( HcoState, RC ) ELSE WRITE(MSG,*) 'Unrecognized output time stamp location: ', & TRIM(OutTimeStampChar), ' - will use default (start)' - CALL HCO_WARNING(HcoState%Config%Err,MSG,RC,THISLOC=LOC) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG, THISLOC=LOC ) OutTimeStamp = HcoDiagnStart ENDIF ENDIF @@ -942,10 +942,10 @@ SUBROUTINE Diagn_Create( HcoState, cName, & ! Exit if found IF ( FOUND ) THEN - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Diagnostics already exists - ', & 'will not be added again: ', TRIM(cName) - CALL HCO_MSG ( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF RC = HCO_SUCCESS RETURN @@ -1106,11 +1106,9 @@ SUBROUTINE Diagn_Create( HcoState, cName, & ThisDiagn%AreaScal = 1.0_hp / Scal ENDIF - IF ( HCO_IsVerb(HcoState%Config%Err) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG, *) ' ThisDiagn%AreaScal = ', ThisDiagn%AreaScal - CALL HCO_MSG( HcoState%Config%Err, MSG) - WRITE(MSG, *) ' ThisDiagn%MassScal = ', ThisDiagn%MassScal - CALL HCO_MSG( HcoState%Config%Err, MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF !---------------------------------------------------------------- ! Determine the normalization factors applied to the diagnostics @@ -1168,8 +1166,8 @@ SUBROUTINE Diagn_Create( HcoState, cName, & ! CALL HCO_ERROR( MSG, RC, THISLOC=LOC ) ! RETURN ThisDiagn%cName = trim(cName) // '_a' - MSG = 'Changed Diagn name to ' // trim(ThisDiagn%cName) - CALL HCO_MSG ( HcoState%Config%Err, MSG ) + MSG = 'Diagnostic name found more than once. Changed from ' // trim(cname) // ' to ' // trim(ThisDiagn%cName) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG ) ENDIF !----------------------------------------------------------------------- @@ -1213,10 +1211,10 @@ SUBROUTINE Diagn_Create( HcoState, cName, & ThisColl%nnDiagn = ThisColl%nnDiagn + 1 ! Verbose mode - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,'(a, i4)') 'Successfully added diagnostic '// & TRIM(ThisDiagn%cName) // ' to collection ', PS - CALL HCO_MSG ( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ! Cleanup @@ -1930,17 +1928,17 @@ SUBROUTINE Diagn_UpdateDriver( HcoState, cID, cName, & MSG = 'You try to update a container that holds a ' // & 'pointer to data - this should never happen! ' // & TRIM(ThisDiagn%cName) - CALL HCO_WARNING( HcoState%Config%Err, MSG, RC, THISLOC=LOC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG, THISLOC=LOC ) CYCLE ENDIF - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'ThisDiagn%cName: ', trim(ThisDiagn%cName) - CALL HCO_MSG(HcoState%Config%Err, MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) 'ThisDiagn%AvgFlag: ', ThisDiagn%AvgFlag - CALL HCO_MSG(HcoState%Config%Err, MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) 'ThisDiagn%SpaceDim: ', ThisDiagn%SpaceDim - CALL HCO_MSG(HcoState%Config%Err, MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ! Increase counter @@ -2232,10 +2230,10 @@ SUBROUTINE Diagn_UpdateDriver( HcoState, cID, cName, & ThisDiagn%nnGetCalls = 0 ! Verbose mode - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,'(a,a,a,I3,a)') 'Successfully updated diagnostics: ', & TRIM(ThisDiagn%cName), ' (counter:', ThisDiagn%Counter, ')' - CALL HCO_MSG ( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ENDDO ! loop over containers in collection @@ -3134,10 +3132,10 @@ SUBROUTINE DiagnCont_PrepareOutput( HcoState, DgnCont, RC ) DgnCont%Arr3D%Val = 0.0_sp ENDIF - ! Prompt warning + ! Prompt warning. Only display if verbose. MSG = 'Diagnostics counter is zero - return empty array: ' // & TRIM(DgnCont%cName) - CALL HCO_WARNING( HcoState%Config%Err, MSG, RC, THISLOC=LOC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG, THISLOC=LOC ) RETURN ENDIF @@ -3531,7 +3529,7 @@ SUBROUTINE DiagnCont_Link_2D( DgnCont, ThisColl, Trgt2D, RC, HcoState ) MSG = 'Target diagnostics has AutoFill flag of 1 - reset to 0: ' & // TRIM(DgnCont%cName) IF ( PRESENT(HcoState) ) THEN - CALL HCO_WARNING( HcoState%Config%Err, MSG, RC, THISLOC=LOC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG, THISLOC=LOC ) ELSE WRITE(*,*) 'HEMCO WARNING: ', TRIM(MSG) ENDIF @@ -3644,7 +3642,7 @@ SUBROUTINE DiagnCont_Link_3D( DgnCont, ThisColl, Trgt3D, RC, HcoState ) MSG = 'Target diagnostics has autofill flag of 1 - reset to 0: ' & // TRIM(DgnCont%cName) IF ( PRESENT(HcoState) ) THEN - CALL HCO_WARNING( HcoState%Config%Err, MSG, RC, THISLOC=LOC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG, THISLOC=LOC ) ELSE WRITE(*,*) 'HEMCO WARNING: ', TRIM(MSG) ENDIF @@ -3771,36 +3769,36 @@ SUBROUTINE Diagn_Print ( HcoState, Dgn, VerbNr ) ! Always print name MSG = 'Container ' // TRIM(Dgn%cName) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ! Eventually add details - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN ! General information WRITE(MSG,*) ' --> Collection : ', Dgn%CollectionID - CALL HCO_MSG( HcoState%Config%Err, MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' --> Diagn ID : ', Dgn%cID - CALL HCO_MSG( HcoState%Config%Err, MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' --> Extension Nr : ', Dgn%ExtNr - CALL HCO_MSG( HcoState%Config%Err, MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' --> Category : ', Dgn%Cat - CALL HCO_MSG( HcoState%Config%Err, MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' --> Hierarchy : ', Dgn%Hier - CALL HCO_MSG( HcoState%Config%Err, MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' --> HEMCO species ID : ', Dgn%HcoID - CALL HCO_MSG( HcoState%Config%Err, MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' --> Autofill? ', Dgn%AutoFill - CALL HCO_MSG( HcoState%Config%Err, MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' --> Space dimension : ', Dgn%SpaceDim - CALL HCO_MSG( HcoState%Config%Err, MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' --> Used level index : ', Dgn%LevIdx - CALL HCO_MSG( HcoState%Config%Err, MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' --> Output unit : ', TRIM(Dgn%OutUnit) - CALL HCO_MSG( HcoState%Config%Err, MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' --> Uniform scaling : ', Dgn%ScaleFact - CALL HCO_MSG( HcoState%Config%Err, MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' --> Current array sum : ', sm - CALL HCO_MSG( HcoState%Config%Err, MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ! Cleanup @@ -3927,16 +3925,16 @@ SUBROUTINE DiagnCollection_Create ( Diagn, NX, NY, NZ, & ! verbose IF ( PRESENT(HcoState) ) THEN - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN MSG = 'Created diagnostics collection: ' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,'(a21,i2)') ' - Collection ID : ', COL - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,'(a21,a)' ) ' - PREFIX : ', TRIM(NewCollection%PREFIX) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,'(a21,i8,a1,i6)' ) ' - Output interval: ', NewCollection%DeltaYMD, & ' ', NewCollection%DeltaHMS - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF @@ -4574,7 +4572,7 @@ SUBROUTINE DiagnFileOpen( HcoConfig, LUN, RC, IsDryRun ) ! Write message to stdout and then return IF ( HcoConfig%amIRoot ) THEN - WRITE( 6, 300 ) TRIM( FileMsg ), TRIM( DiagnFile ) + WRITE( HcoConfig%stdLogLUN, 300 ) TRIM( FileMsg ), TRIM( DiagnFile ) 300 FORMAT( a, ' ./', a ) ENDIF RETURN diff --git a/src/Core/hco_driver_mod.F90 b/src/Core/hco_driver_mod.F90 index 34df8b6a..eee7aaac 100644 --- a/src/Core/hco_driver_mod.F90 +++ b/src/Core/hco_driver_mod.F90 @@ -379,6 +379,9 @@ SUBROUTINE HCO_Final( HcoState, ERROR, RC ) ! Close the logfile and cleanup error object. CALL HCO_Error_Final ( HcoState%Config%Err ) + ! Update HEMCO log LUN to be standard log LUN + HcoState%Config%hcoLogLUN = HcoState%Config%stdLogLUN + ! Return w/ success RC = HCO_SUCCESS diff --git a/src/Core/hco_emislist_mod.F90 b/src/Core/hco_emislist_mod.F90 index a77b77e4..d8f2ee30 100644 --- a/src/Core/hco_emislist_mod.F90 +++ b/src/Core/hco_emislist_mod.F90 @@ -106,7 +106,7 @@ SUBROUTINE EmisList_Add( Dct, HcoState, RC ) IF(RC /= HCO_SUCCESS) RETURN ! Set verbose flag - VERBOSE = HCO_IsVerb( HcoState%Config%Err ) + VERBOSE = HcoState%Config%doVerbose ! Init Lct => NULL() @@ -147,7 +147,7 @@ SUBROUTINE EmisList_Add( Dct, HcoState, RC ) ! ---------------------------------------------------------------- IF ( VERBOSE ) THEN MSG = 'Container added to EmisList:' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) CALL HCO_PrintDataCont( HcoState, Lct%Dct ) ENDIF @@ -472,7 +472,7 @@ SUBROUTINE EmisList_Pass( HcoState, Lct, RC ) TargetLct => NULL() ! Verbose mode - verb = HCO_IsVerb( HcoState%Config%Err ) + verb = HcoState%Config%doVerbose ! Initialize Add flag. This fill only be set to FALSE ! if the data of the current container is added to the data of @@ -520,7 +520,7 @@ SUBROUTINE EmisList_Pass( HcoState, Lct, RC ) WRITE(MSG,*) 'Do not add data of ', TRIM(Lct%Dct%cName), & ' to ', TRIM(TargetLct%Dct%cName), ' because this', & ' is not the file data home container!' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! Similarly, do not add data to target container if the target @@ -532,7 +532,7 @@ SUBROUTINE EmisList_Pass( HcoState, Lct, RC ) WRITE(MSG,*) 'Do not add data of ', TRIM(Lct%Dct%cName), & ' to ', TRIM(TargetLct%Dct%cName), ' because the', & ' target is being shared with other fields!' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ELSE @@ -577,7 +577,7 @@ SUBROUTINE EmisList_Pass( HcoState, Lct, RC ) Lct%Dct%Dta%nt, RC ) IF ( RC /= 0 ) THEN MSG = 'Wrong 2D array: ' // TRIM(Lct%Dct%cName) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) RETURN ENDIF ELSE @@ -589,7 +589,7 @@ SUBROUTINE EmisList_Pass( HcoState, Lct, RC ) Lct%Dct%Dta%nt, RC ) IF ( RC /= 0 ) THEN MSG = 'Wrong 3D array: ' // TRIM(Lct%Dct%cName) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) RETURN ENDIF ENDIF @@ -638,7 +638,7 @@ SUBROUTINE EmisList_Pass( HcoState, Lct, RC ) IF ( verb ) THEN WRITE(MSG,*) 'Added data of ', TRIM(Lct%Dct%cName), & ' to ', TRIM(TargetLct%Dct%cName) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! This container does not need to be added to the emissions diff --git a/src/Core/hco_error_mod.F90 b/src/Core/hco_error_mod.F90 index 70dac754..24296cd5 100644 --- a/src/Core/hco_error_mod.F90 +++ b/src/Core/hco_error_mod.F90 @@ -6,47 +6,74 @@ ! !MODULE: hco_error_mod.F90 ! ! !DESCRIPTION: Module HCO\_Error\_Mod contains routines and variables -! for error handling and logfile messages in HEMCO. It also contains -! definitions of some globally used parameter, such as the single/double -! precision as well as the HEMCO precision definitions. The HEMCO precision -! is used for almost all HEMCO internal data arrays and can be changed below -! if required. -!\\ -!\\ -! The error settings are specified in the HEMCO configuration file and -! error handling is performed according to these settings. They include: -! -! \begin{enumerate} -! \item HEMCO logfile: all HEMCO information is written into the specified -! logfile. The logfile can be set to the wildcard character, in which -! case the standard output will be used (this may be another opened -! logfile). -! \item Verbose: Number indicating the verbose level to be used. -! 0 = no verbose, 3 = very verbose. The verbose level can be set in -! the HEMCO configuration file. The default value is 0. -! \item Warnings: Number indicating the warning level to be shown. -! 0 = no warnings, 3 = all warnings. -! \end{enumerate} -! -! The error settings are set via subroutine HCO\_ERROR\_SET, called when -! reading section 'settings' of the HEMCO configuration file (subroutine -! Config\_ReadFile in hco\_config\_mod.F90). The currently active verbose -! settings can be checked using subroutines HCO\_IsVerb and -! HCO\_VERBOSE\_INQ. Messages can be written into the logfile using -! subroutine HCO\_MSG. Note that the logfile actively need to be opened -! (HCO\_LOGFILE\_OPEN) before writing to it. -!\\ -!\\ -! The verbose and warning settings are all set to false if it's not the -! root CPU. -!\\ -!\\ -! As of HEMCO v2.0, all HEMCO error variables are organized in derived -! type object HcoErr. HcoErr is a component of the HEMCO configuration -! object (type ConfigObj, see hco\_types\_mod.F90). It must be passed -! explicitly to all error routines. This design allows the invocation -! of multiple independent HEMCO instances at the same time (which may -! have different HEMCO error settings). +! for error handling and logfile messages in HEMCO. It alse contains +! definitions of some globally used parameters, such as single/double +! precision as well as the HEMCO precision which can be either single or +! double. The HEMCO precision is used for almost all HEMCO internal data +! arrays and can be changed if required. +!\\ +!\\ +! HEMCO error variables are organized in an object of derived type +! HcoErr. The HcoErr object is generally referred to as Err throughout +! HEMCO and this submodule. The Err object is a component of the HEMCO +! configuration object which is type ConfigObj (see module +! hco_types_mod.F90), and is referenced as HcoState%Config%Err. This +! design allows the invocation of multiple independent HEMCO instances +! at the same time which may have different HEMCO error settings. +! +! The Err object is initialized via subroutine HCO_ERROR_SET, called +! when reading section 'SETTINGS' of the HEMCO configuration file +! (subroutine Config_ReadFile in hco_config_mod.F90). If writing to +! a dedicated log file then it is further updated upon opening the file +! in HCO_LOGFILE_OPEN. Once instantiated, the Err object is stored in +! HcoState%Config%Err. Configurable run-time error settings set in +! HEMCO_Config.rc are stored in the Err object. Look for the following +! three settings in HEMCO_Config.rc: +! +! 1. LogFile: +! Use the LogFile setting in HEMCO_Config.rc to specify where most HEMCO +! log prints will go. If set to an asterisk (*) then HEMCO will +! print to stdout. If a filename is provided then HEMCO will open and +! write to that file. If using CESM then LogFile is ignored and it is +! set to CAM log atm.log. +! +! The logical unit number (LUN) is stored in Err%LogFile as well as +! in HcoState%Config%hcoLogLUN. Generally Err%LogFile is used for +! when a dedicated log file is specified in HEMCO_Config.rc, e.g. +! HEMCO.log, such as when opening and closing the file. If opening +! a new file then the new LUN is passed back from HCO_LOGFILE_OPEN +! to update HcoState%Config%hcoLogLUN for use anywhere in HEMCO. +! That variable can then be passed to all HEMCO message and error +! handling subroutines in this module to direct messages to that file. +! If not passed then messages are sent to stdout. +! +! 2. Verbose: +! Logical for whether to print to log. +! +! 3. VerboseOnCores: +! Logical for whether to update verbose to be true for all cores or +! only root. This setting has no impact on GC-Classic prints and +! only is relevant for models using MPI, e.g. GCHP. Set to 'root' +! in HEMCO_Config.rc for verbose only on the root thread. Set to +! 'all' to be verbose on all cores. +! +! Settings for Verbose and VerboseOnCores are used to set +! HcoState%Config%Err%doVerbose (for use locally within this module) +! as well as HcoState%Config%doVerbose for global use in HEMCO. +! +! There are three message subroutines in this module: HCO_ERROR, +! HCO_WARNING, and HCO_MSG. All will print regardless of verbose +! settings unless called with an if HcoState%Config%doVerbose block. +! If using MPI then all messages will be printed by all cores unless +! enclosed in an HcoState%Config%doVerbose and/or +! HcoState%Config%amIRoot block. When using these subroutines +! we recommend the following: +! 1) Never limit HCO_ERROR prints to root thread or if verbose. +! 2) Limit HCO_WARNING and HCO_MSG messages to root unless debugging. +! 3) Decide whether to limit HCO_WARNING and HCO_MSG messages to verbose +! on a case-by-case basis. +! 4) Print warnings to standard output (do not pass log LUN) +! ! !INTERFACE: ! MODULE HCO_Error_Mod @@ -70,7 +97,6 @@ MODULE HCO_Error_Mod PUBLIC :: HCO_LEAVE PUBLIC :: HCO_ERROR_SET PUBLIC :: HCO_ERROR_FINAL - PUBLIC :: HCO_IsVerb PUBLIC :: HCO_LOGFILE_OPEN PUBLIC :: HCO_LOGFILE_CLOSE ! @@ -105,22 +131,7 @@ MODULE HCO_Error_Mod #endif ! HEMCO version number. - CHARACTER(LEN=12), PARAMETER, PUBLIC :: HCO_VERSION = '3.10.0' - - INTERFACE HCO_Error - MODULE PROCEDURE HCO_ErrorNoErr - MODULE PROCEDURE HCO_ErrorErr - END INTERFACE HCO_Error - - INTERFACE HCO_Warning - MODULE PROCEDURE HCO_WarningNoErr - MODULE PROCEDURE HCO_WarningErr - END INTERFACE HCO_Warning - - INTERFACE HCO_MSG - MODULE PROCEDURE HCO_MsgNoErr - MODULE PROCEDURE HCO_MsgErr - END INTERFACE HCO_MSG + CHARACTER(LEN=12), PARAMETER, PUBLIC :: HCO_VERSION = '3.10.1' ! ! !REVISION HISTORY: @@ -133,15 +144,14 @@ MODULE HCO_Error_Mod ! !PRIVATE VARIABLES: ! TYPE, PUBLIC :: HcoErr - LOGICAL :: FirstOpen = .TRUE. - LOGICAL :: IsRoot = .FALSE. - LOGICAL :: LogIsOpen = .FALSE. - LOGICAL :: doVerbose = .FALSE. - INTEGER :: nWarnings = 0 - INTEGER :: CurrLoc = -1 - CHARACTER(LEN=255), POINTER :: Loc(:) => NULL() - CHARACTER(LEN=255) :: LogFile = '' - INTEGER :: Lun = -1 + LOGICAL :: FirstOpen ! First time using new log file? + LOGICAL :: IsRoot ! Is this root? + LOGICAL :: LogIsOpen ! Is log open? + LOGICAL :: doVerbose ! Verbose print? + INTEGER :: CurrLoc ! Call depth used for traceback + CHARACTER(LEN=255), POINTER :: Loc(:) ! Location array used for traceback + CHARACTER(LEN=255) :: LogFile ! Log file string (*=stdout) + INTEGER :: Lun ! logical unit number of file to write to END TYPE HcoErr ! MAXNEST is the maximum accepted subroutines nesting level. @@ -158,79 +168,18 @@ MODULE HCO_Error_Mod ! ! !IROUTINE: HCO_Error ! -! !DESCRIPTION: Subroutine HCO\_Error promts an error message and sets RC to -! HCO\_FAIL. Note that this routine does not stop a run, but it will cause a -! stop at higher level (when RC gets evaluated). -!\\ -!\\ -! !INTERFACE: -! - SUBROUTINE HCO_ErrorErr( Err, ErrMsg, RC, THISLOC ) -! -! !INPUT PARAMETERS: -! - TYPE(HcoErr), POINTER :: Err - CHARACTER(LEN=*), INTENT(IN ) :: ErrMsg - CHARACTER(LEN=*), INTENT(IN ), OPTIONAL :: THISLOC -! -! !INPUT/OUTPUT PARAMETERS: -! - INTEGER, INTENT(INOUT) :: RC -! -! !REVISION HISTORY: -! 23 Sep 2013 - C. Keller - Initialization -! See https://github.com/geoschem/hemco for complete history -!EOP -!------------------------------------------------------------------------------ -!BOC - INTEGER :: I, J - CHARACTER(LEN=1023) :: MSG - - !====================================================================== - ! HCO_ERROR begins here - !====================================================================== - - ! Print error message - MSG = 'HEMCO ERROR: ' // TRIM(ErrMsg) - CALL HCO_MSG ( Err, MSG, SEP1='!' ) - - ! Print error location - IF ( PRESENT(THISLOC) ) THEN - MSG = 'ERROR LOCATION: ' // TRIM( THISLOC ) - CALL HCO_MSG ( Err, MSG ) - - ! Traceback - ELSE - DO I = 0, Err%CurrLoc-1 - J = Err%CurrLoc-I - MSG = 'ERROR LOCATION: ' // TRIM( Err%Loc(J) ) - CALL HCO_MSG ( Err, MSG ) - ENDDO - ENDIF - - MSG = '' - CALL HCO_MSG ( Err, MSG, SEP2='!' ) - - ! Return w/ error - RC = HCO_FAIL - - END SUBROUTINE HCO_ErrorErr -!EOC -!------------------------------------------------------------------------------ -! Harmonized Emissions Component (HEMCO) ! -!------------------------------------------------------------------------------ -!BOP -! -! !IROUTINE: HCO_Error -! -! !DESCRIPTION: Subroutine HCO\_Error promts an error message and sets RC to -! HCO\_FAIL. Note that this routine does not stop a run, but it will cause a -! stop at higher level (when RC gets evaluated). +! !DESCRIPTION: Subroutine HCO_Error prompts an error message and sets RC to +! HCO_FAIL. Note that this routine does not stop a run, but it will cause a +! stop at a higher level when RC gets evaluated. Messages are printed +! to stdout unless optional argument LUN is passed. This subroutine is +! independent of verbose settings and will print from all threads +! unless called within an if block limiting it to verbose and/or root. +! Limiting error prints to verbose and/or root is not recommended. !\\ !\\ ! !INTERFACE: ! - SUBROUTINE HCO_ErrorNoErr( ErrMsg, RC, THISLOC ) + SUBROUTINE HCO_Error( ErrMsg, RC, THISLOC, LUN ) ! ! !USES: ! @@ -244,6 +193,7 @@ SUBROUTINE HCO_ErrorNoErr( ErrMsg, RC, THISLOC ) ! CHARACTER(LEN=*), INTENT(IN ) :: ErrMsg CHARACTER(LEN=*), INTENT(IN ), OPTIONAL :: THISLOC + INTEGER, INTENT(IN ), OPTIONAL :: LUN ! ! !INPUT/OUTPUT PARAMETERS: ! @@ -255,7 +205,7 @@ SUBROUTINE HCO_ErrorNoErr( ErrMsg, RC, THISLOC ) !EOP !------------------------------------------------------------------------------ !BOC - INTEGER :: I, J + INTEGER :: I, J, hcoLogLUN CHARACTER(LEN=1023) :: MSG, MSG1, MSG2 #if defined( ESMF_) INTEGER :: localPET, STATUS @@ -267,6 +217,13 @@ SUBROUTINE HCO_ErrorNoErr( ErrMsg, RC, THISLOC ) ! HCO_ERROR begins here !====================================================================== + ! Specify where to write + IF ( PRESENT(LUN) ) THEN + hcoLogLUN = LUN + ELSE + hcoLogLUN = 6 + ENDIF + ! Construct error message #if defined( ESMF_ ) ! Get current thread number @@ -284,12 +241,12 @@ SUBROUTINE HCO_ErrorNoErr( ErrMsg, RC, THISLOC ) MSG = NEW_LINE('a') // TRIM(MSG1) // TRIM(MSG2) ! Print error message - WRITE(*,*) TRIM(MSG) + WRITE(hcoLogLUN,*) TRIM(MSG) ! Return w/ error RC = HCO_FAIL - END SUBROUTINE HCO_ErrorNoErr + END SUBROUTINE HCO_Error !EOC !------------------------------------------------------------------------------ ! Harmonized Emissions Component (HEMCO) ! @@ -298,23 +255,22 @@ END SUBROUTINE HCO_ErrorNoErr ! ! !IROUTINE: HCO_Warning ! -! !DESCRIPTION: Subroutine HCO\_Warning promts a warning message without -! forcing HEMCO to stop, i.e. return code is set to HCO\_SUCCESS. +! !DESCRIPTION: Subroutine HCO_Warning prompts a warning message without +! forcing HEMCO to stop. Default destination is stdout unless optional LUN +! argument is passed. This subroutine is independent of verbose settings and +! will print from all threads unless called within an if block limiting it +! to verbose and/or root. !\\ !\\ ! !INTERFACE: ! - SUBROUTINE HCO_WarningErr( Err, ErrMsg, RC, THISLOC ) + SUBROUTINE HCO_Warning( ErrMsg, THISLOC, LUN ) ! ! !INPUT PARAMETERS" ! - TYPE(HcoErr), POINTER :: Err CHARACTER(LEN=*), INTENT(IN ) :: ErrMsg CHARACTER(LEN=*), INTENT(IN ), OPTIONAL :: THISLOC -! -! !INPUT/OUTPUT PARAMETERS: -! - INTEGER, INTENT(INOUT) :: RC + INTEGER, INTENT(IN ), OPTIONAL :: LUN ! ! !REVISION HISTORY: ! 23 Sep 2013 - C. Keller - Initialization @@ -322,93 +278,31 @@ SUBROUTINE HCO_WarningErr( Err, ErrMsg, RC, THISLOC ) !EOP !------------------------------------------------------------------------------ !BOC - INTEGER :: WLEV + INTEGER :: WLEV, hcoLogLUN CHARACTER(LEN=255) :: MSG !====================================================================== ! HCO_WARNING begins here !====================================================================== - ! Only print warnings when verbose output is requested - IF ( HCO_IsVerb( Err ) ) THEN - - ! Print warning - MSG = 'HEMCO WARNING: ' // TRIM( ErrMsg ) - CALL HCO_MSG ( Err, MSG ) - - ! Print location - IF ( PRESENT(THISLOC) ) THEN - MSG = '--> LOCATION: ' // TRIM(THISLOC) - CALL HCO_MSG ( Err, MSG ) - ELSEIF ( Err%CurrLoc > 0 ) THEN - MSG = '--> LOCATION: ' // TRIM(Err%Loc(Err%CurrLoc)) - CALL HCO_MSG ( Err, MSG ) - ENDIF - - ! Increase # of warnings - Err%nWarnings = Err%nWarnings + 1 + ! Specify where to write + IF ( PRESENT(LUN) ) THEN + hcoLogLUN = LUN + ELSE + hcoLogLUN = 6 ENDIF - ! Return w/ success - RC = HCO_SUCCESS - - END SUBROUTINE HCO_WarningErr -!EOC -!------------------------------------------------------------------------------ -! Harmonized Emissions Component (HEMCO) ! -!------------------------------------------------------------------------------ -!BOP -! -! !IROUTINE: HCO_Warning -! -! !DESCRIPTION: Subroutine HCO\_Warning promts a warning message without -! forcing HEMCO to stop, i.e. return code is set to HCO\_SUCCESS. -!\\ -!\\ -! !INTERFACE: -! - SUBROUTINE HCO_WarningNoErr( ErrMsg, RC, verb, THISLOC ) -! -! !INPUT PARAMETERS" -! - CHARACTER(LEN=*), INTENT(IN ) :: ErrMsg - LOGICAL , INTENT(IN ), OPTIONAL :: verb - CHARACTER(LEN=*), INTENT(IN ), OPTIONAL :: THISLOC -! -! !INPUT/OUTPUT PARAMETERS: -! - INTEGER, INTENT(INOUT) :: RC -! -! !REVISION HISTORY: -! 23 Sep 2013 - C. Keller - Initialization -! See https://github.com/geoschem/hemco for complete history -!EOP -!------------------------------------------------------------------------------ -!BOC - INTEGER :: WLEV - CHARACTER(LEN=255) :: MSG - - !====================================================================== - ! HCO_WARNING begins here - !====================================================================== - - ! Exit if verbose output is not requested - IF ( .not. verb ) RETURN - ! Print warning MSG = 'HEMCO WARNING: ' // TRIM( ErrMsg ) - WRITE( 6, '(a)' ) TRIM(MSG) + WRITE( hcoLogLUN, '(a)' ) TRIM(MSG) ! Print location IF ( PRESENT(THISLOC) ) THEN MSG = '--> LOCATION: ' // TRIM(THISLOC) - WRITE( 6, '(a)' ) TRIM(MSG) + WRITE( hcoLogLUN, '(a)' ) TRIM(MSG) ENDIF - ! Return w/ success - RC = HCO_SUCCESS - - END SUBROUTINE HCO_WarningNoErr + END SUBROUTINE HCO_Warning !EOC !------------------------------------------------------------------------------ ! Harmonized Emissions Component (HEMCO) ! @@ -417,125 +311,51 @@ END SUBROUTINE HCO_WarningNoErr ! ! !IROUTINE: HCO_MSG ! -! !DESCRIPTION: Subroutine HCO\_MSG passes message msg to the HEMCO -! logfile (or to standard output if the logfile is not open). +! !DESCRIPTION: Subroutine HCO_MSG prints message to log. Optional ! Sep1 and Sep2 denote line delimiters before and after the message, -! respectively. -! The optional argument Verb denotes the minimum verbose level associated -! with this message. The message will only be prompted if the verbose level -! on this CPU (e.g. of this Err object) is at least as high as Verb. +! respectively. If optional argument logLUN is passed then message +! is printed to that file. Otherwise message is printed to stdout. +! This subroutine is independent of verbose settings and will print from +! all threads unless called within an if block limiting it to verbose +! and/or root. !\\ !\\ ! !INTERFACE: ! - SUBROUTINE HCO_MSGErr( Err, Msg, Sep1, Sep2 ) + SUBROUTINE HCO_MSG( Msg, Sep1, Sep2, LUN ) ! ! !INPUT PARAMETERS: ! - TYPE(HcoErr), POINTER :: Err - CHARACTER(LEN=*), INTENT(IN ), OPTIONAL :: Msg + CHARACTER(LEN=*), INTENT(IN ) :: Msg CHARACTER(LEN=1), INTENT(IN ), OPTIONAL :: Sep1 CHARACTER(LEN=1), INTENT(IN ), OPTIONAL :: Sep2 -! -! !REMARKS: -! Refactored to avoid ELSE statements, which are a computational bottleneck. -! + INTEGER, INTENT(IN ), OPTIONAL :: LUN ! !REVISION HISTORY: ! 23 Sep 2013 - C. Keller - Initialization ! See https://github.com/geoschem/hemco for complete history !EOP !------------------------------------------------------------------------------ !BOC - INTEGER :: LUN + INTEGER :: hcoLogLUN !======================================================================= ! HCO_MSG begins here !======================================================================= - ! Exit if Err is NULL - IF ( .NOT. ASSOCIATED( Err) ) RETURN - - ! Exit if we are not on the root core - IF ( .NOT. Err%IsRoot ) RETURN - - ! Exit if Verbose is turned off - IF ( .not. Err%doVerbose ) RETURN + ! Set where to write message + hcoLogLUN = 6 + IF ( PRESENT(LUN) ) hcoLogLUN = LUN - !======================================================================= ! Write message - !======================================================================= - - ! Get the file unit, or if the file is not open, use stdout - LUN = Err%LUN - IF ( ( .not. Err%LogIsOpen ) .or. ( LUN <= 0 ) ) LUN = 6 - - ! If logfile is open then write to it - ! Otherwise write to stdout (unit #6) IF ( PRESENT(SEP1) ) THEN - WRITE( LUN,'(a)' ) REPEAT( SEP1, 79 ) - ENDIF - IF ( PRESENT(MSG) ) THEN - WRITE( LUN,'(a)' ) TRIM( MSG ) + WRITE( hcoLogLUN,'(a)' ) REPEAT( SEP1, 79 ) ENDIF + WRITE( hcoLogLUN,'(a)' ) TRIM( MSG ) IF ( PRESENT(SEP2) ) THEN - WRITE( LUN,'(a)' ) REPEAT( SEP2, 79 ) - ENDIF - - END SUBROUTINE HCO_MsgErr -!EOC -!------------------------------------------------------------------------------ -! Harmonized Emissions Component (HEMCO) ! -!------------------------------------------------------------------------------ -!BOP -! -! !IROUTINE: HCO_MSG -! -! !DESCRIPTION: Subroutine HCO\_MSG passes message msg to the HEMCO -! logfile (or to standard output if the logfile is not open). -! Sep1 and Sep2 denote line delimiters before and after the message, -! respectively. -! The optional argument Verb denotes the minimum verbose level associated -! with this message. The message will only be prompted if the verbose level -! on this CPU (e.g. of this Err object) is at least as high as Verb. -!\\ -!\\ -! !INTERFACE: -! - SUBROUTINE HCO_MSGnoErr( Msg, Sep1, Sep2, Verb ) -! -! !INPUT PARAMETERS: -! - CHARACTER(LEN=*), INTENT(IN ), OPTIONAL :: Msg - CHARACTER(LEN=1), INTENT(IN ), OPTIONAL :: Sep1 - CHARACTER(LEN=1), INTENT(IN ), OPTIONAL :: Sep2 - LOGICAL, INTENT(IN ), OPTIONAL :: Verb -! -! !REVISION HISTORY: -! 23 Sep 2013 - C. Keller - Initialization -! See https://github.com/geoschem/hemco for complete history -!EOP -!------------------------------------------------------------------------------ -!BOC - - !====================================================================== - ! HCO_MSG begins here - !====================================================================== - - ! Exit if verbose is not requested - IF ( .not. Verb ) RETURN - - ! Print message and optional separator lines - IF ( PRESENT( SEP1 ) ) THEN - WRITE( 6, '(a)' ) REPEAT( SEP1, 79 ) - ENDIF - IF ( PRESENT( msg ) ) THEN - WRITE( 6, '(a)' ) TRIM( msg ) - ENDIF - IF ( PRESENT( SEP2 ) ) THEN - WRITE( 6, '(a)' ) REPEAT( SEP2, 79 ) + WRITE( hcoLogLUN,'(a)' ) REPEAT( SEP2, 79 ) ENDIF - END SUBROUTINE HCO_MsgNoErr + END SUBROUTINE HCO_MSG !EOC !------------------------------------------------------------------------------ ! Harmonized Emissions Component (HEMCO) ! @@ -544,13 +364,13 @@ END SUBROUTINE HCO_MsgNoErr ! ! !IROUTINE: HCO_Enter ! -! !DESCRIPTION: Subroutine HCO\_Enter is called upon entering a routine. +! !DESCRIPTION: Subroutine HCO_Enter is called upon entering a routine. ! It organizes the traceback handling. It is recommended to call this ! routine for 'big' routines but NOT for routines/functions that are ! frequently called, e.g. inside of loops! !\\ !\\ -! Note that all subroutines calling HCO\_Enter must also call HCO\_Leave! +! Note that all subroutines calling HCO_Enter must also call HCO_Leave! !\\ !\\ ! !INTERFACE: @@ -584,14 +404,14 @@ SUBROUTINE HCO_Enter( Err, thisLoc, RC ) Err%CurrLoc = Err%CurrLoc + 1 IF ( Err%CurrLoc > MaxNest ) THEN Msg = 'MaxNest too low, cannot enter ' // TRIM(thisLoc) - CALL HCO_Error( Err, Msg, RC ) + CALL HCO_Error( Msg, RC ) RETURN ENDIF ! Error trap IF ( Err%CurrLoc <= 0 ) THEN Msg = 'CurrLoc is zero, cannot enter: ' // TRIM(thisLoc) - CALL HCO_Error( Err, Msg, RC ) + CALL HCO_Error( Msg, RC ) RETURN ENDIF @@ -599,9 +419,9 @@ SUBROUTINE HCO_Enter( Err, thisLoc, RC ) Err%Loc(Err%CurrLoc) = thisLoc ! Track location if enabled - IF ( HCO_IsVerb( Err ) ) THEN + IF ( Err%doVerbose ) THEN WRITE(MSG,100) TRIM(thisLoc), Err%CurrLoc - CALL HCO_Msg( Err, MSG ) + CALL HCO_Msg( MSG, LUN=Err%LUN ) ENDIF ! Set RC to success @@ -618,13 +438,13 @@ END SUBROUTINE HCO_Enter ! ! !IROUTINE: HCO_Leave ! -! !DESCRIPTION: Subroutine HCO\_Leave is called upon leaving a routine. +! !DESCRIPTION: Subroutine HCO_Leave is called upon leaving a routine. ! It organizes the traceback handling. It is recommended to call this ! routine for 'big' routines but NOT for routines/functions that are ! frequently called, e.g. inside of loops! !\\ !\\ -! Note that all subroutines calling HCO\_Leave must also call HCO\_Enter! +! Note that all subroutines calling HCO_Leave must also call HCO_Enter! !\\ !\\ ! !INTERFACE: @@ -651,9 +471,9 @@ SUBROUTINE HCO_Leave( Err, RC ) IF ( .NOT. ASSOCIATED(Err) ) RETURN ! Track location if enabled - IF ( HCO_IsVerb( Err ) ) THEN + IF ( Err%doVerbose ) THEN WRITE(MSG,110) TRIM(Err%Loc(Err%CurrLoc)), Err%CurrLoc - CALL HCO_MSG( Err, MSG ) + CALL HCO_MSG( MSG, LUN=Err%LUN ) ENDIF ! Remove from list @@ -665,7 +485,7 @@ SUBROUTINE HCO_Leave( Err, RC ) ! Error trap IF ( Err%CurrLoc < 0 ) THEN Msg = 'CurrLoc is below zero, this should never happen!!' - CALL HCO_ERROR ( Err, Msg, RC ) + CALL HCO_ERROR ( Msg, RC ) RETURN ENDIF @@ -683,31 +503,31 @@ END SUBROUTINE HCO_Leave ! ! !IROUTINE: HCO_Error_Set ! -! !DESCRIPTION: Subroutine HCO\_Error\_Set defines the HEMCO error +! !DESCRIPTION: Subroutine HCO_Error_Set defines the HEMCO error ! settings. This routine is called at the beginning of a HEMCO -! simulation. Its input parameter are directly taken from the -! HEMCO configuration file. If LogFile is set to '*' (asterik), -! all output is directed to the standard output. +! simulation. Its input parameters are directly derived from the +! HEMCO configuration file. !\\ !\\ ! !INTERFACE: ! - SUBROUTINE HCO_ERROR_SET( am_I_Root, Err, LogFile, & - doVerbose, doVerboseOnRoot, RC ) + SUBROUTINE HCO_ERROR_SET( am_I_Root, Err, LogFile, & + isVerbose, isVerboseOnRoot, RC, LUN ) ! ! !INPUT PARAMETERS: ! - LOGICAL, INTENT(IN) :: am_I_Root ! Root CPU? - TYPE(HcoErr), POINTER :: Err ! Error object - CHARACTER(LEN=*), INTENT(IN) :: LogFile ! logfile path+name + LOGICAL, INTENT(IN) :: am_I_Root ! Root CPU? + TYPE(HcoErr), POINTER :: Err ! Error object + CHARACTER(LEN=*), INTENT(IN) :: LogFile ! logfile path+name + INTEGER, OPTIONAL, INTENT(IN) :: LUN ! Optional LUN for output log ! ! !INPUT/OUTPUT PARAMETERS: ! - LOGICAL, INTENT(INOUT) :: doVerbose ! Verbose output T/F? - LOGICAL, INTENT(INOUT) :: doVerboseOnRoot ! =T: Verbose on root - ! =F: Verbose on all - INTEGER, INTENT(INOUT) :: RC + LOGICAL, INTENT(INOUT) :: isVerbose ! Verbose output T/F? + LOGICAL, INTENT(INOUT) :: isVerboseOnRoot ! =T: Verbose on root only + ! =F: Verbose on all cores + INTEGER, INTENT(INOUT) :: RC ! ! !REVISION HISTORY: ! 23 Sep 2013 - C. Keller - Initialization @@ -716,7 +536,7 @@ SUBROUTINE HCO_ERROR_SET( am_I_Root, Err, LogFile, & !------------------------------------------------------------------------------ !BOC - INTEGER :: Lun + INTEGER :: hcoLogLUN !====================================================================== ! HCO_ERROR_SET begins here @@ -736,25 +556,30 @@ SUBROUTINE HCO_ERROR_SET( am_I_Root, Err, LogFile, & Err%LogFile = TRIM(LogFile) ! Specify if verbose will be printed on the root core, or all cores - IF ( doVerboseOnRoot ) THEN - Err%doVerbose = ( doVerbose .and. am_I_Root ) + IF ( isVerboseOnRoot ) THEN + Err%doVerbose = ( isVerbose .and. am_I_Root ) ELSE - Err%doVerbose = doVerbose + Err%doVerbose = isVerbose ENDIF ! Init misc. values Err%FirstOpen = .TRUE. - Err%LogIsOpen = .FALSE. Err%CurrLoc = 0 - ! If Logfile is set to '*', set lun to -1 (--> write into default file). - ! Otherwise, set lun to 0 (--> write into specified logfile) + ! If Logfile is set to '*', set hcoLogLUN to 6 (writes to default, i.e. stdout) + ! If optional LUN is passed, set hcoLogLUN to this (assume log is open). + ! Otherwise, set LUN to 0 (writes to LogFile set in HEMCO_Config.rc) IF ( TRIM(Err%LogFile) == '*' ) THEN - LUN = -1 + hcoLogLUN = 6 + Err%LogIsOpen = .TRUE. + ELSEIF ( PRESENT(LUN) ) THEN + hcoLogLUN = LUN + Err%LogIsOpen = .TRUE. ELSE - LUN = 0 + hcoLogLUN = 0 + Err%LogIsOpen = .FALSE. ENDIF - Err%Lun = LUN + Err%Lun = hcoLogLUN ! Return w/ success RC = HCO_SUCCESS @@ -768,7 +593,8 @@ END SUBROUTINE HCO_ERROR_SET ! ! !IROUTINE: HCO_Error_Final ! -! !DESCRIPTION: Subroutine HCO\_Error\_Final finalizes the error type. +! !DESCRIPTION: Subroutine HCO_Error_Final finalizes the error object including +! closing a dedicated HEMCO log file if using one. !\\ !\\ ! !INTERFACE: @@ -787,13 +613,26 @@ SUBROUTINE HCO_Error_Final ( Err ) !BOC INTEGER :: STAT + CHARACTER(LEN=255) :: MSG !====================================================================== ! HCO_ERROR_FINAL begins here !====================================================================== - ! Eventually close logfile - CALL HCO_Logfile_Close( Err, ShowSummary=.TRUE. ) + ! Print message if verbose and the Err object still exists + IF ( ASSOCIATED(Err) ) THEN + IF ( Err%doVerbose ) THEN + MSG = ' ' + CALL HCO_MSG ( MSG, LUN=Err%LUN ) + MSG = 'HEMCO ' // TRIM(HCO_VERSION) // ' FINISHED.' + CALL HCO_MSG ( MSG, SEP1='-', LUN=Err%LUN ) + ENDIF + ENDIF + +#ifndef MODEL_CESM + ! Close the log file + CALL HCO_Logfile_Close( Err ) +#endif IF ( ASSOCIATED(Err) ) THEN IF ( ASSOCIATED(Err%Loc) ) DEALLOCATE(Err%Loc) @@ -808,55 +647,15 @@ END SUBROUTINE HCO_Error_Final !------------------------------------------------------------------------------ !BOP ! -! !IROUTINE: HCO_IsVerb -! -! !DESCRIPTION: Returns true if the HEMCO verbose output is turned on. -!\\ -!\\ -! !INTERFACE: -! - FUNCTION HCO_IsVerb( Err ) RESULT ( IsVerb ) -! -! !INPUT PARAMETERS: -! - TYPE(HcoErr), POINTER :: Err ! Error object -! -! !OUTPUT PARAMETERS: -! - LOGICAL :: isVerb -!EOP -!------------------------------------------------------------------------------ -!BOC - - !====================================================================== - ! HCO_IsVerb begins here - !====================================================================== - - ! Initialize - isVerb = .FALSE. - - ! Return if the Err object is null - IF ( .not. ASSOCIATED( Err ) ) RETURN - - ! Check if "Verbose: 3" was set in the HEMCO_Config.rc file - isVerb = Err%doVerbose - - END FUNCTION HCO_IsVerb -!EOC -!------------------------------------------------------------------------------ -! Harmonized Emissions Component (HEMCO) ! -!------------------------------------------------------------------------------ -!BOP -! ! !ROUTINE: HCO_LOGFILE_OPEN ! ! !DESCRIPTION: Subroutine HCO\_LOGFILE\_OPEN opens the HEMCO logfile -! (if not yet open). +! if using and not yet open. !\\ !\\ ! !INTERFACE: ! - SUBROUTINE HCO_LogFile_Open( Err, RC ) + SUBROUTINE HCO_LogFile_Open( Err, doVerbose, RC, logLUN ) ! ! !USES: ! @@ -865,7 +664,9 @@ SUBROUTINE HCO_LogFile_Open( Err, RC ) ! !INPUT/OUTPUT PARAMETERS: ! TYPE(HcoErr), POINTER :: Err ! Error object + LOGICAL, INTENT(IN) :: doVerbose INTEGER, INTENT(INOUT) :: RC + INTEGER, INTENT(OUT) :: logLUN ! ! !REVISION HISTORY: ! 23 Sep 2013 - C. Keller - Initialization @@ -875,7 +676,7 @@ SUBROUTINE HCO_LogFile_Open( Err, RC ) !BOC CHARACTER(LEN=255) :: MSG INTEGER :: IOS, LUN, FREELUN - LOGICAL :: isopen, exists + LOGICAL :: isopen, exists, verbose !====================================================================== ! HCO_LOGFILE_OPEN begins here @@ -884,87 +685,86 @@ SUBROUTINE HCO_LogFile_Open( Err, RC ) ! Init RC = HCO_SUCCESS - ! Check if object exists + ! Check if Err object exists IF ( .NOT. ASSOCIATED(Err)) THEN PRINT *, 'Cannot open logfile - Err object not defined!' RC = HCO_FAIL RETURN ENDIF + ! Exit if not writing to dedicated HEMCO log + IF ( TRIM(Err%LogFile) == '*' ) RETURN + +#ifdef MODEL_CESM + ! Exit if using CESM (for safety) + RETURN +#endif + ! Never open if we are not on the root CPU IF ( .NOT. Err%IsRoot ) RETURN - ! Don't do anything if we write into standard output! - IF ( Err%LUN < 0 ) THEN + ! Find free LUN for the log file + FREELUN = findFreeLun() + + ! Inquire if file is already open + INQUIRE( FILE=TRIM(Err%LogFile), OPENED=isOpen, EXIST=exists, NUMBER=LUN ) + + ! File exists and is opened ==> nothing to do + IF ( exists .AND. isOpen ) THEN + Err%LUN = LUN Err%LogIsOpen = .TRUE. - ! Explicit HEMCO logfile: - ELSE + ! File exists but not opened ==> reopen + ELSEIF (exists .AND. .NOT. isOpen ) THEN - ! Find free LUN just in case we need it! - FREELUN = findFreeLun() - - ! Inquire if file is already open - INQUIRE( FILE=TRIM(Err%LogFile), OPENED=isOpen, EXIST=exists, NUMBER=LUN ) - - ! File exists and is opened ==> nothing to do - IF ( exists .AND. isOpen ) THEN - Err%LUN = LUN - Err%LogIsOpen = .TRUE. - - ! File exists but not opened ==> reopen - ELSEIF (exists .AND. .NOT. isOpen ) THEN - - ! Replace existing file on first call - IF ( Err%FirstOpen ) THEN - OPEN ( UNIT=FREELUN, FILE=TRIM(Err%LogFile), STATUS='REPLACE', & - ACTION='WRITE', FORM='FORMATTED', IOSTAT=IOS ) - IF ( IOS /= 0 ) THEN - PRINT *, 'Cannot create logfile: ' // TRIM(Err%LogFile) - RC = HCO_FAIL - RETURN - ENDIF - - ! File exists and is opened ==> nothing to do - - - ! Reopen otherwise - ELSE - OPEN ( UNIT=FREELUN, FILE=TRIM(Err%LogFile), STATUS='OLD', & - ACTION='WRITE', POSITION='APPEND', FORM='FORMATTED', & ! NAG did not like ACCESS='APPEND' -- use standard-compliant position='append' - IOSTAT=IOS ) - IF ( IOS /= 0 ) THEN - PRINT *, 'Cannot reopen logfile: ' // TRIM(Err%LogFile) - RC = HCO_FAIL - RETURN - ENDIF + ! Replace existing file on first call + IF ( Err%FirstOpen ) THEN + OPEN ( UNIT=FREELUN, FILE=TRIM(Err%LogFile), STATUS='REPLACE', & + ACTION='WRITE', FORM='FORMATTED', IOSTAT=IOS ) + IF ( IOS /= 0 ) THEN + PRINT *, 'Cannot create logfile: ' // TRIM(Err%LogFile) + RC = HCO_FAIL + RETURN ENDIF - Err%LUN = FREELUN - Err%LogIsOpen = .TRUE. - - ! File does not yet exist ==> open new file + ! Reopen otherwise ELSE - OPEN ( UNIT=FREELUN, FILE=TRIM(Err%LogFile), & - STATUS='NEW', ACTION='WRITE', IOSTAT=IOS, & - FORM='FORMATTED' ) + ! NAG did not like ACCESS='APPEND' -- use standard-compliant position='append' + OPEN ( UNIT=FREELUN, FILE=TRIM(Err%LogFile), STATUS='OLD', & + ACTION='WRITE', POSITION='APPEND', FORM='FORMATTED', & + IOSTAT=IOS ) IF ( IOS /= 0 ) THEN - PRINT *, 'Cannot create logfile: ' // TRIM(Err%LogFile) + PRINT *, 'Cannot reopen logfile: ' // TRIM(Err%LogFile) RC = HCO_FAIL RETURN ENDIF - Err%LUN = FREELUN - Err%LogIsOpen = .TRUE. ENDIF + + Err%LUN = FREELUN + Err%LogIsOpen = .TRUE. + + ! File does not yet exist ==> open new file + ELSE + OPEN ( UNIT=FREELUN, FILE=TRIM(Err%LogFile), & + STATUS='NEW', ACTION='WRITE', IOSTAT=IOS, & + FORM='FORMATTED' ) + IF ( IOS /= 0 ) THEN + PRINT *, 'Cannot create logfile: ' // TRIM(Err%LogFile) + RC = HCO_FAIL + RETURN + ENDIF + + Err%LUN = FREELUN + Err%LogIsOpen = .TRUE. + ENDIF ! Write header on first call IF ( Err%FirstOpen ) THEN LUN = Err%Lun ! Log gets written to file - IF ( Err%LUN < 0 ) LUN = 6 ! or to stdout if file isn't open ! Only write the version info if verbose output is requested - IF ( HCO_IsVerb( Err ) ) THEN + IF ( doVerbose ) THEN ! Write header WRITE( LUN, '(a)' ) REPEAT( '-', 79) @@ -983,6 +783,8 @@ SUBROUTINE HCO_LogFile_Open( Err, RC ) Err%FirstOpen = .FALSE. ENDIF + logLUN = Err%Lun + ! Return w/ success RC = HCO_SUCCESS @@ -995,19 +797,17 @@ END SUBROUTINE HCO_Logfile_Open ! ! !IROUTINE: HCO_LogFile_Close ! -! !DESCRIPTION: Subroutine HCO\_LOGFILE\_CLOSE closes the HEMCO logfile. -! If argument ShowSummary is enabled, it will prompt a summary of the -! HEMCO run up to this point (number of warnings, etc.). +! !DESCRIPTION: Subroutine HCO_LOGFILE_CLOSE closes the HEMCO logfile if +! a dedicated HEMCO log file is used. !\\ !\\ ! !INTERFACE: ! - SUBROUTINE HCO_LogFile_Close( Err, ShowSummary ) + SUBROUTINE HCO_LogFile_Close( Err ) ! ! !INPUT PARAMETERS: ! TYPE(HcoErr), POINTER :: Err ! Error object - LOGICAL, INTENT(IN), OPTIONAL :: ShowSummary ! ! !REVISION HISTORY: ! 23 Sep 2013 - C. Keller - Initialization @@ -1016,43 +816,29 @@ SUBROUTINE HCO_LogFile_Close( Err, ShowSummary ) !------------------------------------------------------------------------------ !BOC INTEGER :: IOS - LOGICAL :: Summary CHARACTER(LEN=255) :: MSG !====================================================================== ! HCO_LOGFILE_CLOSE begins here !====================================================================== - ! Check if object exists + ! Exit if object does not exist, log is closed, not root core, or writing + ! to standard out IF ( .NOT. ASSOCIATED(Err)) RETURN IF ( .NOT. Err%LogIsOpen ) RETURN IF ( .NOT. Err%IsRoot ) RETURN + IF ( TRIM(Err%LogFile) == '*' ) RETURN - ! Show summary? - IF ( PRESENT(ShowSummary) ) THEN - Summary = ShowSummary - ELSE - Summary = .FALSE. - ENDIF - - ! Eventually print summary - IF ( Summary ) THEN - MSG = ' ' - CALL HCO_MSG ( Err, MSG ) - MSG = 'HEMCO ' // TRIM(HCO_VERSION) // ' FINISHED.' - CALL HCO_MSG ( Err, MSG, SEP1='-' ) - - WRITE(MSG,'(A16,I1,A12,I6)') & - 'Warnings: ', Err%nWarnings - CALL HCO_MSG ( Err, MSG, SEP2='-' ) - ENDIF +#ifdef MODEL_CESM + ! Exit if using CESM (for safety) + RETURN +#endif - ! Close logfile only if lun is defined - IF ( Err%Lun>0 ) THEN - CLOSE ( UNIT=Err%Lun, IOSTAT=IOS ) - IF ( IOS/= 0 ) THEN - PRINT *, 'Cannot close logfile: ' // TRIM(Err%LogFile) - ENDIF + ! Close logfile + CLOSE ( UNIT=Err%Lun, IOSTAT=IOS ) + IF ( IOS/= 0 ) THEN + MSG = 'Cannot close logfile: ' // TRIM(Err%LogFile) + CALL HCO_MSG( MSG ) ENDIF Err%LogIsOpen = .FALSE. diff --git a/src/Core/hco_extlist_mod.F90 b/src/Core/hco_extlist_mod.F90 index 88f5cb29..e2488e0e 100644 --- a/src/Core/hco_extlist_mod.F90 +++ b/src/Core/hco_extlist_mod.F90 @@ -235,9 +235,9 @@ SUBROUTINE AddExt( HcoConfig, ExtName, ExtNr, InUse, Spcs, RC ) ENDIF ! Verbose - IF ( HcoConfig%amIRoot .AND. HCO_IsVerb(HcoConfig%Err) .AND. InUse ) THEN + IF ( HcoConfig%amIRoot .AND. HcoConfig%doVerbose .AND. InUse ) THEN WRITE(MSG,*) 'Added HEMCO extension: ', TRIM(ExtName), ExtNr - CALL HCO_MSG(HcoConfig%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoConfig%hcoLogLUN ) ENDIF ! Cleanup @@ -999,7 +999,7 @@ SUBROUTINE SetExtNr( HcoConfig, ExtNr, ExtName, RC ) !====================================================================== ! verbose? - verb = HCO_IsVerb( HcoConfig%Err ) + verb = HcoConfig%doVerbose ! Pass name to module and set to lower case IF ( PRESENT(ExtName) ) THEN @@ -1036,7 +1036,7 @@ SUBROUTINE SetExtNr( HcoConfig, ExtNr, ExtName, RC ) IF ( verb ) THEN WRITE(MSG,*) 'Force ExtNr of extension ', TRIM(ThisExt%ExtName), & ' to ', ExtNr - CALL HCO_MSG(HcoConfig%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoConfig%hcoLogLUN ) ENDIF ENDIF @@ -1305,9 +1305,9 @@ SUBROUTINE HCO_AddOpt ( HcoConfig, OptName, OptValue, ExtNr, RC, & ThisExt%Opts => NewOpt ! Verbose - IF ( VRB .AND. HcoConfig%amIRoot .AND. HCO_IsVerb(HcoConfig%Err) ) THEN + IF ( VRB .AND. HcoConfig%amIRoot .AND. HcoConfig%doVerbose ) THEN MSG = 'Added the following option: ' // TRIM(OptName)//': '//TRIM(OptValue) - CALL HCO_MSG(HcoConfig%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoConfig%hcoLogLUN ) ENDIF ! Cleanup and return w/ success diff --git a/src/Core/hco_fluxarr_mod.F90 b/src/Core/hco_fluxarr_mod.F90 index cbef416d..d1730758 100644 --- a/src/Core/hco_fluxarr_mod.F90 +++ b/src/Core/hco_fluxarr_mod.F90 @@ -212,9 +212,9 @@ SUBROUTINE HCO_EmisAdd_3D_Dp( HcoState, Arr3D, HcoID, & ! Negative flag is 1: set to zero and prompt warning IF ( HcoState%Options%NegFlag == 1 ) THEN WHERE ( Arr3D < 0.0_hp ) Arr3D = 0.0_hp - CALL HCO_WARNING ( HcoState%Config%Err, & + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( & 'Negative values found - set to zero!', & - RC, THISLOC = 'HCO_EmisAdd (HCO_FLUXARR_MOD.F90)' ) + THISLOC = 'HCO_EmisAdd (HCO_FLUXARR_MOD.F90)' ) ! Negative flag is 0: return w/ error ELSE @@ -316,9 +316,9 @@ SUBROUTINE HCO_EmisAdd_3D_Sp ( HcoState, Arr3D, HcoID, & ! Negative flag is 1: set to zero and prompt warning IF ( HcoState%Options%NegFlag == 1 ) THEN WHERE ( Arr3D < 0.0_sp ) Arr3D = 0.0_sp - CALL HCO_WARNING ( HcoState%Config%Err, & + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( & 'Negative values found - set to zero!', & - RC, THISLOC = 'HCO_EmisAdd (HCO_FLUXARR_MOD.F90)' ) + THISLOC = 'HCO_EmisAdd (HCO_FLUXARR_MOD.F90)' ) ! Negative flag is 0: return w/ error ELSE @@ -418,9 +418,9 @@ SUBROUTINE HCO_EmisAdd_2D_Dp( HcoState, Arr2D, HcoID, & ! Negative flag is 1: set to zero and prompt warning IF ( HcoState%Options%NegFlag == 1 ) THEN WHERE ( Arr2D < 0.0_hp ) Arr2D = 0.0_hp - CALL HCO_WARNING ( HcoState%Config%Err, & + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( & 'Negative values found - set to zero!', & - RC, THISLOC = 'HCO_EmisAdd (HCO_FLUXARR_MOD.F90)' ) + THISLOC = 'HCO_EmisAdd (HCO_FLUXARR_MOD.F90)' ) ! Negative flag is 0: return w/ error ELSE @@ -521,9 +521,9 @@ SUBROUTINE HCO_EmisAdd_2D_Sp( HcoState, Arr2D, HcoID, & ! Negative flag is 1: set to zero and prompt warning IF ( HcoState%Options%NegFlag == 1 ) THEN WHERE ( Arr2D < 0.0_sp ) Arr2D = 0.0_sp - CALL HCO_WARNING ( HcoState%Config%Err, & + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( & 'Negative values found - set to zero!', & - RC, THISLOC = 'HCO_EmisAdd (HCO_FLUXARR_MOD.F90)' ) + THISLOC = 'HCO_EmisAdd (HCO_FLUXARR_MOD.F90)' ) ! Negative flag is 0: return w/ error ELSE @@ -632,9 +632,9 @@ SUBROUTINE HCO_EmisAdd_Dp( HcoState, iVal, HcoID, I, J, L, RC ) ! Negative flag is 1: set to zero and prompt warning IF ( HcoState%Options%NegFlag == 1 ) THEN iVal = 0.0_hp - CALL HCO_WARNING ( HcoState%Config%Err, & + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( & 'Negative values found - set to zero!', & - RC, THISLOC = 'HCO_EmisAdd (HCO_FLUXARR_MOD.F90)' ) + THISLOC = 'HCO_EmisAdd (HCO_FLUXARR_MOD.F90)' ) ! Negative flag is 0: return w/ error ELSE @@ -734,9 +734,9 @@ SUBROUTINE HCO_EmisAdd_Sp( HcoState, iVal, HcoID, I, J, L, RC ) ! Negative flag is 1: set to zero and prompt warning IF ( HcoState%Options%NegFlag == 1 ) THEN iVal = 0.0_sp - CALL HCO_WARNING ( HcoState%Config%Err, & + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( & 'Negative values found - set to zero!', & - RC, THISLOC = 'HCO_EmisAdd (HCO_FLUXARR_MOD.F90)' ) + THISLOC = 'HCO_EmisAdd (HCO_FLUXARR_MOD.F90)' ) ! Negative flag is 0: return w/ error ELSE diff --git a/src/Core/hco_geotools_mod.F90 b/src/Core/hco_geotools_mod.F90 index 455c1cd1..68319e03 100644 --- a/src/Core/hco_geotools_mod.F90 +++ b/src/Core/hco_geotools_mod.F90 @@ -831,14 +831,14 @@ SUBROUTINE HCO_CalcVertGrid ( HcoState, PSFC, ZSFC, TK, BXHEIGHT, PEDGE, RC ) ! Verbose statements IF ( HcoState%amIRoot .AND. FIRST .AND. & - HCO_IsVerb(HcoState%Config%Err) ) THEN + HcoState%Config%doVerbose ) THEN Verb = .TRUE. ENDIF IF ( Verb ) THEN MSG = 'Details about vertical grid calculations (only shown on first time step):' - CALL HCO_MSG(HcoState%Config%Err,MSG,SEP1='-') + CALL HCO_MSG(MSG,SEP1='-',LUN=HcoState%Config%hcoLogLUN) MSG = '1. Input data availability: ' - CALL HCO_MSG(HcoState%Config%Err,MSG,SEP1=' ') + CALL HCO_MSG(MSG,SEP1=' ',LUN=HcoState%Config%hcoLogLUN) ENDIF ! ------------------------------------------------------------------ @@ -866,7 +866,7 @@ SUBROUTINE HCO_CalcVertGrid ( HcoState, PSFC, ZSFC, TK, BXHEIGHT, PEDGE, RC ) ! Verbose IF ( Verb ) THEN WRITE(MSG,*) ' - Temperature field TK obtained from model interface (min,max): ', MINVAL(ThisTK), MAXVAL(ThisTK) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ELSEIF ( EVAL_TK ) THEN @@ -893,10 +893,10 @@ SUBROUTINE HCO_CalcVertGrid ( HcoState, PSFC, ZSFC, TK, BXHEIGHT, PEDGE, RC ) IF ( Verb ) THEN IF ( FoundTK ) THEN WRITE(MSG,*) ' - Temperature field TK [K] obtained from configuration file (min,max): ', MINVAL(ThisTK), MAXVAL(ThisTK) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ELSE WRITE(MSG,*) ' - No temperature field TK found - some vertical grid calculations may not be performed...' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF ENDIF @@ -929,7 +929,7 @@ SUBROUTINE HCO_CalcVertGrid ( HcoState, PSFC, ZSFC, TK, BXHEIGHT, PEDGE, RC ) ! Verbose IF ( Verb ) THEN WRITE(MSG,*) ' - Surface pressure PSFC [Pa] obtained from model interface (min, max): ', MINVAL(HcoState%Grid%PSFC%Val), MAXVAL(HcoState%Grid%PSFC%VAL) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! Otherwise, try to read from HEMCO configuration file @@ -957,10 +957,10 @@ SUBROUTINE HCO_CalcVertGrid ( HcoState, PSFC, ZSFC, TK, BXHEIGHT, PEDGE, RC ) IF ( Verb ) THEN IF ( FoundPSFC ) THEN WRITE(MSG,*) ' - Surface pressure PSFC [Pa] obtained from configuration file (min, max): ', MINVAL(HcoState%Grid%PSFC%Val), MAXVAL(HcoState%Grid%PSFC%VAL) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ELSE MSG = ' - Surface pressure PSFC not found. Will attempt to calculate it.' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF ENDIF @@ -993,7 +993,7 @@ SUBROUTINE HCO_CalcVertGrid ( HcoState, PSFC, ZSFC, TK, BXHEIGHT, PEDGE, RC ) ! Verbose IF ( Verb ) THEN WRITE(MSG,*) ' - Surface geopotential height ZSFC [m] obtained from model interface (min, max): ', MINVAL(HcoState%Grid%ZSFC%Val), MAXVAL(HcoState%Grid%ZSFC%VAL) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! Otherwise, try to read from HEMCO configuration file @@ -1009,10 +1009,10 @@ SUBROUTINE HCO_CalcVertGrid ( HcoState, PSFC, ZSFC, TK, BXHEIGHT, PEDGE, RC ) IF ( Verb ) THEN IF ( FoundZSFC ) THEN WRITE(MSG,*) ' - Surface geopotential height ZSFC [m] obtained from configuration file (min, max): ', MINVAL(HcoState%Grid%ZSFC%Val), MAXVAL(HcoState%Grid%ZSFC%VAL) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ELSE MSG = ' - Surface geopotential height ZSFC not found. Will attempt to calculate it.' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF ENDIF @@ -1046,7 +1046,7 @@ SUBROUTINE HCO_CalcVertGrid ( HcoState, PSFC, ZSFC, TK, BXHEIGHT, PEDGE, RC ) ! Verbose IF ( Verb ) THEN WRITE(MSG,*) ' - Pressure edges PEDGE obtained from model interface (min, max): ', MINVAL(HcoState%Grid%PEDGE%Val), MAXVAL(HcoState%Grid%PEDGE%VAL) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ELSEIF ( EVAL_PEDGE ) THEN @@ -1062,10 +1062,10 @@ SUBROUTINE HCO_CalcVertGrid ( HcoState, PSFC, ZSFC, TK, BXHEIGHT, PEDGE, RC ) IF ( Verb ) THEN IF ( FoundPEDGE ) THEN WRITE(MSG,*) ' - Pressure edges PEDGE obtained from configuration file (min, max): ', MINVAL(HcoState%Grid%PEDGE%Val), MAXVAL(HcoState%Grid%PEDGE%VAL) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ELSE MSG = ' - Pressure edges PEDGE not found. Will attempt to calculate it.' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF ENDIF @@ -1099,7 +1099,7 @@ SUBROUTINE HCO_CalcVertGrid ( HcoState, PSFC, ZSFC, TK, BXHEIGHT, PEDGE, RC ) ! Verbose IF ( Verb ) THEN WRITE(MSG,*) ' - Boxheights BXHEIGHT_M obtained from model interface (min, max): ', MINVAL(HcoState%Grid%BXHEIGHT_M%Val), MAXVAL(HcoState%Grid%BXHEIGHT_M%VAL) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! Otherwise, try to read from HEMCO configuration file @@ -1116,10 +1116,10 @@ SUBROUTINE HCO_CalcVertGrid ( HcoState, PSFC, ZSFC, TK, BXHEIGHT, PEDGE, RC ) IF ( Verb ) THEN IF ( FoundBXHEIGHT ) THEN WRITE(MSG,*) ' - Boxheights BXHEIGHT_M obtained from configuration file (min, max): ', MINVAL(HcoState%Grid%BXHEIGHT_M%Val), MAXVAL(HcoState%Grid%BXHEIGHT_M%VAL) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ELSE MSG = ' - Boxheights BXHEIGHT_M not found. Will attempt to calculate it.' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF ENDIF @@ -1147,7 +1147,7 @@ SUBROUTINE HCO_CalcVertGrid ( HcoState, PSFC, ZSFC, TK, BXHEIGHT, PEDGE, RC ) ! Verbose IF ( Verb ) THEN MSG = '2. Grid calculations: ' - CALL HCO_MSG(HcoState%Config%Err,MSG,SEP1=' ') + CALL HCO_MSG(MSG,SEP1=' ',LUN=HcoState%Config%hcoLogLUN) ENDIF ! Set PSFC @@ -1158,7 +1158,7 @@ SUBROUTINE HCO_CalcVertGrid ( HcoState, PSFC, ZSFC, TK, BXHEIGHT, PEDGE, RC ) ! Verbose IF ( Verb ) THEN MSG = ' - Surface pressure set to surface pressure edge.' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ELSE HcoState%Grid%PSFC%Val(:,:) = 101325.0_hp @@ -1167,13 +1167,13 @@ SUBROUTINE HCO_CalcVertGrid ( HcoState, PSFC, ZSFC, TK, BXHEIGHT, PEDGE, RC ) 'This may affect the accuracy of vertical grid ' // & 'quantities. It is recommended you provide PSFC via '// & 'the model-HEMCO interface or the HEMCO configuration file!' - CALL HCO_WARNING( HcoState%Config%Err,MSG, RC, THISLOC=LOC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG, THISLOC=LOC ) ENDIF ! Verbose IF ( Verb ) THEN MSG = ' - Surface pressure uniformly set to 101325.0 Pa.' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF FoundPSFC = .TRUE. @@ -1216,7 +1216,7 @@ SUBROUTINE HCO_CalcVertGrid ( HcoState, PSFC, ZSFC, TK, BXHEIGHT, PEDGE, RC ) IF ( Verb ) THEN WRITE(MSG,*) ' - PEDGE calculated from PSFC, Ap, and Bp (min, max): ', & MINVAL(HcoState%Grid%PEDGE%Val), MAXVAL(HcoState%Grid%PEDGE%Val) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF @@ -1287,7 +1287,7 @@ SUBROUTINE HCO_CalcVertGrid ( HcoState, PSFC, ZSFC, TK, BXHEIGHT, PEDGE, RC ) IF ( Verb ) THEN WRITE(MSG,*) ' - ZSFC calculated from PSFC and T (min, max): ', & MINVAL(HcoState%Grid%ZSFC%Val), MAXVAL(HcoState%Grid%ZSFC%Val) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF @@ -1305,7 +1305,7 @@ SUBROUTINE HCO_CalcVertGrid ( HcoState, PSFC, ZSFC, TK, BXHEIGHT, PEDGE, RC ) IF ( Verb ) THEN WRITE(MSG,*) ' - Boxheights calculated from PEDGE and T (min, max): ', & MINVAL(HcoState%Grid%BXHEIGHT_M%Val), MAXVAL(HcoState%Grid%BXHEIGHT_M%Val) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF @@ -1316,14 +1316,14 @@ SUBROUTINE HCO_CalcVertGrid ( HcoState, PSFC, ZSFC, TK, BXHEIGHT, PEDGE, RC ) 'some extensions to fail. HEMCO tries to calculate ' // & 'ZSFC from surface pressure and air temperature, but ' // & 'at least one of these variables seem to be missing.' - CALL HCO_WARNING( HcoState%Config%Err,MSG, RC, THISLOC=LOC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG, THISLOC=LOC ) ENDIF IF ( .NOT. FoundBXHEIGHT .AND. FIRST .AND. HcoState%amIRoot ) THEN MSG = 'Cannot set boxheights BXHEIGHT_M. This may cause ' // & 'some extensions to fail. HEMCO tries to calculate ' // & 'BXHEIGHT from pressure edges and air temperature, but ' // & 'at least one of these variables seem to be missing.' - CALL HCO_WARNING( HcoState%Config%Err,MSG, RC, THISLOC=LOC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG, THISLOC=LOC ) ENDIF ENDIF ENDIF @@ -1335,7 +1335,7 @@ SUBROUTINE HCO_CalcVertGrid ( HcoState, PSFC, ZSFC, TK, BXHEIGHT, PEDGE, RC ) ! Verbose IF ( Verb ) THEN WRITE(MSG,*) 'Vertical grid calculations done.' - CALL HCO_MSG(HcoState%Config%Err,MSG,SEP2='-') + CALL HCO_MSG(MSG,SEP2='-',LUN=HcoState%Config%hcoLogLUN) ENDIF ! Cleanup @@ -1423,10 +1423,10 @@ SUBROUTINE HCO_SetPBLm( HcoState, FldName, PBLM, DefVal, RC ) ENDIF ! Verbose - IF ( HcoState%amIRoot .AND. HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%amIRoot .AND. HcoState%Config%doVerbose ) THEN IF ( FOUND ) THEN WRITE(MSG,*) 'HEMCO PBL heights obtained from field ',TRIM(FldName) - CALL HCO_MSG(HcoState%Config%Err,MSG,SEP2='-') + CALL HCO_MSG(MSG,SEP2='-',LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF ENDIF @@ -1449,9 +1449,9 @@ SUBROUTINE HCO_SetPBLm( HcoState, FldName, PBLM, DefVal, RC ) FOUND = .TRUE. ! Verbose - IF ( HcoState%amIRoot .AND. HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%amIRoot .AND. HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'HEMCO PBL heights obtained from provided 2D field.' - CALL HCO_MSG(HcoState%Config%Err,MSG,SEP2='-') + CALL HCO_MSG(MSG,SEP2='-',LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF ENDIF @@ -1474,9 +1474,9 @@ SUBROUTINE HCO_SetPBLm( HcoState, FldName, PBLM, DefVal, RC ) FOUND = .TRUE. ! Verbose - IF ( HcoState%amIRoot .AND. HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%amIRoot .AND. HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'HEMCO PBL heights uniformly set to ', DefVal - CALL HCO_MSG(HcoState%Config%Err,MSG,SEP2='-') + CALL HCO_MSG(MSG,SEP2='-',LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF ENDIF diff --git a/src/Core/hco_interp_mod.F90 b/src/Core/hco_interp_mod.F90 index c214dfda..5cf71221 100644 --- a/src/Core/hco_interp_mod.F90 +++ b/src/Core/hco_interp_mod.F90 @@ -178,7 +178,7 @@ SUBROUTINE REGRID_MAPA2A( HcoState, NcArr, LonE, LatE, Lct, RC ) REGR_4D => NULL() ! Check for verbose mode - verb = HCO_IsVerb( HcoState%Config%Err ) + verb = HcoState%Config%doVerbose ! get longitude / latitude sizes nLonEdge = SIZE(LonE,1) @@ -285,9 +285,9 @@ SUBROUTINE REGRID_MAPA2A( HcoState, NcArr, LonE, LatE, Lct, RC ) ! Verbose mode IF ( verb ) THEN MSG = 'Do index based regridding for field ' // TRIM(Lct%Dct%cName) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) ' - Number of indeces: ', NINDEX - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ELSE @@ -606,10 +606,10 @@ SUBROUTINE ModelLev_Interpolate( HcoState, REGR_4D, Lct, RC ) ENDIF ! Check for verbose mode - verb = HCO_IsVerb( HcoState%Config%Err ) + verb = HcoState%Config%doVerbose IF ( verb ) THEN MSG = 'Vertically interpolate model levels: '//TRIM(Lct%Dct%cName) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! Get HEMCO grid dimensions @@ -669,9 +669,9 @@ SUBROUTINE ModelLev_Interpolate( HcoState, REGR_4D, Lct, RC ) ENDDO ! Verbose - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN MSG = '# of input levels = # of output levels - passed as is.' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! Done! @@ -768,14 +768,14 @@ SUBROUTINE ModelLev_Interpolate( HcoState, REGR_4D, Lct, RC ) ENDDO ! T ! Verbose - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Mapped ', nlev, ' levels onto reduced GEOS-5 levels.' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) IF ( nlev == 3 .OR. nlev == 11 .OR. nlev == 36 ) THEN WRITE(MSG,*) 'The input variable has ', nlev, 'L, which were written to be L 1-', nlev, ' on the output 47 L grid (remaining values set to 0).' ELSE WRITE(MSG,*) 'Pressure-weighted vertical regridding was done - consider if this is appropriate for the variable units.' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF @@ -850,11 +850,11 @@ SUBROUTINE ModelLev_Interpolate( HcoState, REGR_4D, Lct, RC ) ENDDO ! T ! Verbose - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Mapped ', nlev, ' levels onto reduced GISS levels.' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) 'Pressure-weighted vertical regridding was done - consider if this is appropriate for the variable units.' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! Done! @@ -964,15 +964,15 @@ SUBROUTINE ModelLev_Interpolate( HcoState, REGR_4D, Lct, RC ) ENDDO ! T ! Verbose - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Mapped ', nlev, ' levels onto native GEOS-5 levels.' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) IF ( nlev == 3 .OR. nlev == 11 .OR. nlev == 36 ) THEN WRITE(MSG,*) 'The input variable has ', nlev, 'L, which were written to be L 1-', nlev, ' on the output 72 L grid (remaining values set to 0).' ELSE WRITE(MSG,*) 'Inflating from 47/48 to 72/73 levels is not recommended and is likely not mass-conserving.' ENDIF - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! Done! @@ -986,13 +986,13 @@ SUBROUTINE ModelLev_Interpolate( HcoState, REGR_4D, Lct, RC ) ! Error check / verbose mode !=================================================================== IF ( DONE ) THEN - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Did vertical regridding for ',TRIM(Lct%Dct%cName),':' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) 'Number of original levels: ', nlev - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) 'Number of output levels: ', SIZE(Lct%Dct%Dta%V3(1)%Val,3) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ELSE WRITE(MSG,*) 'Vertical regridding failed: ',TRIM(Lct%Dct%cName) diff --git a/src/Core/hco_logfile_mod.F90 b/src/Core/hco_logfile_mod.F90 index 6207d1a3..056dde15 100644 --- a/src/Core/hco_logfile_mod.F90 +++ b/src/Core/hco_logfile_mod.F90 @@ -75,20 +75,20 @@ SUBROUTINE HCO_Spec2Log( HcoState, ID ) !================================================================= MSG = 'Species ' // TRIM(HcoState%Spc(ID)%SpcName) - CALL HCO_MSG(HcoState%Config%Err,MSG) - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) + IF ( HcoState%Config%doVerbose ) THEN write(MSG,*) '--> HcoID : ', HcoState%Spc(ID)%HcoID - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) '--> ModID : ', HcoState%Spc(ID)%ModID - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) '--> MW (g/mol) : ', HcoState%Spc(ID)%MW_g - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) '--> Henry constant: ', HcoState%Spc(ID)%HenryK0 - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) '--> Henry temp. : ', HcoState%Spc(ID)%HenryCR - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) '--> Henry pKA : ', HcoState%Spc(ID)%HenryPKA - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF END SUBROUTINE HCO_Spec2Log @@ -218,95 +218,95 @@ SUBROUTINE HCO_PrintDataCont ( HcoState, Dct ) ENDIF ! Print name for verbose > 0 - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN MSG = 'Container ' // TRIM(Dct%cName) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! Eventually add details - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN ! General information write(MSG,*) ' -->Data type : ', Dct%DctType - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) ' -->Container ID : ', Dct%cID - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) ' -->Target ID : ', Dct%targetID - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) ' -->File data home? ', Dct%DtaHome - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) ' -->Source file : ', TRIM(Dct%Dta%ncFile) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) ' -->ncRead? ', Dct%Dta%ncRead - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) ' -->Shared data file? ', Dct%Dta%DoShare - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) IF ( Dct%Dta%ncRead ) THEN write(MSG,*) ' -->Source parameter: ', TRIM(Dct%Dta%ncPara) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) ' -->Year range : ', Dct%Dta%ncYrs - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) ' -->Month range : ', Dct%Dta%ncMts - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) ' -->Day range : ', Dct%Dta%ncDys - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) ' -->Hour range : ', Dct%Dta%ncHrs - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) ' -->SpaceDim : ', Dct%Dta%SpaceDim - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF IF ( NZ > 0 ) THEN write(MSG,*) ' -->Array dimension : ', nx,ny,nz ELSE write(MSG,*) ' -->Array dimension : ', nx,ny ENDIF - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) ' -->Array sum : ', sm - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) ' -->Array min & max : ', mn,mx - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) ' -->Time dimension : ', nt - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) ' -->Delta t[h] : ', Dct%Dta%DeltaT - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) ' -->Local time? ', Dct%Dta%IsLocTime - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) IF ( ASSOCIATED(Dct%Dta%tIDx) ) THEN write(MSG,*) ' -->Tempres : ', & TRIM(Dct%Dta%tIDx%TempRes) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF write(MSG,*) ' -->OrigUnit : ',TRIM(Dct%Dta%OrigUnit) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) ' -->Concentration? ', Dct%Dta%IsConc - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) ' -->Coverage : ', Dct%Dta%Cover - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ! For base emissions IF ( Dct%DctType==HCO_DCTTYPE_BASE ) THEN write(MSG,*) ' -->Extension Nr : ', Dct%ExtNr - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) ' -->Species name : ',TRIM(Dct%SpcName) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) ' -->HEMCO species ID: ', Dct%HcoID - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) ' -->Category : ', Dct%Cat - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) ' -->Hierarchy : ', Dct%Hier - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) IF ( nz == 0 ) THEN write(MSG,*) ' -->2D emitted into : ', Dct%Dta%EmisL1, & ' and ', Dct%Dta%EmisL2 - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! For scale factors ELSE write(MSG,*) ' -->Scal ID : ', Dct%ScalID - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) write(MSG,*) ' -->Operator : ', Dct%Oper - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF diff --git a/src/Core/hco_readlist_mod.F90 b/src/Core/hco_readlist_mod.F90 index 2b19a1f4..cee65c59 100644 --- a/src/Core/hco_readlist_mod.F90 +++ b/src/Core/hco_readlist_mod.F90 @@ -98,7 +98,6 @@ SUBROUTINE ReadList_Set( HcoState, Dct, RC ) ! !LOCAL VARIABLES: ! INTEGER :: intv - LOGICAL :: verb CHARACTER(LEN=255) :: MSG, LOC ! ================================================================ @@ -113,9 +112,6 @@ SUBROUTINE ReadList_Set( HcoState, Dct, RC ) RETURN ENDIF - ! Verbose mode - verb = HCO_IsVerb( HcoState%Config%Err ) - ! Add container to ReadList according to update freqency. ! Fields in list 'Hour' will be updated (i.e. re-read) every hour, ! fields in list 'Day' every day, etc. @@ -198,9 +194,9 @@ SUBROUTINE ReadList_Set( HcoState, Dct, RC ) ENDIF ! Verbose - IF ( Verb ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'New container set to ReadList:' - CALL HCO_MSG(HcoState%Config%Err, MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) CALL HCO_PrintDataCont( HcoState, Dct ) ENDIF @@ -269,7 +265,7 @@ SUBROUTINE ReadList_Read( HcoState, RC, ReadAll ) ENDIF ! Verbose mode - verb = HCO_IsVerb( HcoState%Config%Err ) + verb = HcoState%Config%doVerbose ! Read all fields? RdAll = .FALSE. @@ -283,7 +279,7 @@ SUBROUTINE ReadList_Read( HcoState, RC, ReadAll ) IF ( RdAll ) THEN IF ( Verb ) THEN WRITE(MSG,*) 'Now reading once list!' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF CALL ReadList_Fill( HcoState, HcoState%ReadLists%Once, RC ) IF ( RC /= HCO_SUCCESS ) THEN @@ -297,7 +293,7 @@ SUBROUTINE ReadList_Read( HcoState, RC, ReadAll ) IF ( HcoClock_NewYear( HcoState%Clock, .FALSE. ) .OR. RdAll ) THEN IF ( Verb ) THEN WRITE(MSG,*) 'Now reading year list!' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF CALL ReadList_Fill( HcoState, HcoState%ReadLists%Year, RC ) IF ( RC /= HCO_SUCCESS ) THEN @@ -311,7 +307,7 @@ SUBROUTINE ReadList_Read( HcoState, RC, ReadAll ) IF ( HcoClock_NewMonth( HcoState%Clock, .FALSE. ) .OR. RdAll ) THEN IF ( Verb ) THEN WRITE(MSG,*) 'Now reading month list!' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF CALL ReadList_Fill( HcoState, HcoState%ReadLists%Month, RC ) IF ( RC /= HCO_SUCCESS ) THEN @@ -325,7 +321,7 @@ SUBROUTINE ReadList_Read( HcoState, RC, ReadAll ) IF ( HcoClock_NewDay( HcoState%Clock, .FALSE. ) .OR. RdAll ) THEN IF ( Verb ) THEN WRITE(MSG,*) 'Now reading day list!' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF CALL ReadList_Fill( HcoState, HcoState%ReadLists%Day, RC ) IF ( RC /= HCO_SUCCESS ) THEN @@ -339,7 +335,7 @@ SUBROUTINE ReadList_Read( HcoState, RC, ReadAll ) IF ( HcoClock_NewHour( HcoState%Clock, .FALSE. ) .OR. RdAll ) THEN IF ( Verb ) THEN WRITE(MSG,*) 'Now reading hour list!' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF CALL ReadList_Fill( HcoState, HcoState%ReadLists%Hour, RC ) IF ( RC /= HCO_SUCCESS ) THEN @@ -353,7 +349,7 @@ SUBROUTINE ReadList_Read( HcoState, RC, ReadAll ) IF ( HcoClock_New3Hour( HcoState%Clock, .FALSE. ) .OR. RdAll ) THEN IF ( Verb ) THEN WRITE(MSG,*) 'Now reading 3-hour list!' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF CALL ReadList_Fill( HcoState, HcoState%ReadLists%Hour3, RC ) IF ( RC /= HCO_SUCCESS ) THEN @@ -366,7 +362,7 @@ SUBROUTINE ReadList_Read( HcoState, RC, ReadAll ) ! Always add/update content from always-list IF ( Verb ) THEN WRITE(MSG,*) 'Now reading always list!' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF CALL ReadList_Fill( HcoState, HcoState%ReadLists%Always, RC ) IF ( RC /= HCO_SUCCESS ) THEN @@ -457,7 +453,7 @@ SUBROUTINE ReadList_Fill( HcoState, ReadList, RC ) ENDIF ! Verbose mode? - verb = HCO_IsVerb ( HcoState%Config%Err ) + verb = HcoState%Config%doVerbose ! Loop over all containers Lct => ReadList @@ -564,7 +560,7 @@ SUBROUTINE ReadList_Fill( HcoState, ReadList, RC ) ! Verbose mode IF ( verb ) THEN MSG = 'Remove data array of ' // TRIM(Lct%Dct%cName) - CALL HCO_MSG( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ENDIF @@ -771,42 +767,42 @@ SUBROUTINE ReadList_Print( HcoState, ReadLists ) ! ================================================================ ! Nothing to do if HEMCO verbose level is below passed verbose number - IF ( .NOT. HCO_IsVerb(HcoState%Config%Err ) ) RETURN + IF ( .NOT. HcoState%Config%doVerbose ) RETURN ! Print content of all lists IF ( ASSOCIATED(ReadLists) .and. HcoState%amIRoot ) THEN WRITE(MSG,*) 'Contents of one-time list:' - CALL HCO_MSG(HcoState%Config%Err,MSG,SEP1='=') + CALL HCO_MSG( msg, SEP1='=', LUN=HcoState%Config%hcoLogLUN ) CALL HCO_PrintList ( HcoState, ReadLists%Once ) WRITE(MSG,*) 'Contents of year list:' - CALL HCO_MSG(HcoState%Config%Err,MSG,SEP1='=') + CALL HCO_MSG( msg, SEP1='=', LUN=HcoState%Config%hcoLogLUN ) CALL HCO_PrintList ( HcoState, ReadLists%Year ) WRITE(MSG,*) 'Contents of month list:' - CALL HCO_MSG(HcoState%Config%Err,MSG,SEP1='=') + CALL HCO_MSG( msg, SEP1='=', LUN=HcoState%Config%hcoLogLUN ) CALL HCO_PrintList ( HcoState, ReadLists%Month ) WRITE(MSG,*) 'Contents of day list:' - CALL HCO_MSG(HcoState%Config%Err,MSG,SEP1='=') + CALL HCO_MSG( msg, SEP1='=', LUN=HcoState%Config%hcoLogLUN ) CALL HCO_PrintList ( HcoState, ReadLists%Day ) WRITE(MSG,*) 'Contents of 3-hour list:' - CALL HCO_MSG(HcoState%Config%Err,MSG,SEP1='=' ) + CALL HCO_MSG( msg, SEP1='=', LUN=HcoState%Config%hcoLogLUN ) CALL HCO_PrintList ( HcoState, ReadLists%Hour3 ) WRITE(MSG,*) 'Contents of hour list:' - CALL HCO_MSG(HcoState%Config%Err,MSG,SEP1='=') + CALL HCO_MSG( msg, SEP1='=', LUN=HcoState%Config%hcoLogLUN ) CALL HCO_PrintList ( HcoState, ReadLists%Hour ) WRITE(MSG,*) 'Contents of always-to-read list:' - CALL HCO_MSG(HcoState%Config%Err,MSG,SEP1='=') + CALL HCO_MSG( msg, SEP1='=', LUN=HcoState%Config%hcoLogLUN ) CALL HCO_PrintList ( HcoState, ReadLists%Always ) ELSE WRITE(MSG,*) 'ReadList not defined yet!!' - CALL HCO_MSG(HcoState%Config%Err,MSG,SEP1='=') + CALL HCO_MSG( msg, SEP1='=', LUN=HcoState%Config%hcoLogLUN ) ENDIF END SUBROUTINE ReadList_Print diff --git a/src/Core/hco_restart_mod.F90 b/src/Core/hco_restart_mod.F90 index 8f1c4680..c0065d60 100644 --- a/src/Core/hco_restart_mod.F90 +++ b/src/Core/hco_restart_mod.F90 @@ -340,10 +340,10 @@ SUBROUTINE HCO_RestartGet_3D( HcoState, Name, Arr3D, & ENDIF ! Log output - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN IF ( HcoState%amIRoot .AND. FLD ) THEN MSG = 'Obtained restart variable from ESMF internal state: '//TRIM(Name) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF #endif @@ -365,10 +365,10 @@ SUBROUTINE HCO_RestartGet_3D( HcoState, Name, Arr3D, & Arr3D = Ptr3D ! Log output - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN IF ( HcoState%amIRoot ) THEN MSG = 'Obtained restart variable from HEMCO config: '//TRIM(Name) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF ENDIF @@ -384,19 +384,19 @@ SUBROUTINE HCO_RestartGet_3D( HcoState, Name, Arr3D, & IF ( PRESENT(Def3D) ) THEN Arr3D = Def3D FLD = .TRUE. - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN IF ( HcoState%amIRoot ) THEN MSG = 'Filled restart variable with default 3D field: '//TRIM(Name) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF ELSEIF( PRESENT(DefVal) ) THEN Arr3D = DefVal FLD = .TRUE. - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN IF ( HcoState%amIRoot ) THEN MSG = 'Filled restart variable with default scalar: '//TRIM(Name) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF ENDIF @@ -505,10 +505,10 @@ SUBROUTINE HCO_RestartGet_2D( HcoState, Name, Arr2D, & ENDIF ! Log output - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN IF ( HcoState%amIRoot .AND. FLD ) THEN MSG = 'Obtained restart variable from ESMF internal state: '//TRIM(Name) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(*,*) TRIM(MSG) ENDIF ENDIF @@ -531,10 +531,10 @@ SUBROUTINE HCO_RestartGet_2D( HcoState, Name, Arr2D, & Arr2D = Ptr2D ! Log output - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN IF ( HcoState%amIRoot ) THEN MSG = 'Obtained restart variable from HEMCO config: '//TRIM(Name) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(*,*) TRIM(MSG) ENDIF ENDIF @@ -551,20 +551,20 @@ SUBROUTINE HCO_RestartGet_2D( HcoState, Name, Arr2D, & IF ( PRESENT(Def2D) ) THEN Arr2D = Def2D FLD = .TRUE. - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN IF ( HcoState%amIRoot ) THEN MSG = 'Filled restart variable with default 2D field: '//TRIM(Name) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(*,*) TRIM(MSG) ENDIF ENDIF ELSEIF( PRESENT(DefVal) ) THEN Arr2D = DefVal FLD = .TRUE. - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN IF ( HcoState%amIRoot ) THEN MSG = 'Filled restart variable with default scalar: '//TRIM(Name) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(*,*) TRIM(MSG) ENDIF ENDIF @@ -577,10 +577,10 @@ SUBROUTINE HCO_RestartGet_2D( HcoState, Name, Arr2D, & IF ( PRESENT(FILLED) ) FILLED = FLD ! Verbose - IF ( HCO_IsVerb(HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN IF ( HcoState%amIRoot .AND. .NOT. FLD ) THEN MSG = 'No restart field found (2D): '//TRIM(Name) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(*,*) TRIM(MSG) ENDIF ENDIF diff --git a/src/Core/hco_scale_mod.F90 b/src/Core/hco_scale_mod.F90 index 42656bdd..978217f2 100644 --- a/src/Core/hco_scale_mod.F90 +++ b/src/Core/hco_scale_mod.F90 @@ -129,10 +129,10 @@ SUBROUTINE HCO_ScaleInit( HcoState, RC ) SpcScal(N) = ScalFactor ! Verbose mode - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE (MSG,*) 'Will use universal emission scale factor for ', & TRIM(HcoState%Spc(N)%SpcName),': ',SpcScal(N) - CALL HCO_MSG ( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ENDIF ENDDO @@ -243,9 +243,9 @@ SUBROUTINE HCO_ScaleArr3D_sp( HcoState, HcoID, Arr3D, RC ) IF ( ScalFact /= 1.0_hp ) THEN Arr3D = Arr3D * ScalFact ! Verbose mode - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) '3D field scaled by factor of ',ScalFact - CALL HCO_MSG ( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ENDIF @@ -307,9 +307,9 @@ SUBROUTINE HCO_ScaleArr3D_dp( HcoState, HcoID, Arr3D, RC ) IF ( ScalFact /= 1.0_hp ) THEN Arr3D = Arr3D * ScalFact ! Verbose mode - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) '3D field scaled by factor of ',ScalFact - CALL HCO_MSG ( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ENDIF @@ -370,9 +370,9 @@ SUBROUTINE HCO_ScaleArr2D_sp( HcoState, HcoID, Arr2D, RC ) IF ( ScalFact /= 1.0_hp ) THEN Arr2D = Arr2D * ScalFact ! Verbose mode - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) '2D field scaled by factor of ',ScalFact - CALL HCO_MSG ( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ENDIF @@ -433,9 +433,9 @@ SUBROUTINE HCO_ScaleArr2D_dp( HcoState, HcoID, Arr2D, RC ) IF ( ScalFact /= 1.0_hp ) THEN Arr2D = Arr2D * ScalFact ! Verbose mode - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) '2D field scaled by factor of ',ScalFact - CALL HCO_MSG ( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ENDIF @@ -495,9 +495,9 @@ SUBROUTINE HCO_ScaleArr1D_sp( HcoState, HcoID, Arr1D, RC ) IF ( ScalFact /= 1.0_hp ) THEN Arr1D = Arr1D * ScalFact ! Verbose mode - !IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + !IF ( HcoState%Config%doVerbose ) THEN ! WRITE(MSG,*) '1D field scaled by factor of ',ScalFact - ! CALL HCO_MSG ( HcoState%Config%Err, MSG ) + ! CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) !ENDIF ENDIF @@ -557,9 +557,9 @@ SUBROUTINE HCO_ScaleArr1D_dp( HcoState, HcoID, Arr1D, RC ) IF ( ScalFact /= 1.0_hp ) THEN Arr1D = Arr1D * ScalFact ! Verbose mode - !IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + !IF ( HcoState%Config%doVerbose ) THEN ! WRITE(MSG,*) '1D field scaled by factor of ',ScalFact - ! CALL HCO_MSG ( HcoState%Config%Err, MSG ) + ! CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) !ENDIF ENDIF diff --git a/src/Core/hco_state_mod.F90 b/src/Core/hco_state_mod.F90 index fb2cf2a2..66f2e280 100644 --- a/src/Core/hco_state_mod.F90 +++ b/src/Core/hco_state_mod.F90 @@ -202,7 +202,7 @@ SUBROUTINE HcoState_Init( HcoState, HcoConfig, nSpecies, RC ) ! Check if already allocated IF ( ASSOCIATED(HcoState)) THEN - CALL HCO_WARNING( HcoConfig%Err,'HcoState already allocated!', RC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( 'HcoState already allocated!' ) RETURN ENDIF ALLOCATE ( HcoState ) @@ -498,23 +498,23 @@ SUBROUTINE HcoState_Init( HcoState, HcoConfig, nSpecies, RC ) HcoState%AlltIDx => NULL() ! Verbose mode - IF ( HCO_IsVerb( HcoConfig%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,'(A68)') 'Initialized HEMCO state. Will use the following settings:' - CALL HCO_MSG(HcoConfig%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoConfig%hcoLogLUN ) WRITE(MSG,'(A33,I2)') 'Unit tolerance : ', UnitTolerance - CALL HCO_MSG(HcoConfig%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoConfig%hcoLogLUN ) WRITE(MSG,'(A33,I2)') 'Negative values : ', HcoState%Options%NegFlag - CALL HCO_MSG(HcoConfig%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoConfig%hcoLogLUN ) WRITE(MSG,'(A33,L2)') 'Mask fractions : ', HcoState%Options%MaskFractions - CALL HCO_MSG(HcoConfig%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoConfig%hcoLogLUN ) WRITE(MSG,'(A33,L2)') 'Do drydep over entire PBL : ', HcoState%Options%PBL_DRYDEP - CALL HCO_MSG(HcoConfig%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoConfig%hcoLogLUN ) WRITE(MSG,'(A33,F6.2)') 'Upper limit for deposition x ts: ', HcoState%Options%MaxDepExp - CALL HCO_MSG(HcoConfig%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoConfig%hcoLogLUN ) WRITE(MSG,'(A33,L2)') 'Scale emissions : ', HcoState%Options%ScaleEmis - CALL HCO_MSG(HcoConfig%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoConfig%hcoLogLUN ) WRITE(MSG,'(A33,L2)') 'Cap time shift : ', HcoState%Options%TimeShiftCap - CALL HCO_MSG(HcoConfig%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoConfig%hcoLogLUN ) ENDIF ! Leave w/ success diff --git a/src/Core/hco_timeshift_mod.F90 b/src/Core/hco_timeshift_mod.F90 index 4dd81c72..1e04c603 100644 --- a/src/Core/hco_timeshift_mod.F90 +++ b/src/Core/hco_timeshift_mod.F90 @@ -180,10 +180,10 @@ SUBROUTINE TimeShift_Set( HcoConfig, Dta, shift, RC ) ENDIF ! verbose mode - IF ( HCO_IsVerb( HcoConfig%Err ) ) THEN + IF ( HcoConfig%doVerbose ) THEN WRITE(MSG,*) 'Will shift time stamp of field ', TRIM(Dta%ncPara), & ': ', TRIM(tShift) - CALL HCO_MSG(HcoConfig%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoConfig%hcoLogLUN ) ENDIF RC = HCO_SUCCESS @@ -378,9 +378,9 @@ SUBROUTINE TimeShift_Apply( HcoState, Lct, & nDy = oDy nHr = 0 nMn = 0 - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN MSG = 'Options set to cap time shift - set to low bound' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ELSEIF ( nYr > oYr .OR. nMt > oMt .OR. nDy > oDy ) THEN nYr = oYr @@ -388,21 +388,21 @@ SUBROUTINE TimeShift_Apply( HcoState, Lct, & nDy = oDy nHr = 23 nMn = 59 - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN MSG = 'Options set to cap time shift - set to high bound' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF ENDIF ! verbose mode - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Adjusted time stamp of field ', TRIM(Lct%Dct%cName) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) 'Time shift (YMDhms): ', Lct%Dct%Dta%tShift - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,'(a27,i4.4,a1,i2.2,a1,i2.2,a1,i2.2,a1,i2.2)') 'Original Yr/Mt/Dy-Hr:Mn = ',oYr,'/',oMt,'/',oDy,'-',oHr,':',oMn - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! Add back to output values @@ -413,9 +413,9 @@ SUBROUTINE TimeShift_Apply( HcoState, Lct, & Mn = nMn ! verbose mode - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,'(a27,i4.4,a1,i2.2,a1,i2.2,a1,i2.2,a1,i2.2)') 'Adjusted Yr/Mt/Dy-Hr:Mn = ',Yr,'/',Mt,'/',Dy,'-',Hr,':',Mn - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! Return w/ success diff --git a/src/Core/hco_types_mod.F90 b/src/Core/hco_types_mod.F90 index ab990b6d..c5dc85bd 100644 --- a/src/Core/hco_types_mod.F90 +++ b/src/Core/hco_types_mod.F90 @@ -447,10 +447,13 @@ MODULE HCO_TYPES_MOD TYPE(ModSpc), POINTER :: ModelSpc(:) INTEGER :: nModelSpc INTEGER :: nModelAdv + INTEGER :: hcoLogLUN ! LUN for HEMCO_Config.rc LogFile + INTEGER :: stdLogLUN ! Other LUN, e.g. stdout or parent log CHARACTER(LEN=255) :: MetField CHARACTER(LEN=255) :: GridRes LOGICAL :: ConfigFileRead = .FALSE. - LOGICAL :: amIRoot ! Is this the root CPU? + LOGICAL :: amIRoot ! Is this the root CPU? + LOGICAL :: doVerbose ! Is this CPU verbose? END TYPE ConfigObj !------------------------------------------------------------------------ diff --git a/src/Core/hco_unit_mod.F90 b/src/Core/hco_unit_mod.F90 index 640f00c5..c3c58f0a 100644 --- a/src/Core/hco_unit_mod.F90 +++ b/src/Core/hco_unit_mod.F90 @@ -520,7 +520,7 @@ SUBROUTINE HCO_UNIT_GetMassScal( HcoConfig, unt, MW, Scal ) ELSE MSG = 'Cannot determine unit conversion factor for mass - ' // & 'species molecular weight is not defined!' - CALL HCO_MSG(HcoConfig%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoConfig%hcoLogLUN ) RETURN ENDIF ENDIF diff --git a/src/Core/hco_vertgrid_mod.F90 b/src/Core/hco_vertgrid_mod.F90 index cd8826d8..6d3b61b9 100644 --- a/src/Core/hco_vertgrid_mod.F90 +++ b/src/Core/hco_vertgrid_mod.F90 @@ -259,13 +259,13 @@ SUBROUTINE HCO_VertGrid_Define( HcoConfig, zGrid, nz, Ap, Bp, RC ) ENDIF ! Verbose - IF ( HcoConfig%amIRoot .AND. HCO_IsVerb( HcoConfig%Err ) ) THEN + IF ( HcoConfig%amIRoot .AND. HcoConfig%doVerbose ) THEN WRITE(MSG,*) ' HEMCO vertical sigma-hybrid coordinates: ' - CALL HCO_MSG(HcoConfig%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoConfig%hcoLogLUN ) WRITE(MSG,*) 'Ap [Pa] (first and last): ', zGrid%Ap(1), zGrid%Ap(nz+1) - CALL HCO_MSG(HcoConfig%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoConfig%hcoLogLUN ) WRITE(MSG,*) 'Bp [unitless] (first and last): ', zGrid%Bp(1), zGrid%Bp(nz+1) - CALL HCO_MSG(HcoConfig%Err,MSG,SEP2='-') + CALL HCO_MSG( msg, SEP2='-', LUN=HcoConfig%hcoLogLUN ) ENDIF ! Return w/ success diff --git a/src/Core/hcoio_messy_mod.F90 b/src/Core/hcoio_messy_mod.F90 index 54cf38a5..0eb1d9ef 100644 --- a/src/Core/hcoio_messy_mod.F90 +++ b/src/Core/hcoio_messy_mod.F90 @@ -178,7 +178,7 @@ SUBROUTINE HCO_MESSY_REGRID ( HcoState, NcArr, & ArrOut => NULL() ! verbose? - verb = HCO_IsVerb( HcoState%Config%Err ) + verb = HcoState%Config%doVerbose ! Horizontal dimension of input data NXIN = SIZE(NcArr,1) @@ -292,11 +292,11 @@ SUBROUTINE HCO_MESSY_REGRID ( HcoState, NcArr, & ! verbose mode IF ( verb ) THEN MSG = 'Do MESSy regridding: ' // TRIM(Lct%Dct%cName) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) ' - SameGrid ? ', SameGrid - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) ' - Model levels ? ', IsModelLev - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF !----------------------------------------------------------------- @@ -326,7 +326,7 @@ SUBROUTINE HCO_MESSY_REGRID ( HcoState, NcArr, & IF ( SameGrid ) THEN MSG = 'Input grid seems to match output grid. ' // & 'No regridding is performed: ' // TRIM(Lct%Dct%cName) - CALL HCO_WARNING( HcoState%Config%Err, MSG, RC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG ) ! For every time slice... DO I = 1, NTIME @@ -408,13 +408,13 @@ SUBROUTINE HCO_MESSY_REGRID ( HcoState, NcArr, & rg_type(:) = RG_IDX IF ( verb ) THEN MSG = ' - Remap as index data.' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ELSE rg_type(:) = RG_INT IF ( verb ) THEN MSG = ' - Remap as concentration data.' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF diff --git a/src/Core/hcoio_read_mapl_mod.F90 b/src/Core/hcoio_read_mapl_mod.F90 index 192d795e..4172158e 100644 --- a/src/Core/hcoio_read_mapl_mod.F90 +++ b/src/Core/hcoio_read_mapl_mod.F90 @@ -116,9 +116,9 @@ SUBROUTINE HCOIO_Read( HcoState, Lct, RC ) Ptr2D => NULL() ! Verbose? - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN MSG = 'Reading from ExtData: ' // TRIM(Lct%Dct%Dta%ncFile) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF !----------------------------------------------------------------- diff --git a/src/Core/hcoio_read_std_mod.F90 b/src/Core/hcoio_read_std_mod.F90 index 76f35994..bec35acd 100644 --- a/src/Core/hcoio_read_std_mod.F90 +++ b/src/Core/hcoio_read_std_mod.F90 @@ -267,9 +267,9 @@ SUBROUTINE HCOIO_Read( HcoState, Lct, RC ) NY = HcoState%NY ! Verbose - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Processing container: ', TRIM(Lct%Dct%cName) - CALL HCO_MSG( HcoState%Config%Err, MSG, SEP1='-' ) + CALL HCO_MSG( MSG, SEP1='-', LUN=HcoState%Config%hcoLogLUN ) ENDIF ! If the file has cycle flag "E" (e.g. it's a restart file), then we will @@ -285,9 +285,9 @@ SUBROUTINE HCOIO_Read( HcoState, Lct, RC ) ! Print a warning message only once IF ( doPrintWarning ) THEN doPrintWarning = .FALSE. - MSG = 'No further attempts will be made to read file: ' // & + MSG = 'File with cycle flag E: ' // & TRIM( Lct%Dct%Dta%NcFile ) - CALL HCO_WARNING ( HcoState%Config%Err, MSG, RC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG ) ENDIF ! Return without reading @@ -336,7 +336,7 @@ SUBROUTINE HCOIO_Read( HcoState, Lct, RC ) CALL FileData_Cleanup( Lct%Dct%Dta, DeepClean=.FALSE. ) MSG = 'No valid file found for current simulation time - data '// & 'will be ignored for time being - ' // TRIM(Lct%Dct%cName) - CALL HCO_WARNING ( HcoState%Config%Err, MSG, RC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG ) CALL HCO_LEAVE ( HcoState%Config%Err, RC ) RETURN ENDIF @@ -377,10 +377,10 @@ SUBROUTINE HCOIO_Read( HcoState, Lct, RC ) TRIM(srcFile) // ' - Cannot get field ' // & TRIM(Lct%Dct%cName) // '. Please check file name ' // & 'and time (incl. time range flag) in the config. file' - CALL HCO_Warning( HcoState%Config%Err, MSG, RC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG ) ! Write a msg to stdout (NOT FOUND) - WRITE( 6, 300 ) TRIM( srcFile ) + WRITE( HcoState%Config%stdLogLUN, 300 ) TRIM( srcFile ) 300 FORMAT( 'HEMCO: REQUIRED FILE NOT FOUND ', a ) ! If MustFind flag is not enabled, ignore this field and return @@ -390,10 +390,10 @@ SUBROUTINE HCOIO_Read( HcoState, Lct, RC ) MSG = 'No valid file found for current simulation time - '// & 'data will be ignored for time being - ' // & TRIM(Lct%Dct%cName) - CALL HCO_WARNING ( HcoState%Config%Err, MSG, RC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG ) ! Write a msg to stdout (OPTIONAL) - WRITE( 6, 310 ) TRIM( srcFile ) + WRITE( HcoState%Config%stdLogLUN, 310 ) TRIM( srcFile ) 310 FORMAT( 'HEMCO: OPTIONAL FILE NOT FOUND ', a ) ENDIF @@ -404,16 +404,16 @@ SUBROUTINE HCOIO_Read( HcoState, Lct, RC ) TRIM(srcFile) // ' - Cannot get field ' // & TRIM(Lct%Dct%cName) // '. Please check file name ' // & 'and time (incl. time range flag) in the config. file' - CALL HCO_WARNING ( HcoState%Config%Err, MSG, RC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG ) ! Write a msg to stdout (NOT FOUND) - WRITE( 6, 300 ) TRIM(srcFile) + WRITE( HcoState%Config%stdLogLUN, 300 ) TRIM(srcFile) ENDIF ELSE - ! Write a mesage to stdout (HEMCO: Opening...) - WRITE( 6, 100 ) TRIM( srcFile ) + ! Write a message to stdout (HEMCO: Opening...) + IF ( HcoState%Config%amIRoot ) WRITE( HcoState%Config%stdLogLUN, 100 ) TRIM( srcFile ) ENDIF @@ -451,9 +451,9 @@ SUBROUTINE HCOIO_Read( HcoState, Lct, RC ) IF ( ncLun > 0 ) THEN ! Verbose mode - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Reading from existing stream: ', TRIM(srcFile) - CALL HCO_MSG( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ! To open a new file: @@ -461,14 +461,16 @@ SUBROUTINE HCOIO_Read( HcoState, Lct, RC ) CALL NC_OPEN ( TRIM(srcFile), ncLun ) ! Verbose mode - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Opening file: ', TRIM(srcFile) - CALL HCO_MSG( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF +#ifndef MODEL_CESM ! Also write to standard output - WRITE( 6, 100 ) TRIM( srcFile ) - 100 FORMAT( 'HEMCO: Opening ', a ) + IF ( HcoState%Config%amIRoot ) WRITE( HcoState%Config%stdLogLUN, 100 ) TRIM( srcFile ) +#endif +100 FORMAT( 'HEMCO: Opening ', a ) ! This is now the file in archive HcoState%ReadLists%FileInArchive = TRIM(srcFile) @@ -526,7 +528,7 @@ SUBROUTINE HCOIO_Read( HcoState, Lct, RC ) CALL FileData_Cleanup( Lct%Dct%Dta, DeepClean=.FALSE.) MSG = 'Simulation time is outside of time range provided for '//& TRIM(Lct%Dct%cName) // ' - field is ignored for the time being!' - CALL HCO_WARNING ( HcoState%Config%Err, MSG, RC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG ) DoReturn = .TRUE. CALL HCO_LEAVE ( HcoState%Config%Err, RC ) ENDIF @@ -558,7 +560,7 @@ SUBROUTINE HCOIO_Read( HcoState, Lct, RC ) CALL FileData_Cleanup( Lct%Dct%Dta, DeepClean=.FALSE. ) MSG = 'Cannot find field ' // TRIM(Lct%Dct%cName) // & '. Will be ignored for time being.' - CALL HCO_WARNING ( HcoState%Config%Err, MSG, RC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG ) CALL HCO_LEAVE ( HcoState%Config%Err, RC ) RETURN ENDIF @@ -761,14 +763,14 @@ SUBROUTINE HCOIO_Read( HcoState, Lct, RC ) ENDIF ! Verbose - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Will read vertical levels ', lev1, ' to ', lev2 - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF - IF ( HCO_IsVerb( HcoState%Config%Err ) .AND. IsModelLevel ) THEN + IF ( HcoState%Config%doVerbose .AND. IsModelLevel ) THEN WRITE(MSG,*) 'Data is assumed to already be on the model level grid' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! For 2D data, set lev1 and lev2 to zero. This will ignore @@ -795,9 +797,9 @@ SUBROUTINE HCOIO_Read( HcoState, Lct, RC ) ! ---------------------------------------------------------------- ! Verbose mode - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Reading variable ', TRIM(Lct%Dct%Dta%ncPara) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF CALL NC_READ_ARR( fID = ncLun, & @@ -931,21 +933,21 @@ SUBROUTINE HCOIO_Read( HcoState, Lct, RC ) ncArr = (wgt1 * ncArr) + (wgt2 * ncArr2) ! Verbose - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN MSG = 'Interpolated data between two files:' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) MSG = '- File 1: ' // TRIM(srcFile) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) ' Time stamp used: ', YMDhma - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) ' Applied weight: ', wgt1 - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) MSG = '- File 2: ' // TRIM(srcFile2) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) ' Time stamp used: ', YMDhm1 - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) ' Applied weight: ', wgt2 - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! Cleanup @@ -1074,9 +1076,9 @@ SUBROUTINE HCOIO_Read( HcoState, Lct, RC ) ncArr = ncArr / REAL(nYears,sp) ! Verbose - IF ( HcoState%amIRoot .AND. HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%amIRoot .AND. HcoState%Config%doVerbose ) THEN WRITE(MSG,110) TRIM(Lct%Dct%cName), Yr1, Yr2 - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF 110 FORMAT( 'Field ', a, ': Average data over years ', I4.4, ' to ', I4.4 ) @@ -1131,17 +1133,21 @@ SUBROUTINE HCOIO_Read( HcoState, Lct, RC ) ENDIF ! Prompt a warning if thisUnit is not recognized as unitless. - IF ( Flag /= 0 ) THEN + ! Only do this if verbose since unitless is used to force bypass of unit conversion, + ! such as for reading non-emissions data, .e.g. restart file concentrations. + ! Print this message to HEMCO log (if using) rather than standard out to avoid + ! cluttering the regular log file. + IF ( Flag /= 0 .AND. HcoState%Config%doVerbose ) THEN MSG = 'Data is treated as unitless, but file attribute suggests ' // & - 'it is not: ' // TRIM(thisUnit) // '. File: ' // TRIM(srcFile) - CALL HCO_WARNING( HcoState%Config%Err, MSG, RC ) + 'it is not: ' // TRIM(thisUnit) // '. File: ' // TRIM(srcFile) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG, LUN=HcoState%Config%hcoLogLUN) ENDIF ! Verbose mode - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Based on srcUnit attribute (', TRIM(Lct%Dct%Dta%OrigUnit), & '), no unit conversion is performed.' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! Convert to HEMCO units in all other cases. @@ -1149,17 +1155,19 @@ SUBROUTINE HCOIO_Read( HcoState, Lct, RC ) ! For zero unit tolerance, make sure that thisUnit matches ! with unit set in configuration file. For higher unit - ! tolerances, prompt a level 3 warning. + ! tolerances, prompt a warning. Only print the warning + ! if verbose since most instances of unit mismatches are normal, + ! Print this message to HEMCO log (if using) rather than standard out to avoid + ! cluttering the regular log file. IF ( TRIM(Lct%Dct%Dta%OrigUnit) /= TRIM(thisUnit) ) THEN MSG = 'File units do not match: ' // TRIM(thisUnit) // & - ' vs. ' // TRIM(Lct%Dct%Dta%OrigUnit) // & - '. File: ' // TRIM(srcFile) - + ' vs. ' // TRIM(Lct%Dct%Dta%OrigUnit) // & + '. File: ' // TRIM(srcFile) IF ( UnitTolerance == 0 ) THEN CALL HCO_ERROR( MSG, RC ) RETURN - ELSE - CALL HCO_WARNING( HcoState%Config%Err, MSG, RC ) + ELSEIF ( HcoState%Config%doVerbose ) THEN + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG, LUN=HcoState%Config%hcoLogLUN ) ENDIF ENDIF @@ -1192,11 +1200,11 @@ SUBROUTINE HCOIO_Read( HcoState, Lct, RC ) ENDIF ! Verbose mode - IF ( HcoState%amIRoot .and. HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%amIRoot .and. HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Unit conversion settings: ' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) '- Year, month : ', ncYr, ncMt - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF CALL HCO_UNIT_CHANGE( & @@ -1218,17 +1226,17 @@ SUBROUTINE HCOIO_Read( HcoState, Lct, RC ) ! Verbose mode IF ( UnitFactor /= 1.0_hp ) THEN - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Data was in units of ', TRIM(thisUnit), & ' - converted to HEMCO units by applying ', & 'scale factor ', UnitFactor - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ELSE - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Data was in units of ', TRIM(thisUnit), & ' - unit conversion factor is ', UnitFactor - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF @@ -1248,7 +1256,7 @@ SUBROUTINE HCOIO_Read( HcoState, Lct, RC ) ncArr = ncArr * HcoState%TS_EMIS MSG = 'Data converted from kg/m3/s to kg/m3: ' // & TRIM(Lct%Dct%cName) // ': ' // TRIM(thisUnit) - CALL HCO_WARNING( HcoState%Config%Err, MSG, RC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG ) ! Unitless data ELSEIF ( AreaFlag == -1 .AND. TimeFlag == -1 ) THEN @@ -1263,7 +1271,7 @@ SUBROUTINE HCOIO_Read( HcoState, Lct, RC ) ncArr = ncArr / HcoState%TS_EMIS MSG = 'Data converted from kg/m2 to kg/m2/s: ' // & TRIM(Lct%Dct%cName) // ': ' // TRIM(thisUnit) - CALL HCO_WARNING( HcoState%Config%Err, MSG, RC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG ) ! Emission data that is not per area (i.e. kg/s) needs to be converted ! to per area manually. @@ -1356,9 +1364,9 @@ SUBROUTINE HCOIO_Read( HcoState, Lct, RC ) IF ( nlev > 1 ) THEN UseMESSy = .TRUE. - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) ' ==> WRF/CESM: Always forcing MESSy regridding for number of verticals', nlev, IsModelLevel - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF #endif @@ -1374,9 +1382,9 @@ SUBROUTINE HCOIO_Read( HcoState, Lct, RC ) ! Use MESSy regridding !----------------------------------------------------------------- IF ( UseMESSy ) THEN - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) ' ==> Use MESSy regridding (NCREGRID)' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF #if !defined( MODEL_CESM ) && !defined( MODEL_WRF ) @@ -1415,9 +1423,9 @@ SUBROUTINE HCOIO_Read( HcoState, Lct, RC ) ! Ported from the original WRF-GC implementation (hplin, 5/27/20) !-------------------------------------------------------------- IF ( nlev > 1 .AND. IsModelLevel ) THEN - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) ' ==> WRF/CESM: Writing in fixed sigma coordinates for GEOS-Chem levels', nlon, nlat - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ALLOCATE(SigEdge(nlon, nlat, nlev)) @@ -1508,9 +1516,9 @@ SUBROUTINE HCOIO_Read( HcoState, Lct, RC ) ! Use map_a2a regridding !----------------------------------------------------------------- ELSE - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) ' ==> Use map_a2a regridding' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF CALL REGRID_MAPA2A ( HcoState, NcArr, LonEdge, LatEdge, Lct, RC ) diff --git a/src/Core/hcoio_util_mod.F90 b/src/Core/hcoio_util_mod.F90 index a29537ae..1a8c28ce 100644 --- a/src/Core/hcoio_util_mod.F90 +++ b/src/Core/hcoio_util_mod.F90 @@ -157,7 +157,7 @@ SUBROUTINE GET_TIMEIDX( HcoState, Lct, & CALL HCO_ERROR( 'ERROR 0', RC, THISLOC=LOC ) RETURN ENDIF - verb = HCO_IsVerb( HcoState%Config%Err ) + verb = HcoState%Config%doVerbose ! Initialize local variables for safety's sake nTime = 0 @@ -197,17 +197,17 @@ SUBROUTINE GET_TIMEIDX( HcoState, Lct, & IF ( (refYear <= 1900) .AND. (nTime > 0) ) THEN MSG = 'ncdf reference year is prior to 1901 - ' // & 'time stamps may be wrong!' - CALL HCO_WARNING ( HcoState%Config%Err, MSG, RC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG ) ENDIF ! verbose mode IF ( verb ) THEN write(MSG,*) 'Number of time slices found: ', nTime - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) IF ( nTime > 0 ) THEN write(MSG,*) 'Time slice range : ', & availYMDhm(1), availYMDhm(nTime) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF @@ -279,7 +279,7 @@ SUBROUTINE GET_TIMEIDX( HcoState, Lct, & ! verbose mode IF ( verb ) THEN write(MSG,'(A30,f14.0)') 'preferred datetime: ', prefYMDhm - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! ================================================================ @@ -373,7 +373,7 @@ SUBROUTINE GET_TIMEIDX( HcoState, Lct, & IF ( verb ) THEN write(MSG,'(A30,f14.0)') 'adjusted preferred datetime: ', & prefYMDhm - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! check for time stamp with updated date/time @@ -411,7 +411,7 @@ SUBROUTINE GET_TIMEIDX( HcoState, Lct, & ! verbose mode IF ( verb ) THEN WRITE(MSG,*) 'Data is 3-hourly. Entire day will be read.' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF IF ( Lct%Dct%Dta%ncHrs(1) == -1 .AND. nTime == 24 ) THEN @@ -421,7 +421,7 @@ SUBROUTINE GET_TIMEIDX( HcoState, Lct, & ! verbose mode IF ( verb ) THEN WRITE(MSG,*) 'Data is hourly. Entire day will be read.' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF @@ -608,33 +608,33 @@ SUBROUTINE GET_TIMEIDX( HcoState, Lct, & ! verbose mode IF ( verb ) THEN WRITE(MSG,'(A30,I14)') 'selected tidx1: ', tidx1 - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) IF ( tidx1 > 0 ) THEN WRITE(MSG,'(A30,f14.0)') 'corresponding datetime 1: ', & availYMDhm(tidx1) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) IF ( wgt1 >= 0.0_sp ) THEN WRITE(MSG,*) 'weight1: ', wgt1 - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF IF ( (tidx2 /= tidx1) ) THEN WRITE(MSG,'(A30,I14)') 'selected tidx2: ', tidx2 - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,'(A30,f14.0)') 'corresponding datetime 2: ', & availYMDhm(tidx2) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) IF ( wgt1 >= 0.0_sp ) THEN WRITE(MSG,*) 'weight2: ', wgt2 - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF WRITE(MSG,'(A30,I14)') 'assigned delta t [h]: ', Lct%Dct%Dta%DeltaT - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) 'local time? ', Lct%Dct%Dta%IsLocTime - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! ---------------------------------------------------------------- @@ -1118,7 +1118,7 @@ SUBROUTINE GetIndex2Interp ( HcoState, Lct, & !================================================================= ! Verbose mode? - verb = HCO_IsVerb( HcoState%Config%Err ) + verb = HcoState%Config%doVerbose ! If the originally wanted datetime was below the available data ! range, set all weights to the first index. @@ -1214,7 +1214,7 @@ SUBROUTINE GetIndex2Interp ( HcoState, Lct, & 'slice. Interpolation will be performed from ', & availYMDhm(tidx1), ' to ', availYMDhm(tidx2), '. Data ', & 'container: ', TRIM(Lct%Dct%cName) - CALL HCO_WARNING(HcoState%Config%Err, MSG, RC, THISLOC=LOC) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG, THISLOC=LOC) ENDIF ! Calculate weights wgt1 and wgt2 to be given to slice 1 and @@ -1462,7 +1462,7 @@ SUBROUTINE Normalize_Area( HcoState, Array, nlon, LatEdge, FN, RC ) ! Prompt a warning WRITE(MSG,*) 'No area unit found in ' // TRIM(FN) // ' - convert to m-2!' - CALL HCO_WARNING ( HcoState%Config%Err, MSG, RC, THISLOC=LOC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG, THISLOC=LOC ) ! Leave w/ success RC = HCO_SUCCESS @@ -1552,9 +1552,9 @@ SUBROUTINE SrcFile_Parse ( HcoState, Lct, srcFile, FOUND, RC, & srcFile = Lct%Dct%Dta%ncFile ! verbose mode - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Parsing source file and replacing tokens' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! Get preferred dates (to be passed to parser) @@ -2084,11 +2084,11 @@ SUBROUTINE GetArbDimIndex( HcoState, Lun, Lct, ArbIdx, RC ) ENDIF ! Verbose - IF ( HcoState%amIRoot .AND. HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%amIRoot .AND. HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Additional dimension ', TRIM(Lct%Dct%Dta%ArbDimName), & ' in ', TRIM(Lct%Dct%Dta%ncFile), ': use index ', & ArbIdx, ' (set: ', Lct%Dct%Dta%ArbDimVal, ')' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! Return w/ success @@ -2234,14 +2234,14 @@ SUBROUTINE HCOIO_ReadCountryValues ( HcoState, Lct, RC ) Vals => NULL() ! verbose mode? - Verb = HCO_IsVerb( HcoState%Config%Err ) + Verb = HcoState%Config%doVerbose ! Verbose IF ( Verb ) THEN MSG = 'Use country-specific values for ' // TRIM(Lct%Dct%cName) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) MSG = '- Source file: ' // TRIM(Lct%Dct%Dta%ncFile) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! Open file @@ -2292,9 +2292,9 @@ SUBROUTINE HCOIO_ReadCountryValues ( HcoState, Lct, RC ) CIDS = NINT(CNTR) ! Verbose - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN MSG = '- Use ID mask ' // TRIM(LINE) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! Go to next line @@ -2358,9 +2358,9 @@ SUBROUTINE HCOIO_ReadCountryValues ( HcoState, Lct, RC ) ENDDO ! Verbose - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) '- Obtained values for ',TRIM(CNT),' ==> ID:', CID - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! Cleanup @@ -2382,7 +2382,7 @@ SUBROUTINE HCOIO_ReadCountryValues ( HcoState, Lct, RC ) Lct%Dct%Dta%IsLocTime = .TRUE. MSG = 'Data assigned to mask regions will be treated in local time: '//& TRIM(Lct%Dct%cName) - CALL HCO_WARNING( HcoState%Config%Err, MSG, RC, THISLOC=LOC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG, THISLOC=LOC ) ENDIF ! Cleanup @@ -2457,9 +2457,9 @@ SUBROUTINE HCOIO_ReadFromConfig( HcoState, Lct, RC ) Vals => NULL() ! Verbose - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG, *) 'Read from config file: ', TRIM(Lct%Dct%cName) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF !------------------------------------------------------------------- @@ -2542,7 +2542,7 @@ SUBROUTINE HCOIO_ReadFromConfig( HcoState, Lct, RC ) Lct%Dct%Dta%IsLocTime = .TRUE. MSG = 'Scale factors read from file are treated as local time: '// & TRIM(Lct%Dct%cName) - CALL HCO_WARNING( HcoState%Config%Err, MSG, RC, THISLOC=LOC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG, THISLOC=LOC ) ENDIF ENDIF @@ -2948,19 +2948,19 @@ SUBROUTINE GetDataVals ( HcoState, Lct, ValStr, Vals, RC ) FileArr(1,1,1,:) = 0.0_hp MSG = 'Base field outside of range - set to zero: ' // & TRIM(Lct%Dct%cName) - CALL HCO_WARNING ( HcoState%Config%Err, MSG, RC, THISLOC=LOC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG, THISLOC=LOC ) #if defined( MODEL_GEOS ) ELSEIF ( Lct%Dct%DctType == HCO_DCTTYPE_MASK ) THEN FileArr(1,1,1,:) = 0.0_hp MSG = 'Mask outside of range - set to zero: ' // & TRIM(Lct%Dct%cName) - CALL HCO_WARNING ( HcoState%Config%Err, MSG, RC, THISLOC=LOC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG, THISLOC=LOC ) #endif ELSE FileArr(1,1,1,:) = 1.0_hp MSG = 'Scale factor outside of range - set to one: ' // & TRIM(Lct%Dct%cName) - CALL HCO_WARNING ( HcoState%Config%Err, MSG, RC, THISLOC=LOC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG, THISLOC=LOC ) ENDIF ELSE FileArr(1,1,1,:) = FileVals(IDX1:IDX2) @@ -2986,17 +2986,17 @@ SUBROUTINE GetDataVals ( HcoState, Lct, ValStr, Vals, RC ) ! Verbose mode IF ( UnitFactor /= 1.0_hp ) THEN - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Data was in units of ', TRIM(Lct%Dct%Dta%OrigUnit), & ' - converted to HEMCO units by applying ', & 'scale factor ', UnitFactor - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ELSE - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Data was in units of ', TRIM(Lct%Dct%Dta%OrigUnit), & ' - unit conversion factor is ', UnitFactor - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF @@ -3010,7 +3010,7 @@ SUBROUTINE GetDataVals ( HcoState, Lct, ValStr, Vals, RC ) FileArr = FileArr * HcoState%TS_EMIS MSG = 'Data converted from kg/m3/s to kg/m3: ' // & TRIM(Lct%Dct%cName) // ': ' // TRIM(Lct%Dct%Dta%OrigUnit) - CALL HCO_WARNING ( HcoState%Config%Err, MSG, RC, THISLOC=LOC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG, THISLOC=LOC ) ! ... emissions or unitless ... ELSEIF ( (AreaFlag == -1 .AND. TimeFlag == -1) .OR. & @@ -3428,9 +3428,9 @@ SUBROUTINE ReadMath( HcoState, Lct, ValStr, Vals, N, RC ) Vals(I) = Val ! Verbose - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Evaluated function: ',TRIM(func),' --> ', Val - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDDO ELSE diff --git a/src/Core/hcoio_write_std_mod.F90 b/src/Core/hcoio_write_std_mod.F90 index 14b7688f..2557970d 100644 --- a/src/Core/hcoio_write_std_mod.F90 +++ b/src/Core/hcoio_write_std_mod.F90 @@ -351,13 +351,13 @@ SUBROUTINE HCOIO_Write( HcoState, ForceWrite, & ENDIF ! verbose - IF ( HCO_IsVerb( HcoState%Config%Err ) .AND. PS==1 ) THEN + IF ( HcoState%Config%doVerbose .AND. PS==1 ) THEN MSG = 'Write diagnostics into file '//TRIM(ncFile) - CALL HCO_MSG( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF - IF ( HCO_IsVerb( HcoState%Config%Err ) .AND. PS==1 ) THEN + IF ( HcoState%Config%doVerbose .AND. PS==1 ) THEN WRITE(MSG,*) '--> write level dimension: ', .NOT.NoLevDim - CALL HCO_MSG( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ! Check if file already exists. If so, add new diagnostics to this file @@ -614,7 +614,7 @@ SUBROUTINE HCOIO_Write( HcoState, ForceWrite, & ELSE MSG = 'Unrecognized output reference time, will ' // & 'assume `days since`: '//TRIM(timeunit) - CALL HCO_WARNING( HcoState%Config%Err, MSG, RC, THISLOC=LOC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG, THISLOC=LOC ) ENDIF ! Special case where we have an old file but it has the same time stamp: in @@ -788,9 +788,9 @@ SUBROUTINE HCOIO_Write( HcoState, ForceWrite, & ENDIF ! verbose - IF ( HCO_IsVerb(HcoState%Config%Err ) .AND. PS==1 ) THEN + IF ( HcoState%Config%doVerbose .AND. PS==1 ) THEN MSG = '--- Added diagnostics: '//TRIM(myName) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF ENDDO diff --git a/src/Extensions/hcox_custom_mod.F90 b/src/Extensions/hcox_custom_mod.F90 index fb608751..baffee89 100644 --- a/src/Extensions/hcox_custom_mod.F90 +++ b/src/Extensions/hcox_custom_mod.F90 @@ -317,18 +317,14 @@ SUBROUTINE HCOX_Custom_Init( HcoState, ExtName, ExtState, RC ) ! Write the name of the extension regardless of the verbose setting msg = 'Using HEMCO extension: Custom (custom emissions module)' - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN - CALL HCO_Msg( HcoState%Config%Err, sep1='-' ) ! with separator - ELSE - CALL HCO_Msg( msg, verb=.TRUE. ) ! w/o separator - ENDIF + CALL HCO_Msg( msg, sep1='-', LUN=HcoState%Config%hcoLogLUN ) ! with separator ! Write all other messages as debug printout only MSG = 'Use the following species (Name: HcoID):' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) DO N = 1, nSpc WRITE(MSG,*) TRIM(SpcNames(N)), ':', HcoIDs(N) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDDO ENDIF diff --git a/src/Extensions/hcox_dustdead_mod.F b/src/Extensions/hcox_dustdead_mod.F index 928411e5..0c1dcdfe 100644 --- a/src/Extensions/hcox_dustdead_mod.F +++ b/src/Extensions/hcox_dustdead_mod.F @@ -719,34 +719,30 @@ SUBROUTINE HCOX_DustDead_Init ( HcoState, ExtName, ! Write the name of the extension regardless of the verbose setting msg = 'Using HEMCO extension: DustDead (dust mobilization)' - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN - CALL HCO_Msg( HcoState%Config%Err, msg, sep1='-' ) ! with separator - ELSE - CALL HCO_Msg( msg, verb=.TRUE. ) ! w/o separator - ENDIF + CALL HCO_MSG( msg, sep1='-', LUN=HcoState%Config%hcoLogLUN ) ! with separator ! Write all other messages as debug printout only IF ( Inst%ExtNrAlk > 0 ) THEN MSG = 'Use dust alkalinity option' - CALL HCO_MSG(HcoState%Config%Err,MSG, SEP1='-' ) + CALL HCO_MSG(MSG, SEP1='-',LUN=HcoState%Config%hcoLogLUN ) ENDIF MSG = 'Use the following species (Name: HcoID):' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) DO N = 1, nSpc WRITE(MSG,*) TRIM(SpcNames(N)), ':', Inst%HcoIDs(N) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDDO IF ( Inst%ExtNrAlk > 0 ) THEN DO N = 1, nSpcAlk WRITE(MSG,*) TRIM(SpcNamesAlk(N)), ':', Inst%HcoIDsAlk(N) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDDO ENDIF WRITE(MSG,*) 'Global mass flux tuning factor: ', & Inst%FLX_MSS_FDG_FCT - CALL HCO_MSG(HcoState%Config%Err,MSG,SEP2='-') + CALL HCO_MSG(MSG,SEP2='-',LUN=HcoState%Config%hcoLogLUN) ENDIF @@ -5868,7 +5864,9 @@ SUBROUTINE ReadTuningFactor(HcoState, TuningTable, FCT, RC ) FNDLABEL = TRIM(CSLABEL) IF ( .NOT. HcoState%Grid%AREA_M2%Alloc ) THEN MSG = 'Warning: AREA_M2 not found, will use default number' - CALL HCO_WARNING( MSG, RC, .TRUE., LOC ) + IF ( HcoState%Config%doVerbose ) THEN + CALL HCO_WARNING( MSG, THISLOC=LOC ) + ENDIF ELSE AM2 = SUM(HcoState%Grid%AREA_M2%Val)/(HcoState%NX*HcoState%NY) RES = SQRT(AM2) @@ -5924,13 +5922,13 @@ SUBROUTINE ReadTuningFactor(HcoState, TuningTable, FCT, RC ) ! Verbose IF ( HcoState%amIRoot ) THEN MSG = 'Read dust tuning factor from '//TRIM(TuningTable) - CALL HCO_MSG(HcoState%Config%Err,MSG, SEP1='-' ) + CALL HCO_MSG(MSG, SEP1='-',LUN=HcoState%Config%hcoLogLUN ) MSG = 'Model resolution: '//TRIM(CSLABEL) - CALL HCO_MSG(HcoState%Config%Err,MSG, SEP1='-' ) + CALL HCO_MSG(MSG, SEP1='-',LUN=HcoState%Config%hcoLogLUN ) MSG = 'Resolution label in file: '//TRIM(FNDLABEL) - CALL HCO_MSG(HcoState%Config%Err,MSG, SEP1='-' ) + CALL HCO_MSG(MSG, SEP1='-',LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) 'Scale factor: ',FCT - CALL HCO_MSG(HcoState%Config%Err,MSG, SEP1='-' ) + CALL HCO_MSG(MSG, SEP1='-',LUN=HcoState%Config%hcoLogLUN ) ENDIF ! Leave diff --git a/src/Extensions/hcox_dustginoux_mod.F90 b/src/Extensions/hcox_dustginoux_mod.F90 index 8eb206ad..02b60ac9 100644 --- a/src/Extensions/hcox_dustginoux_mod.F90 +++ b/src/Extensions/hcox_dustginoux_mod.F90 @@ -563,33 +563,29 @@ SUBROUTINE HcoX_DustGinoux_Init( HcoState, ExtName, ExtState, RC ) ! Write the name of the extension regardless of the verbose setting msg = 'Using HEMCO extension: DustGinoux (dust mobilization)' - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN - CALL HCO_Msg( HcoState%Config%Err, sep1='-' ) ! with separator - ELSE - CALL HCO_Msg( msg, verb=.TRUE. ) ! w/o separator - ENDIF + CALL HCO_Msg( msg, sep1='-', LUN=HcoState%Config%hcoLogLUN ) ! with separator ! Write all other messages as debug printout only IF ( Inst%ExtNrAlk > 0 ) THEN MSG = 'Use dust alkalinity option' - CALL HCO_MSG(HcoState%Config%Err,MSG, SEP1='-' ) + CALL HCO_MSG(MSG, SEP1='-', LUN=HcoState%Config%hcoLogLUN ) ENDIF MSG = 'Use the following species (Name: HcoID):' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) DO N = 1, nSpc WRITE(MSG,*) TRIM(SpcNames(N)), ':', Inst%HcoIDs(N) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDDO IF ( Inst%ExtNrAlk > 0 ) THEN DO N = 1, nSpcAlk WRITE(MSG,*) TRIM(SpcNamesAlk(N)), ':', Inst%HcoIDsAlk(N) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDDO ENDIF WRITE(MSG,*) 'Global mass flux tuning factor: ', Inst%CH_DUST - CALL HCO_MSG(HcoState%Config%Err,MSG,SEP2='-') + CALL HCO_MSG(MSG,SEP2='-',LUN=HcoState%Config%hcoLogLUN) ENDIF ! Allocate vectors holding bin-specific informations diff --git a/src/Extensions/hcox_finn_mod.F90 b/src/Extensions/hcox_finn_mod.F90 index 4d13a4e3..229580b1 100644 --- a/src/Extensions/hcox_finn_mod.F90 +++ b/src/Extensions/hcox_finn_mod.F90 @@ -345,7 +345,7 @@ SUBROUTINE HCOX_FINN_Run( ExtState, HcoState, RC ) cYYYY=cYYYY, cMM=cMM, cDD=cDD, RC=RC ) IF ( RC/=HCO_SUCCESS ) RETURN WRITE(MSG, 100) cYYYY, cMM, cDD - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) 100 FORMAT( 'FINN daily emissions for year, month, day: ', & i4, '/', i2.2, '/', i2.2 ) ENDIF @@ -355,7 +355,7 @@ SUBROUTINE HCOX_FINN_Run( ExtState, HcoState, RC ) cYYYY=cYYYY, cMM=cMM, LMD=NDAYS, RC=RC) IF ( RC/=HCO_SUCCESS ) RETURN WRITE(MSG, 110) cYYYY, cMM - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) 110 FORMAT( 'FINN monthly emissions for year, month: ', & i4, '/', i2.2 ) ENDIF @@ -531,7 +531,7 @@ SUBROUTINE HCOX_FINN_Run( ExtState, HcoState, RC ) TOTAL = SUM(SpcArr(:,:)*HcoState%Grid%AREA_M2%Val(:,:)) TOTAL = TOTAL * 86400.0_hp * 1e-9_hp WRITE(MSG, 120) HcoState%Spc(HcoID)%SpcName, TOTAL - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) 120 FORMAT( 'SUM biomass ', a4,1x,': ', f11.4,1x,'[Tg]' ) ENDIF ELSE @@ -539,7 +539,7 @@ SUBROUTINE HCOX_FINN_Run( ExtState, HcoState, RC ) TOTAL = SUM(SpcArr(:,:)*HcoState%Grid%AREA_M2%Val(:,:)) TOTAL = TOTAL * NDAYS * 86400.0_hp * 1e-9_hp WRITE(MSG, 130) HcoState%Spc(HcoID)%SpcName, TOTAL - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) 130 FORMAT( 'SUM biomass ', a4,1x,': ', f11.4,1x,'[Tg]' ) ENDIF ENDIF @@ -877,15 +877,11 @@ SUBROUTINE HCOX_FINN_Init( HcoState, ExtName, ExtState, RC ) ! Write the name of the extension regardless of the verbose setting msg = 'Using HEMCO extension: FINN (biomass burning)' - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN - CALL HCO_Msg( HcoState%Config%Err, msg, sep1='-' ) ! with separator - ELSE - CALL HCO_Msg( msg, verb=.TRUE. ) ! w/o separator - ENDIF + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN, sep1='-' ) ! with separator ! Other print statements will only be written as debug output WRITE(MSG,*) ' - Use daily data : ', Inst%UseDay - CALL HCO_MSG(HcoState%Config%Err,MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ! Get HEMCO species IDs of all species specified in configuration file @@ -1016,11 +1012,11 @@ SUBROUTINE HCOX_FINN_Init( HcoState, ExtName, ExtState, RC ) IF ( HcoState%amIRoot ) THEN MSG = ' - FINN species ' // TRIM(Inst%FINN_SPEC_NAME(N)) // & ' will be emitted as ' // TRIM(Inst%SpcNames(Inst%nSpc)) - CALL HCO_MSG(HcoState%Config%Err,MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' --> Uniform scale factor : ', Inst%SpcScal(Inst%nSpc) - CALL HCO_MSG(HcoState%Config%Err,MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' --> Scale field : ', TRIM(Inst%SpcScalFldNme(Inst%nSpc)) - CALL HCO_MSG(HcoState%Config%Err,MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ! Reset variables @@ -1060,7 +1056,7 @@ SUBROUTINE HCOX_FINN_Init( HcoState, ExtName, ExtState, RC ) Inst%FINN_EMFAC(N,:) = AdjFact / EMFAC_IN(M,:) IF ( HcoState%amIRoot ) THEN WRITE( MSG, 200 ) TRIM( Inst%FINN_SPEC_NAME(N)) - CALL HCO_MSG(HcoState%Config%Err,MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF EXIT @@ -1082,7 +1078,7 @@ SUBROUTINE HCOX_FINN_Init( HcoState, ExtName, ExtState, RC ) IS_NMOC = .TRUE. IF ( HcoState%amIRoot ) THEN WRITE( MSG, 201 ) TRIM( Inst%FINN_SPEC_NAME(N) ) - CALL HCO_MSG(HcoState%Config%Err,MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF EXIT ENDIF diff --git a/src/Extensions/hcox_finn_mod.FINNv16 b/src/Extensions/hcox_finn_mod.FINNv16 index db877abb..a9dc6aa7 100644 --- a/src/Extensions/hcox_finn_mod.FINNv16 +++ b/src/Extensions/hcox_finn_mod.FINNv16 @@ -332,7 +332,7 @@ CONTAINS cYYYY=cYYYY, cMM=cMM, cDD=cDD, RC=RC ) IF ( RC/=HCO_SUCCESS ) RETURN WRITE(MSG, 100) cYYYY, cMM, cDD - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) 100 FORMAT( 'FINN daily emissions for year, month, day: ', & i4, '/', i2.2, '/', i2.2 ) ENDIF @@ -342,7 +342,7 @@ CONTAINS cYYYY=cYYYY, cMM=cMM, LMD=NDAYS, RC=RC) IF ( RC/=HCO_SUCCESS ) RETURN WRITE(MSG, 110) cYYYY, cMM - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) 110 FORMAT( 'FINN monthly emissions for year, month: ', & i4, '/', i2.2 ) ENDIF @@ -520,7 +520,7 @@ CONTAINS TOTAL = SUM(SpcArr(:,:)*HcoState%Grid%AREA_M2%Val(:,:)) TOTAL = TOTAL * 86400.0_hp * 1e-9_hp WRITE(MSG, 120) HcoState%Spc(HcoID)%SpcName, TOTAL - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) 120 FORMAT( 'SUM biomass ', a4,1x,': ', f11.4,1x,'[Tg]' ) ENDIF ELSE @@ -528,7 +528,7 @@ CONTAINS TOTAL = SUM(SpcArr(:,:)*HcoState%Grid%AREA_M2%Val(:,:)) TOTAL = TOTAL * NDAYS * 86400.0_hp * 1e-9_hp WRITE(MSG, 130) HcoState%Spc(HcoID)%SpcName, TOTAL - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) 130 FORMAT( 'SUM biomass ', a4,1x,': ', f11.4,1x,'[Tg]' ) ENDIF ENDIF @@ -852,9 +852,9 @@ CONTAINS ! Write to log file IF ( HcoState%amIRoot ) THEN MSG = 'Use FINN extension' - CALL HCO_MSG(HcoState%Config%Err,MSG, SEP1='-' ) + CALL HCO_MSG( MSG, SEP1='-', LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' - Use daily data : ', UseDay - CALL HCO_MSG(HcoState%Config%Err,MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ! Get HEMCO species IDs of all species specified in configuration file @@ -983,11 +983,11 @@ CONTAINS IF ( HcoState%amIRoot ) THEN MSG = ' - FINN species ' // TRIM(FINN_SPEC_NAME(N)) // & ' will be emitted as ' // TRIM(SpcNames(nSpc)) - CALL HCO_MSG(HcoState%Config%Err,MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' --> Uniform scale factor : ', SpcScal(nSpc) - CALL HCO_MSG(HcoState%Config%Err,MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' --> Scale field : ', TRIM(SpcScalFldNme(nSpc)) - CALL HCO_MSG(HcoState%Config%Err,MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ! Reset variables @@ -1027,7 +1027,7 @@ CONTAINS FINN_EMFAC(N,:) = AdjFact / EMFAC_IN(M,:) IF ( Hcostate%amIRoot ) THEN WRITE( MSG, 200 ) TRIM( FINN_SPEC_NAME(N)) - CALL HCO_MSG(HcoState%Config%Err,MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF EXIT @@ -1049,7 +1049,7 @@ CONTAINS IS_NMOC = .TRUE. IF ( HcoState%amIRoot ) THEN WRITE( MSG, 201 ) TRIM( FINN_SPEC_NAME(N) ) - CALL HCO_MSG(HcoState%Config%Err,MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF EXIT ENDIF diff --git a/src/Extensions/hcox_gc_POPs_mod.F90 b/src/Extensions/hcox_gc_POPs_mod.F90 index 3e1416f4..ca75d696 100644 --- a/src/Extensions/hcox_gc_POPs_mod.F90 +++ b/src/Extensions/hcox_gc_POPs_mod.F90 @@ -1682,18 +1682,14 @@ SUBROUTINE HCOX_GC_POPs_Init( HcoState, ExtName, ExtState, RC ) ! Write the name of the extension regardless of the verbose setting msg = 'Using HEMCO extension: GC_POPs (POPs emissions)' - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN - CALL HCO_Msg( HcoState%Config%Err, msg, sep1='-' ) ! with separator - ELSE - CALL HCO_Msg( msg, verb=.TRUE. ) ! w/o separator - ENDIF + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN, sep1='-' ) ! with separator ! Write all other messages as debug printout only MSG = 'Use the following species (Name: HcoID):' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) DO N = 1, nSpc WRITE(MSG,*) TRIM(SpcNames(N)), ':', HcoIDs(N) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDDO ENDIF diff --git a/src/Extensions/hcox_gc_RnPbBe_mod.F90 b/src/Extensions/hcox_gc_RnPbBe_mod.F90 index 8e8c7af3..f0ec5257 100644 --- a/src/Extensions/hcox_gc_RnPbBe_mod.F90 +++ b/src/Extensions/hcox_gc_RnPbBe_mod.F90 @@ -604,18 +604,14 @@ SUBROUTINE HCOX_Gc_RnPbBe_Init( HcoState, ExtName, ExtState, RC ) ! Write the name of the extension regardless of the verbose setting msg = 'Using HEMCO extension: GC_RnPbBe (radionuclide emissions)' - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN - CALL HCO_Msg( HcoState%Config%Err, sep1='-' ) ! with separator - ELSE - CALL HCO_Msg( msg, verb=.TRUE. ) ! w/o separator - ENDIF + CALL HCO_Msg( msg, sep1='-', LUN=HcoState%Config%hcoLogLUN ) ! with separator ! Write all other messages as debug printout only MSG = 'Use the following species (Name: HcoID):' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) DO N = 1, nSpc WRITE(MSG,*) TRIM(SpcNames(N)), ':', HcoIDs(N) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDDO ENDIF @@ -639,26 +635,25 @@ SUBROUTINE HCOX_Gc_RnPbBe_Init( HcoState, ExtName, ExtState, RC ) ! WARNING: Rn tracer is not found! IF ( Inst%IDTRn222 <= 0 .AND. HcoState%amIRoot ) THEN - CALL HCO_WARNING( HcoState%Config%Err, & - 'Cannot find Rn222 tracer in list of species!', RC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( & + 'Cannot find Rn222 tracer in list of species!' ) ENDIF ! WARNING: Be7 tracer is not found IF ( Inst%IDTBe7 <= 0 .AND. HcoState%amIRoot ) THEN - CALL HCO_WARNING( HcoState%Config%Err, & - 'Cannot find Be7 tracer in list of species!', RC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( & + 'Cannot find Be7 tracer in list of species!' ) ENDIF ! WARNING: Be10 tracer is not found IF ( Inst%IDTBe10 <= 0 .AND. HcoState%amIRoot ) THEN - CALL HCO_WARNING( HcoState%Config%Err, & - 'Cannot find Be10 tracer in list of species!', RC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( & + 'Cannot find Be10 tracer in list of species!' ) ENDIF ! ERROR: No tracer defined IF ( Inst%IDTRn222 <= 0 .AND. Inst%IDTBe7 <= 0 .AND. Inst%IDTBe10 <= 0) THEN - CALL HCO_ERROR( & - 'Cannot use RnPbBe extension: no valid species!', RC ) + CALL HCO_ERROR( 'Cannot use RnPbBe extension: no valid species!', RC ) ENDIF ! Activate met fields required by this extension diff --git a/src/Extensions/hcox_gfed_mod.F90 b/src/Extensions/hcox_gfed_mod.F90 index b23bb4a0..f71e260b 100644 --- a/src/Extensions/hcox_gfed_mod.F90 +++ b/src/Extensions/hcox_gfed_mod.F90 @@ -768,27 +768,23 @@ SUBROUTINE HCOX_GFED_Init ( HcoState, ExtName, ExtState, RC ) ! Write the name of the extension regardless of the verbose setting msg = 'Using HEMCO extension: GFED (biomass burning)' - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN - CALL HCO_Msg( HcoState%Config%Err, msg, sep1='-' ) ! with separator - ELSE - CALL HCO_Msg( msg, verb=.TRUE. ) ! w/o separator - ENDIF + CALL HCO_Msg( msg, sep1='-', LUN=HcoState%Config%hcoLogLUN ) ! with separator ! Write all other messages as debug printout only WRITE(MSG,*) ' - Use GFED-4 : ', Inst%IsGFED4 - CALL HCO_MSG(HcoState%Config%Err,MSG ) + CALL HCO_MSG(MSG, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' - Use daily scale factors : ', Inst%DoDay - CALL HCO_MSG(HcoState%Config%Err,MSG ) + CALL HCO_MSG(MSG, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' - Use hourly scale factors: ', Inst%Do3Hr - CALL HCO_MSG(HcoState%Config%Err,MSG ) + CALL HCO_MSG(MSG, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' - Hydrophilic OC fraction : ', Inst%OCPIfrac - CALL HCO_MSG(HcoState%Config%Err,MSG ) + CALL HCO_MSG(MSG, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' - Hydrophilic BC fraction : ', Inst%BCPIfrac - CALL HCO_MSG(HcoState%Config%Err,MSG ) + CALL HCO_MSG(MSG, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' - POG1 fraction : ', Inst%POG1frac - CALL HCO_MSG(HcoState%Config%Err,MSG ) + CALL HCO_MSG(MSG, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' - SOAP fraction : ', Inst%SOAPfrac - CALL HCO_MSG(HcoState%Config%Err,MSG ) + CALL HCO_MSG(MSG, LUN=HcoState%Config%hcoLogLUN ) ENDIF ! Get HEMCO species IDs of all species specified in configuration file @@ -929,11 +925,11 @@ SUBROUTINE HCOX_GFED_Init ( HcoState, ExtName, ExtState, RC ) IF ( HcoState%amIRoot ) THEN MSG = ' - Emit GFED species ' // TRIM(GFED_SPEC_NAME(M)) // & ' as model species ' // TRIM(Inst%SpcNames(N)) - CALL HCO_MSG(HcoState%Config%Err,MSG ) + CALL HCO_MSG(MSG, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' --> Will use scale factor: ', Inst%SpcScal(N) - CALL HCO_MSG(HcoState%Config%Err,MSG ) + CALL HCO_MSG(MSG, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' --> Will use scale field : ', TRIM(Inst%SpcScalFldNme(N)) - CALL HCO_MSG(HcoState%Config%Err,MSG ) + CALL HCO_MSG(MSG, LUN=HcoState%Config%hcoLogLUN ) ENDIF EXIT ! go to next species ENDIF diff --git a/src/Extensions/hcox_iodine_mod.F90 b/src/Extensions/hcox_iodine_mod.F90 index 6a770171..456461b3 100644 --- a/src/Extensions/hcox_iodine_mod.F90 +++ b/src/Extensions/hcox_iodine_mod.F90 @@ -453,21 +453,17 @@ SUBROUTINE HCOX_Iodine_Init( HcoState, ExtName, ExtState, RC ) ! Write the name of the extension regardless of the verbose setting msg = 'Using HEMCO extension: Inorg_Iodine (HOI and I2 emissions)' - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN - CALL HCO_Msg( HcoState%Config%Err, sep1='-' ) ! with separator - ELSE - CALL HCO_Msg( msg, verb=.TRUE. ) ! w/o separator - ENDIF + CALL HCO_Msg( msg, sep1='-', LUN=HcoState%Config%hcoLogLUN ) ! with separator ! Write all other messages as debug printout only IF ( Inst%CalcHOI ) THEN WRITE(MSG,*) 'HOI: ', TRIM(SpcNames(1)), Inst%IDTHOI - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF IF ( Inst%CalcI2 ) THEN WRITE(MSG,*) 'I2: ', TRIM(SpcNames(2)), Inst%IDTI2 - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ENDIF diff --git a/src/Extensions/hcox_lightnox_mod.F90 b/src/Extensions/hcox_lightnox_mod.F90 index b598660f..9cd625d1 100644 --- a/src/Extensions/hcox_lightnox_mod.F90 +++ b/src/Extensions/hcox_lightnox_mod.F90 @@ -872,7 +872,7 @@ SUBROUTINE HCOX_LightNOx_Init( HcoState, ExtName, ExtState, RC ) IF ( HcoState%amIRoot ) THEN WRITE( 6, 300 ) TRIM( FileMsg ), TRIM( FileName ) WRITE( MSG, 300 ) TRIM( FileMsg ), TRIM( FileName ) - CALL HCO_MSG( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) 300 FORMAT( a, ' ', a ) ENDIF @@ -955,21 +955,21 @@ SUBROUTINE HCOX_LightNOx_Init( HcoState, ExtName, ExtState, RC ) ! Print the name of the module regardless of verbose msg = 'Using HEMCO extension: LightNOx (lightning NOx emissions' - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN - CALL HCO_Msg( HcoState%Config%Err, sep1='-' ) ! with separator + IF ( HcoState%Config%doVerbose ) THEN + CALL HCO_Msg( msg, sep1='-', LUN=HcoState%Config%hcoLogLUN ) ! with separator ELSE - CALL HCO_Msg( msg, verb=.TRUE. ) ! w/o separator + CALL HCO_Msg( msg, LUN=HcoState%Config%hcoLogLUN ) ! w/o separator ENDIF ! Other information will be printed only when verbose is true WRITE(MSG,*) ' - Use species ', TRIM(SpcNames(1)), '->', Inst%IDTNO - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' - Use GEOS-5 flash rates: ', Inst%LLFR - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' - Use scalar scale factor: ', Inst%SpcScalVal(1) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' - Use gridded scale field: ', TRIM(Inst%SpcScalFldNme(1)) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF !======================================================================= diff --git a/src/Extensions/hcox_megan_mod.F90 b/src/Extensions/hcox_megan_mod.F90 index 708dd77d..fa7a9548 100644 --- a/src/Extensions/hcox_megan_mod.F90 +++ b/src/Extensions/hcox_megan_mod.F90 @@ -3551,15 +3551,11 @@ SUBROUTINE HCOX_Megan_Init( HcoState, ExtName, ExtState, RC ) ! Write the name of the extension regardless of the verbose setting msg = 'Using HEMCO extension: MEGAN (biogenic emissions)' - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN - CALL HCO_Msg( HcoState%Config%Err, msg, sep1='-' ) ! with separator - ELSE - CALL HCO_Msg( msg, verb=.TRUE. ) ! w/o separator - ENDIF + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN, sep1='-' ) ! with separator ! Write all other messages as debug printout only WRITE(MSG,*) '- Use offline biogenic VOCs? ', Inst%OFFLINE_BIOGENICVOC - CALL HCO_MSG( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF !----------------------------------------------------------------- @@ -3710,7 +3706,7 @@ SUBROUTINE HCOX_Megan_Init( HcoState, ExtName, ExtState, RC ) ! Verbose mode IF ( HcoState%amIRoot ) THEN MSG = ' - Use the following species:' - CALL HCO_MSG( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ! Get species IDs @@ -3849,46 +3845,46 @@ SUBROUTINE HCOX_Megan_Init( HcoState, ExtName, ExtState, RC ) END SELECT ! Verbose - IF ( HcoState%amIRoot ) CALL HCO_MSG( HcoState%Config%Err, MSG ) + IF ( HcoState%amIRoot ) CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDDO ! Verbose mode IF ( HcoState%amIRoot ) THEN WRITE(MSG,*) ' --> Isoprene scale factor is ',Inst%ISOP_SCALING - CALL HCO_MSG( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' --> Use CO2 inhibition on isoprene option ', & Inst%LISOPCO2 - CALL HCO_MSG( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' --> Global atmospheric CO2 concentration : ', & Inst%GLOBCO2, ' ppmv' - CALL HCO_MSG( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' --> Normalize LAI by PFT: ', & Inst%NORMLAI - CALL HCO_MSG( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' --> Isoprene to SOA-Precursor', & !convert back to direct mass basis just for show Inst%ISOPTOSOAP / 1.134 - CALL HCO_MSG( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' --> Isoprene direct to SOA (Simple)', & !convert back to direct mass basis just for show Inst%ISOPTOSOAS / 1.134 - CALL HCO_MSG( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' --> Monoterpene to SOA-Precursor', & !convert back to direct mass basis just for show Inst%MONOTOSOAP / 1.134 - CALL HCO_MSG( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' --> Monoterpene direct to SOA (Simple)', & !convert back to direct mass basis just for show Inst%MONOTOSOAS / 1.134 - CALL HCO_MSG( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' --> Othrterpene to SOA-Precursor', & !convert back to direct mass basis just for show Inst%OTHRTOSOAP / 1.134 - CALL HCO_MSG( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' --> Othrterpene direct to SOA (Simple)', & !convert back to direct mass basis just for show Inst%OTHRTOSOAS / 1.134 - CALL HCO_MSG( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF CALL GetExtOpt( HcoState%Config, ExtNr, 'MEGAN_SUFFIX', & diff --git a/src/Extensions/hcox_paranox_mod.F90 b/src/Extensions/hcox_paranox_mod.F90 index 5f1b9c65..abb1af3b 100644 --- a/src/Extensions/hcox_paranox_mod.F90 +++ b/src/Extensions/hcox_paranox_mod.F90 @@ -1018,7 +1018,7 @@ SUBROUTINE HCOX_ParaNOx_Init( HcoState, ExtName, ExtState, RC ) IF ( Inst%IDTO3 <= 0 ) THEN tmpID = HCO_GetHcoID('O3', HcoState ) MSG = 'O3 not produced/removed in PARANOX' - CALL HCO_WARNING(HcoState%Config%Err, MSG, RC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG ) ELSE tmpID = Inst%IDTO3 ENDIF @@ -1026,7 +1026,7 @@ SUBROUTINE HCOX_ParaNOx_Init( HcoState, ExtName, ExtState, RC ) Inst%MW_O3 = HcoState%Spc(tmpID)%MW_g ELSE MSG = 'Use default O3 molecular weight of 48g/mol' - CALL HCO_WARNING(HcoState%Config%Err, MSG, RC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG ) Inst%MW_O3 = 48.0_dp ENDIF @@ -1034,7 +1034,7 @@ SUBROUTINE HCOX_ParaNOx_Init( HcoState, ExtName, ExtState, RC ) IF ( Inst%IDTNO <= 0 ) THEN tmpID = HCO_GetHcoID('NO', HcoState ) MSG = 'NO not produced in PARANOX' - CALL HCO_WARNING(HcoState%Config%Err, MSG, RC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG ) ELSE tmpID = Inst%IDTNO ENDIF @@ -1042,7 +1042,7 @@ SUBROUTINE HCOX_ParaNOx_Init( HcoState, ExtName, ExtState, RC ) Inst%MW_NO = HcoState%Spc(tmpID)%MW_g ELSE MSG = 'Use default NO molecular weight of 30g/mol' - CALL HCO_WARNING(HcoState%Config%Err, MSG, RC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG ) Inst%MW_NO = 30.0_dp ENDIF @@ -1050,7 +1050,7 @@ SUBROUTINE HCOX_ParaNOx_Init( HcoState, ExtName, ExtState, RC ) IF ( Inst%IDTNO2 <= 0 ) THEN tmpID = HCO_GetHcoID('NO2', HcoState ) MSG = 'NO2 not produced in PARANOX' - CALL HCO_WARNING(HcoState%Config%Err, MSG, RC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG ) ELSE tmpID = Inst%IDTNO2 ENDIF @@ -1058,7 +1058,7 @@ SUBROUTINE HCOX_ParaNOx_Init( HcoState, ExtName, ExtState, RC ) Inst%MW_NO2 = HcoState%Spc(tmpID)%MW_g ELSE MSG = 'Use default NO2 molecular weight of 46g/mol' - CALL HCO_WARNING(HcoState%Config%Err, MSG, RC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG ) Inst%MW_NO2 = 46.0_dp ENDIF @@ -1066,7 +1066,7 @@ SUBROUTINE HCOX_ParaNOx_Init( HcoState, ExtName, ExtState, RC ) IF ( Inst%IDTHNO3 <= 0 ) THEN tmpID = HCO_GetHcoID('HNO3', HcoState ) MSG = 'HNO3 not produced/removed in PARANOX' - CALL HCO_WARNING(HcoState%Config%Err, MSG, RC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG ) ELSE tmpID = Inst%IDTHNO3 ENDIF @@ -1074,7 +1074,7 @@ SUBROUTINE HCOX_ParaNOx_Init( HcoState, ExtName, ExtState, RC ) Inst%MW_HNO3 = HcoState%Spc(tmpID)%MW_g ELSE MSG = 'Use default HNO3 molecular weight of 63g/mol' - CALL HCO_WARNING(HcoState%Config%Err, MSG, RC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG ) Inst%MW_HNO3 = 63.0_dp ENDIF @@ -1083,23 +1083,19 @@ SUBROUTINE HCOX_ParaNOx_Init( HcoState, ExtName, ExtState, RC ) ! Write the name of the extension regardless of the verbose setting msg = 'Using HEMCO extension: ParaNOx (ship emission plumes)' - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN - CALL HCO_Msg( HcoState%Config%Err, msg, sep1='-' ) ! with separator - ELSE - CALL HCO_Msg( msg, verb=.TRUE. ) ! w/o separator - ENDIF + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN, sep1='-' ) ! with separator ! Write the rest of the information only when verbose is set MSG = ' - Use the following species: (MW, emitted as HEMCO ID) ' - CALL HCO_MSG(HcoState%Config%Err,MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,"(a,F5.2,I5)") ' NO : ', Inst%MW_NO, Inst%IDTNO - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,"(a,F5.2,I5)") ' NO2 : ', Inst%MW_NO2, Inst%IDTNO2 - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,"(a,F5.2,I5)") ' O3 : ', Inst%MW_O3, Inst%IDTO3 - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,"(a,F5.2,I5)") ' HNO3: ', Inst%MW_HNO3, Inst%IDTHNO3 - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF !-------------------------------- @@ -1367,7 +1363,7 @@ SUBROUTINE HCOX_ParaNOx_Init( HcoState, ExtName, ExtState, RC ) IF ( HcoState%amIRoot ) THEN MSG = ' Cannot properly store SUNCOS values ' // & ' because chemistry time step is more than 60 mins!' - CALL HCO_WARNING(HcoState%Config%Err, MSG, RC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG ) ENDIF ENDIF @@ -1693,7 +1689,7 @@ SUBROUTINE READ_LUT_NCFILE( HcoState, FILENAME, FNOX, & IF ( HcoState%amIRoot ) THEN WRITE( 6, 300 ) TRIM( FileMsg ), TRIM( FileName ) WRITE( MSG, 300 ) TRIM( FileMsg ), TRIM( FileName ) - CALL HCO_MSG( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) 300 FORMAT( a, ' ', a ) ENDIF @@ -2006,7 +2002,7 @@ SUBROUTINE READ_LUT_TXTFILE( HcoState, FILENAME, FNOX, DNOx, OPE, MOE, RC, & IF ( HcoState%amIRoot ) THEN WRITE( 6, 300 ) TRIM( FileMsg ), TRIM( FileName ) WRITE( MSG, 300 ) TRIM( FileMsg ), TRIM( FileName ) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) 300 FORMAT( a, ' ', a ) ENDIF @@ -2225,7 +2221,7 @@ SUBROUTINE WRITE_LUT_TXTFILE( HcoState, FILENAME, FNOX, DNOx, OPE, MOE, RC, & ! Echo info IF ( Hcostate%amIRoot ) THEN WRITE( MSG, 100 ) TRIM( FILENAME ) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) 100 FORMAT( 'WRITE_LUT_TXTFILE: Writing ', a ) ENDIF diff --git a/src/Extensions/hcox_seaflux_mod.F90 b/src/Extensions/hcox_seaflux_mod.F90 index d2de24d5..0292246d 100644 --- a/src/Extensions/hcox_seaflux_mod.F90 +++ b/src/Extensions/hcox_seaflux_mod.F90 @@ -190,7 +190,7 @@ SUBROUTINE HCOX_SeaFlux_Run( ExtState, HcoState, RC ) IF ( ExtState%SeaFlux <= 0 ) RETURN ! Verbose? - verbose = HCO_IsVerb( HcoState%Config%Err ) + verbose = HcoState%Config%doVerbose ! Nullify Arr2D => NULL() @@ -222,10 +222,10 @@ SUBROUTINE HCOX_SeaFlux_Run( ExtState, HcoState, RC ) IF ( verbose ) THEN WRITE(MSG,'(A40,I5)') & 'Calculate air-sea flux for HEMCO species', HcoID - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) 'Module species name: ', & TRIM(Inst%OcSpecs(OcID)%OcSpcName) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! Get seawater concentration of given compound (from HEMCO core). @@ -564,7 +564,7 @@ SUBROUTINE Calc_SeaFlux( HcoState, ExtState, & ! Warning? IF ( WARN /= OLDWARN ) THEN WRITE(MSG,*) 'Temperature limited to ', TMAX, 'K' - CALL HCO_WARNING(HcoState%Config%Err, MSG, RC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG ) ENDIF ! Leave w/ success @@ -704,15 +704,15 @@ SUBROUTINE HCOX_SeaFlux_Init( HcoState, ExtName, ExtState, RC ) ! Write the name of the extension regardless of the verbose setting msg = 'Using HEMCO extension: SeaFlux (air-sea flux emissions)' - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN - CALL HCO_Msg( HcoState%Config%Err, msg, sep1='-' ) ! With separator + IF ( HcoState%Config%doVerbose ) THEN + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN, sep1='-' ) ! With separator ELSE - CALL HCO_Msg( msg, verb=.TRUE. ) ! W/o separator + CALL HCO_Msg( msg, LUN=HcoState%Config%hcoLogLUN ) ! W/o separator ENDIF ! Write all other messages as debug printout only MSG = ' - Use species:' - CALL HCO_MSG(HcoState%Config%Err,MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ! ---------------------------------------------------------------------- @@ -875,7 +875,7 @@ SUBROUTINE HCOX_SeaFlux_Init( HcoState, ExtName, ExtState, RC ) IF ( Inst%OcSpecs(I)%HcoID > 0 .AND. HcoState%amIRoot ) THEN WRITE(MSG,*) ' - ', & TRIM(Inst%OcSpecs(I)%OcSpcName), Inst%OcSpecs(I)%HcoID - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDDO !I diff --git a/src/Extensions/hcox_seasalt_mod.F90 b/src/Extensions/hcox_seasalt_mod.F90 index c7f8dc27..a2234839 100644 --- a/src/Extensions/hcox_seasalt_mod.F90 +++ b/src/Extensions/hcox_seasalt_mod.F90 @@ -1000,78 +1000,74 @@ SUBROUTINE HCOX_SeaSalt_Init( HcoState, ExtName, ExtState, RC ) ! Write the name of the extension regardless of the verbose setting msg = 'Using HEMCO extension: SeaSalt (sea salt aerosol emissions)' - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN - CALL HCO_Msg( HcoState%Config%Err, msg, sep1='-' ) ! with separator - ELSE - CALL HCO_Msg( msg, verb=.TRUE. ) ! w/o separator - ENDIF + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN, sep1='-' ) ! with separator ! Write all other messages as debug printout only IF ( HcoState%MarinePOA ) THEN MSG = 'Use marine organic aerosols option' - CALL HCO_MSG(HcoState%Config%Err,MSG, SEP1='-' ) + CALL HCO_MSG(MSG, SEP1='-', LUN=HcoState%Config%hcoLogLUN ) ENDIF WRITE(MSG,*) 'Accumulation aerosol: ', TRIM(SpcNamesSS(1)), & ':', Inst%IDTSALA - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) ' - size range : ', SALA_REDGE_um - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) 'Coarse aerosol : ', TRIM(SpcNamesSS(2)), & ':', Inst%IDTSALC - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) ' - size range : ', SALA_REDGE_um - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) ' - wind scale factor: ', Inst%WindScale - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) IF ( Inst%EmitSnowSS ) THEN WRITE(MSG,*) ' - Arctic Snow Salinity on FYI (psu): ', Inst%NSLNT_FYI - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) ' - Arctic Snow Salinity on MYI (psu): ', Inst%NSLNT_MYI - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) ' - Antarctic Snow Salinity on FYI (psu): ', Inst%SSLNT_FYI - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) ' - Antarctic Snow Salinity on FYI (psu): ', Inst%SSLNT_MYI - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) ' - Arctic Snow age (days): ', Inst%NAGE - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) ' - Antarctic Snow age(days): ', Inst%SAGE - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) ' - Number of particle per snowflake: ', Inst%NumP - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF WRITE(MSG,*) 'Accumulation Chloride: ', TRIM(SpcNamesSS(3)), & ':', Inst%IDTSALACL - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) 'Coarse Chloride: ', TRIM(SpcNamesSS(4)), & ':', Inst%IDTSALCCL - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) 'Accumulation Alkalinity: ', TRIM(SpcNamesSS(5)), & ':', Inst%IDTSALAAL - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) 'Coarse Alkalinity: ', TRIM(SpcNamesSS(6)), & ':', Inst%IDTSALCAL - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) IF ( Inst%CalcBrSalt ) THEN WRITE(MSG,*) 'BrSALA: ', TRIM(SpcNamesSS(7)), Inst%IDTBrSALA - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) 'BrSALC: ', TRIM(SpcNamesSS(8)), Inst%IDTBrSALC - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) 'Br- mass content: ', Inst%BrContent - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF IF ( HcoState%MarinePOA ) THEN WRITE(MSG,*) 'Hydrophobic marine organic aerosol: ', & TRIM(SpcNamesSS(9)), ':', Inst%IDTMOPO - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) 'Hydrophilic marine organic aerosol: ', & TRIM(SpcNamesSS(10)), ':', Inst%IDTMOPI - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF diff --git a/src/Extensions/hcox_soilnox_mod.F90 b/src/Extensions/hcox_soilnox_mod.F90 index 871b8694..a8712e3e 100644 --- a/src/Extensions/hcox_soilnox_mod.F90 +++ b/src/Extensions/hcox_soilnox_mod.F90 @@ -605,7 +605,7 @@ SUBROUTINE HCOX_SoilNOx_Run( ExtState, HcoState, RC ) Inst%GWET_PREV = 0.0_sp IF ( HcoState%amIRoot ) THEN ErrMsg = 'Cannot find GWET_PREV restart variable - initialized to 0.0!' - CALL HCO_WARNING( HcoState%Config%Err, ErrMsg, RC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( ErrMsg ) ENDIF ENDIF @@ -621,7 +621,7 @@ SUBROUTINE HCOX_SoilNOx_Run( ExtState, HcoState, RC ) Inst%PFACTOR = 1.0_sp IF ( HcoState%amIRoot ) THEN ErrMsg = 'Cannot find PFACTOR restart variable - initialized to 1.0!' - CALL HCO_WARNING( HcoState%Config%Err, ErrMsg, RC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( ErrMsg ) ENDIF ENDIF @@ -637,7 +637,7 @@ SUBROUTINE HCOX_SoilNOx_Run( ExtState, HcoState, RC ) Inst%DRYPERIOD = 0.0_sp IF ( HcoState%amIRoot ) THEN ErrMsg = 'Cannot find DRYPERIOD restart variable - initialized to 0.0!' - CALL HCO_WARNING( HcoState%Config%Err, ErrMsg, RC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( ErrMsg ) ENDIF ENDIF @@ -924,25 +924,21 @@ SUBROUTINE HCOX_SoilNOx_Init( HcoState, ExtName, ExtState, RC ) ! Write the name of the extension regardless of the verbose setting msg = 'Using HEMCO extension: SoilNOx (soil NOx emissions)' - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN - CALL HCO_Msg( HcoState%Config%Err, msg, sep1='-' ) ! with separator - ELSE - CALL HCO_Msg( msg, verb=.TRUE. ) ! w/o separator - ENDIF + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN, sep1='-' ) ! with separator ! Write all other messages as debug printout only WRITE(MSG,*) ' - NOx species : ', TRIM(SpcNames(1)), Inst%IDTNO - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) ' - NOx scale factor : ', Inst%SpcScalVal(1) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) ' - NOx scale field : ', TRIM(Inst%SpcScalFldNme(1)) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) ' - Use soil temperature : ', Inst%UseSoilTemp - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) ' - Use fertilizer NOx : ', Inst%LFERTILIZERNOX - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) ' - Fertilizer scale factor: ', Inst%FERT_SCALE - CALL HCO_MSG(HcoState%Config%Err,MSG,SEP2='-') + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! ---------------------------------------------------------------------- diff --git a/src/Extensions/hcox_state_mod.F90 b/src/Extensions/hcox_state_mod.F90 index 832c3c66..0375f4b0 100644 --- a/src/Extensions/hcox_state_mod.F90 +++ b/src/Extensions/hcox_state_mod.F90 @@ -1290,9 +1290,9 @@ SUBROUTINE ExtDat_Set_2R ( HcoState, ExtDat, & ENDIF ! Verbose - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN MSG = 'Will fill extension field from HEMCO data list field ' // TRIM(FldName) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ! Target to data @@ -1335,9 +1335,9 @@ SUBROUTINE ExtDat_Set_2R ( HcoState, ExtDat, & IF ( PRESENT(Filled) ) Filled = .TRUE. ! Verbose - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN MSG = 'Set extension field pointer to external data: ' // TRIM(FldName) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ENDIF @@ -1489,9 +1489,9 @@ SUBROUTINE ExtDat_Set_2S ( HcoState, ExtDat, & ENDIF ! Verbose - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN MSG = 'Will fill extension field from HEMCO data list field ' // TRIM(FldName) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ! Target to data @@ -1534,9 +1534,9 @@ SUBROUTINE ExtDat_Set_2S ( HcoState, ExtDat, & IF ( PRESENT(Filled) ) Filled = .TRUE. ! Verbose - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN MSG = 'Set extension field pointer to external data: ' // TRIM(FldName) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ENDIF @@ -1688,9 +1688,9 @@ SUBROUTINE ExtDat_Set_2I ( HcoState, ExtDat, & ENDIF ! Verbose - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN MSG = 'Will fill extension field from HEMCO data list field ' // TRIM(FldName) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ! Target to data @@ -1733,9 +1733,9 @@ SUBROUTINE ExtDat_Set_2I ( HcoState, ExtDat, & IF ( PRESENT(Filled) ) Filled = .TRUE. ! Verbose - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN MSG = 'Set extension field pointer to external data: ' // TRIM(FldName) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ENDIF @@ -1901,9 +1901,9 @@ SUBROUTINE ExtDat_Set_3R ( HcoState, ExtDat, FldName, & ENDIF ! Verbose - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN MSG = 'Will fill extension field from HEMCO data list field ' // TRIM(FldName) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ! Target to data @@ -1947,9 +1947,9 @@ SUBROUTINE ExtDat_Set_3R ( HcoState, ExtDat, FldName, & IF ( PRESENT(Filled) ) Filled = .TRUE. ! Verbose - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN MSG = 'Set extension field pointer to external data: ' // TRIM(FldName) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ENDIF @@ -2118,9 +2118,9 @@ SUBROUTINE ExtDat_Set_3S ( HcoState, ExtDat, FldName, & ENDIF ! Verbose - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN MSG = 'Will fill extension field from HEMCO data list field ' // TRIM(FldName) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ! Target to data @@ -2164,9 +2164,9 @@ SUBROUTINE ExtDat_Set_3S ( HcoState, ExtDat, FldName, & IF ( PRESENT(Filled) ) Filled = .TRUE. ! Verbose - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN MSG = 'Set extension field pointer to external data: ' // TRIM(FldName) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ENDIF diff --git a/src/Extensions/hcox_template_mod.F90x b/src/Extensions/hcox_template_mod.F90x index fd397696..25b67dbb 100644 --- a/src/Extensions/hcox_template_mod.F90x +++ b/src/Extensions/hcox_template_mod.F90x @@ -256,20 +256,20 @@ CONTAINS ! Write the name of the extension regardless of the verbose setting msg = 'Using HEMCO extension: ()' - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN - CALL HCO_Msg( HcoState%Config%Err, sep1='-' ) ! with separator + IF ( HcoState%Config%doVerbose ) THEN + CALL HCO_Msg( msg, sep1='-', LUN=HcoState%Config%hcoLogLUN ) ! with separator ELSE - CALL HCO_Msg( msg, verb=.TRUE. ) ! w/o separator + CALL HCO_Msg( msg, LUN=HcoState%Config%hcoLogLUN ) ! w/o separator ENDIF ! Write all other messages as debug printout only MSG = ' - use the following species (Name, HcoID, Scaling):' - CALL HCO_MSG( HcoState%Config%Err, MSG) + CALL HCO_MSG( MSG, LUN=HcoState%Config%hcoLogLUN ) DO N = 1, Inst%nSpc WRITE(MSG,*) TRIM(Inst%SpcNames(N)), ', ', Inst%SpcIDs(N), ', ', Inst%SpcScl(N) - CALL HCO_MSG( HcoState%Config%Err, MSG) + CALL HCO_MSG( MSG, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) 'Apply scale field: ', TRIM(Inst%SpcScalFldNme(N)) - CALL HCO_MSG( HcoState%Config%Err, MSG) + CALL HCO_MSG( MSG, LUN=HcoState%Config%hcoLogLUN ) ENDDO ENDIF diff --git a/src/Extensions/hcox_tomas_dustdead_mod.F b/src/Extensions/hcox_tomas_dustdead_mod.F index 3c944201..a18f9005 100644 --- a/src/Extensions/hcox_tomas_dustdead_mod.F +++ b/src/Extensions/hcox_tomas_dustdead_mod.F @@ -712,23 +712,23 @@ SUBROUTINE HCOX_TOMAS_DustDead_Init( HcoState, ExtName, ExtState, ! Write the name of the extension regardless of the verbose setting msg = 'Using HEMCO extension: TOMAS_DustDead ' & // 'dust mobilization for TOMAS)' - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN - CALL HCO_Msg( HcoState%Config%Err, sep1='-' ) ! with separator + IF ( HcoState%Config%doVerbose ) THEN + CALL HCO_Msg( msg, sep1='-', LUN=HcoState%Config%hcoLogLUN ) ! with separator ELSE - CALL HCO_Msg( msg, verb=.TRUE. ) ! w/o separator + CALL HCO_Msg( msg, LUN=HcoState%Config%hcoLogLUN ) ! w/o separator ENDIF ! Write all other messages as debug printout only MSG = 'Use the following species (Name: HcoID):' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) DO N = 1, nSpc WRITE(MSG,*) TRIM(SpcNames(N)), ':', Inst%HcoIDs(N) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDDO WRITE(MSG,*) 'Global mass flux tuning factor: ', & Inst%FLX_MSS_FDG_FCT - CALL HCO_MSG(HcoState%Config%Err,MSG,SEP2='-') + CALL HCO_MSG(MSG,SEP2='-',LUN=HcoState%Config%HcoLogLUN ) ENDIF diff --git a/src/Extensions/hcox_tomas_jeagle_mod.F90 b/src/Extensions/hcox_tomas_jeagle_mod.F90 index b59f4ad6..81a6048a 100644 --- a/src/Extensions/hcox_tomas_jeagle_mod.F90 +++ b/src/Extensions/hcox_tomas_jeagle_mod.F90 @@ -641,11 +641,7 @@ SUBROUTINE HCOX_TOMAS_Jeagle_Init( HcoState, ExtName, ExtState, RC ) ! Write the name of the extension regardless of the verbose setting msg = & 'Using HEMCO extension: TOMAS_Jeagle (sea salt emissions for TOMAS)' - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN - CALL HCO_Msg( HcoState%Config%Err, msg, sep1='-' ) ! with separator - ELSE - CALL HCO_Msg( msg, verb=.TRUE. ) ! w/o separator - ENDIF + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN, sep1='-' ) ! with separator ENDIF ! Create Instance @@ -716,22 +712,22 @@ SUBROUTINE HCOX_TOMAS_Jeagle_Init( HcoState, ExtName, ExtState, RC ) ! Verbose mode IF ( HcoState%amIRoot ) THEN MSG = 'Use sea salt aerosol emissions (extension module)' - CALL HCO_MSG(HcoState%Config%Err,MSG, SEP1='-' ) + CALL HCO_MSG( MSG, SEP1='-', LUN=HcoState%Config%hcoLogLUN ) IF ( Inst%EmitSnowSS ) THEN WRITE(MSG,*) ' - Arctic Snow Salinity on FYI (psu): ', Inst%NSLNT_FYI - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) ' - Arctic Snow Salinity on MYI (psu): ', Inst%NSLNT_MYI - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) ' - Antarctic Snow Salinity on FYI (psu): ', Inst%SSLNT_FYI - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) ' - Antarctic Snow Salinity on FYI (psu): ', Inst%SSLNT_MYI - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) ' - Arctic Snow age (days): ', Inst%NAGE - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) ' - Antarctic Snow age(days): ', Inst%SAGE - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) ' - Number of particle per snowflake: ', Inst%NP - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ENDIF @@ -749,10 +745,10 @@ SUBROUTINE HCOX_TOMAS_Jeagle_Init( HcoState, ExtName, ExtState, RC ) ENDIF IF ( HcoState%amIRoot ) THEN MSG = 'Use the following species (Name: HcoID):' - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) DO N = 1, nSpc WRITE(MSG,*) TRIM(SpcNames(N)), ':', Inst%HcoIDs(N) - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDDO ENDIF diff --git a/src/Extensions/hcox_volcano_mod.F90 b/src/Extensions/hcox_volcano_mod.F90 index 400818de..bb264d03 100644 --- a/src/Extensions/hcox_volcano_mod.F90 +++ b/src/Extensions/hcox_volcano_mod.F90 @@ -374,11 +374,7 @@ SUBROUTINE HCOX_Volcano_Init( HcoState, ExtName,ExtState, RC ) ! Write the name of the extension regardless of the verbose settings IF ( HcoState%amIRoot ) THEN msg = 'Using HEMCO extension: Volcano (volcanic SO2 emissions)' - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN - CALL HCO_Msg( HcoState%Config%Err, msg, sep1='-' ) ! with separator - ELSE - CALL HCO_Msg( msg, verb=.TRUE. ) ! w/o separator - ENDIF + CALL HCO_MSG( msg, sep1='-', LUN=HcoState%Config%hcoLogLUN ) ! with separator ENDIF ! Get species IDs. @@ -441,7 +437,7 @@ SUBROUTINE HCOX_Volcano_Init( HcoState, ExtName,ExtState, RC ) MSG = 'Cannot read Volcano climatology file name. Please provide ' // & 'the Volcano climatology as a setting to the Volcano extension. ' // & 'The name of this setting must be `Volcano_Climatology`.' - CALL HCO_Error( HcoState%Config%Err, MSG, RC ) + CALL HCO_Error( MSG, RC ) RETURN ENDIF @@ -477,22 +473,22 @@ SUBROUTINE HCOX_Volcano_Init( HcoState, ExtName,ExtState, RC ) ! Verbose mode IF ( HcoState%amIRoot ) THEN MSG = ' - use the following species (Name, HcoID, Scaling relative to kgS):' - CALL HCO_MSG( HcoState%Config%Err, MSG) + CALL HCO_MSG( MSG, LUN=HcoState%Config%hcoLogLUN ) DO N = 1, Inst%nSpc WRITE(MSG,*) TRIM(SpcNames(N)), ', ', Inst%SpcIDs(N), ', ', Inst%SpcScl(N) - CALL HCO_MSG( HcoState%Config%Err, MSG) + CALL HCO_MSG( MSG, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) 'Apply scale field: ', TRIM(Inst%SpcScalFldNme(N)) - CALL HCO_MSG( HcoState%Config%Err, MSG) + CALL HCO_MSG( MSG, LUN=HcoState%Config%hcoLogLUN ) ENDDO WRITE(MSG,*) ' - Emissions data source is ', TRIM(Inst%VolcSource) - CALL HCO_MSG( HcoState%Config%Err, MSG ) + CALL HCO_MSG( MSG, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' - Emit eruptive emissions as category ', Inst%CatErupt - CALL HCO_MSG( HcoState%Config%Err, MSG ) + CALL HCO_MSG( MSG, LUN=HcoState%Config%hcoLogLUN ) WRITE(MSG,*) ' - Emit degassing emissions as category ', Inst%CatDegas - CALL HCO_MSG( HcoState%Config%Err, MSG ) + CALL HCO_MSG(MSG, LUN=HcoState%Config%hcoLogLUN ) ENDIF - ! Cleanup + ! Cleanup Inst => NULL() IF ( ALLOCATED(SpcNames) ) DEALLOCATE(SpcNames) @@ -628,11 +624,10 @@ SUBROUTINE ReadVolcTable( HcoState, ExtState, Inst, RC ) FileMsg = 'HEMCO (VOLCANO): REQUIRED FILE NOT FOUND' ENDIF - ! Write file status to stdout and the HEMCO log + ! Write file status to log IF ( Hcostate%amIRoot ) THEN - WRITE( 6, 300 ) TRIM( FileMsg ), TRIM( ThisFile ) WRITE( MSG, 300 ) TRIM( FileMsg ), TRIM( ThisFile ) - CALL HCO_MSG( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) 300 FORMAT( a, ' ', a ) ENDIF @@ -654,7 +649,7 @@ SUBROUTINE ReadVolcTable( HcoState, ExtState, Inst, RC ) IF ( Hcostate%amIRoot ) THEN MSG = 'Attempting to read volcano climatology file' WRITE( 6, 300 ) TRIM( MSG ) - CALL HCO_MSG( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ! Create a display string based on whether or not the file is found @@ -668,7 +663,7 @@ SUBROUTINE ReadVolcTable( HcoState, ExtState, Inst, RC ) IF ( Hcostate%amIRoot ) THEN WRITE( 6, 300 ) TRIM( FileMsg ), TRIM( ThisFile ) WRITE( MSG, 300 ) TRIM( FileMsg ), TRIM( ThisFile ) - CALL HCO_MSG( HcoState%Config%Err, MSG ) + CALL HCO_MSG( msg, LUN=HcoState%Config%hcoLogLUN ) ENDIF ENDIF @@ -716,9 +711,9 @@ SUBROUTINE ReadVolcTable( HcoState, ExtState, Inst, RC ) ENDDO ! Verbose - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Number of volcanoes: ', nVolc - CALL HCO_MSG( HcoState%Config%Err, MSG) + CALL HCO_MSG( MSG, LUN=HcoState%Config%hcoLogLUN ) ENDIF ! Allocate arrays @@ -757,7 +752,7 @@ SUBROUTINE ReadVolcTable( HcoState, ExtState, Inst, RC ) ELSE WRITE(MSG,*) 'No volcano data found for year/mm/dd: ', YYYY, MM, DD - CALL HCO_WARNING( HcoState%Config%Err, MSG, RC, THISLOC=LOC ) + IF ( HcoState%Config%doVerbose ) CALL HCO_WARNING( MSG, THISLOC=LOC ) ENDIF ! Now read records @@ -1043,11 +1038,11 @@ SUBROUTINE EmitVolc( HcoState, ExtState, Inst, SO2d, SO2e, RC ) ENDDO ! testing - !IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + !IF ( HcoState%Config%doVerbose ) THEN ! WRITE(MSG,*) 'Total eruptive emissions of volcano ', N, ' [kgS/s]: ', volcE - ! CALL HCO_MSG(HcoState%Config%Err,MSG) + ! CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ! WRITE(MSG,*) 'Total degassing emissions of volcano ', N, ' [kgS/s]: ', volcD - ! CALL HCO_MSG(HcoState%Config%Err,MSG) + ! CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) !ENDIF ! total @@ -1058,11 +1053,11 @@ SUBROUTINE EmitVolc( HcoState, ExtState, Inst, SO2d, SO2e, RC ) ENDIF ! verbose - IF ( HCO_IsVerb( HcoState%Config%Err ) ) THEN + IF ( HcoState%Config%doVerbose ) THEN WRITE(MSG,*) 'Total eruptive emissions [kgS/s]: ', totE - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) WRITE(MSG,*) 'Total degassing emissions [kgS/s]: ', totD - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(MSG,LUN=HcoState%Config%hcoLogLUN) ENDIF ! Return w/ success diff --git a/src/Interfaces/GEOS/HEMCO_GridCompMod.F90 b/src/Interfaces/GEOS/HEMCO_GridCompMod.F90 index 62a1a40c..a681fe1b 100644 --- a/src/Interfaces/GEOS/HEMCO_GridCompMod.F90 +++ b/src/Interfaces/GEOS/HEMCO_GridCompMod.F90 @@ -823,7 +823,8 @@ SUBROUTINE HEMCOinit_( GC, Import, Export, Clock, Inst, RC ) ! ------------------------------------------------------------------ IF ( MAPL_Am_I_Root() ) THEN - CALL HCO_LogFile_Open( Inst%HcoConfig%Err, RC = HCRC ) + CALL HCO_LogFile_Open( Inst%HcoConfig%Err, Inst%HcoConfig%doVerbose, & + RC = HCRC, Inst%HcoConfig%hcoLogLUN=logLUN ) _ASSERT(HCRC==HCO_SUCCESS,'needs informative message') ENDIF diff --git a/src/Interfaces/MAPL_ESMF/hcoi_esmf_mod.F90 b/src/Interfaces/MAPL_ESMF/hcoi_esmf_mod.F90 index f9b407a3..984059eb 100644 --- a/src/Interfaces/MAPL_ESMF/hcoi_esmf_mod.F90 +++ b/src/Interfaces/MAPL_ESMF/hcoi_esmf_mod.F90 @@ -549,7 +549,7 @@ SUBROUTINE HCO_Imp2Ext2S( HcoState, ExtDat, FldName, RC ) Ptr2D => NULL() ! Verbose - IF ( HCO_IsVerb(HcoState%Config%Err) .AND.HcoState%amIRoot ) THEN + IF ( HcoState%Config%doVerbose .AND.HcoState%amIRoot ) THEN CALL HCO_MSG('Passed from import to ExtState: '//TRIM(FldName)) ENDIF @@ -632,7 +632,7 @@ SUBROUTINE HCO_Imp2Ext3S( HcoState, ExtDat, FldName, RC ) Ptr3D => NULL() ! Verbose - IF ( HCO_IsVerb(HcoState%Config%Err) .AND. HcoState%amIRoot ) THEN + IF ( HcoState%Config%doVerbose .AND. HcoState%amIRoot ) THEN CALL HCO_MSG('Passed from import to ExtState: '//TRIM(FldName)) ENDIF @@ -727,8 +727,8 @@ SUBROUTINE HCO_Imp2Ext2R( HcoState, ExtDat, FldName, RC, Fld ) ENDIF ! Verbose - IF ( HCO_IsVerb(HcoState%Config%Err) .AND. HcoState%amIRoot ) THEN - CALL HCO_MSG(HcoState%Config%Err,'Passed from import to ExtState: '//TRIM(FldName)) + IF ( HcoState%Config%doVerbose .AND. HcoState%amIRoot ) THEN + CALL HCO_MSG('Passed from import to ExtState: '//TRIM(FldName)) ENDIF ENDIF ! DoUse @@ -810,7 +810,7 @@ SUBROUTINE HCO_Imp2Ext3R( HcoState, ExtDat, FldName, RC ) Ptr3D => NULL() ! Verbose - IF ( HCO_IsVerb(HcoState%Config%Err) .AND. HcoState%amIRoot ) THEN + IF ( HcoState%Config%doVerbose .AND. HcoState%amIRoot ) THEN CALL HCO_MSG('Passed from import to ExtState: '//TRIM(FldName)) ENDIF @@ -887,7 +887,7 @@ SUBROUTINE HCO_Imp2Ext2I( HcoState, ExtDat, FldName, RC ) Ptr2D => NULL() ! Verbose - IF ( HCO_IsVerb(HcoState%Config%Err) .AND. HcoState%amIRoot ) THEN + IF ( HcoState%Config%doVerbose .AND. HcoState%amIRoot ) THEN CALL HCO_MSG('Passed from import to ExtState: '//TRIM(FldName)) ENDIF diff --git a/src/Interfaces/Standalone/hcoi_standalone_mod.F90 b/src/Interfaces/Standalone/hcoi_standalone_mod.F90 index d653bd17..6596eeef 100644 --- a/src/Interfaces/Standalone/hcoi_standalone_mod.F90 +++ b/src/Interfaces/Standalone/hcoi_standalone_mod.F90 @@ -287,7 +287,8 @@ SUBROUTINE HCOI_SA_Init( am_I_Root, ConfigFile, IsDryRun, RC ) ! Open logfile !====================================================================== IF ( am_I_Root ) THEN - CALL HCO_LogFile_Open( HcoConfig%Err, RC=RC ) + CALL HCO_LogFile_Open( HcoConfig%Err, HcoConfig%doVerbose, RC=RC, & + logLUN=HcoConfig%hcoLogLUN ) IF ( RC /= HCO_SUCCESS ) THEN ErrMsg = 'Error encountered in routine "HCO_Logfile_Open_Readfile!"' CALL HCO_Error( ErrMsg, RC, ThisLoc ) @@ -565,10 +566,9 @@ SUBROUTINE HCOI_SA_Run( RC ) ! Write to logfile and standard output (skip for dry-run) IF ( notDryRun ) THEN WRITE( Msg, 100 ) YR, MT, DY, HR, MN, SC -100 FORMAT( 'Calculate emissions at ', i4, '-', i2.2 ,'-', i2.2,' ', & +100 FORMAT( 'Calculating emissions at ', i4, '-', i2.2 ,'-', i2.2,' ', & i2.2,':', i2.2, ':', i2.2 ) - CALL HCO_MSG(HcoState%Config%Err,Msg) - WRITE(*,*) TRIM( MSG ) + CALL HCO_MSG(Msg) ENDIF ! ================================================================ @@ -1545,18 +1545,18 @@ SUBROUTINE Set_Grid( HcoState, RC ) ! Write grid information to log-file WRITE(Msg,*) 'HEMCO grid definitions:' - CALL HCO_MSG(HcoState%Config%Err,MSG) - + CALL HCO_MSG(Msg) + WRITE(MSG,*) ' --> Number of longitude cells: ', NX - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(Msg) WRITE(MSG,*) ' --> Number of latitude cells : ', NY - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(Msg) WRITE(MSG,*) ' --> Number of levels : ', NZ - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(Msg) WRITE(MSG,*) ' --> Lon range [deg E] : ', XMIN, XMAX - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(Msg) WRITE(MSG,*) ' --> Lat range [deg N] : ', YMIN, YMAX - CALL HCO_MSG(HcoState%Config%Err,MSG) + CALL HCO_MSG(Msg) ! Cleanup IF ( ALLOCATED(AP) ) DEALLOCATE(AP) @@ -1731,7 +1731,7 @@ SUBROUTINE Register_Species( HcoState, RC ) ENDDO !I - CALL HCO_MSG(HcoState%Config%Err,SEP1='-') + CALL HCO_MSG('',SEP1='-') ! Return w/ success RC = HCO_SUCCESS