From 8eb4ed0e331bcea7637d97f0b0fc51517549ba0f Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Thu, 27 Jul 2017 12:43:56 -0600 Subject: [PATCH] add namelist control variable --- .../cime_config/namelist_definition_drv.xml | 15 +++- src/drivers/mct/main/component_mod.F90 | 18 +++-- src/drivers/mct/shr/seq_flds_mod.F90 | 75 ++++++++++--------- src/drivers/mct/shr/seq_infodata_mod.F90 | 10 +-- 4 files changed, 69 insertions(+), 49 deletions(-) diff --git a/src/drivers/mct/cime_config/namelist_definition_drv.xml b/src/drivers/mct/cime_config/namelist_definition_drv.xml index cce1a1c83ee..b87b2e7a4ae 100644 --- a/src/drivers/mct/cime_config/namelist_definition_drv.xml +++ b/src/drivers/mct/cime_config/namelist_definition_drv.xml @@ -167,6 +167,19 @@ + + logical + seq_flds + seq_cplflds_inparm + + .true. means that all fields passed to coupler are checked for NaN values + + + .false. + .true. + + + @@ -2677,7 +2690,7 @@ ccsm_pes Determines what ESMF log files (if any) are generated when - USE_ESMF_LIB is TRUE. + USE_ESMF_LIB is TRUE. ESMF_LOGKIND_SINGLE: Use a single log file, combining messages from all of the PETs. Not supported on some platforms. ESMF_LOGKIND_MULTI: Use multiple log files — one per PET. diff --git a/src/drivers/mct/main/component_mod.F90 b/src/drivers/mct/main/component_mod.F90 index dd9a813fef4..d4d9db1923a 100644 --- a/src/drivers/mct/main/component_mod.F90 +++ b/src/drivers/mct/main/component_mod.F90 @@ -32,7 +32,7 @@ module component_mod use mct_mod ! mct_ wrappers for mct lib use perf_mod use ESMF - + use seq_flds_mod, only: nan_check_component_fields implicit none #include @@ -226,9 +226,11 @@ end subroutine comp_init call t_set_prefixf(comp(1)%oneletterid//"_i:") call comp_init( EClock, comp(eci)%cdata_cc, comp(eci)%x2c_cc, comp(eci)%c2x_cc, & NLFilename=NLFilename ) - call t_drvstartf ('check_fields') - call check_fields(comp(eci), eci) - call t_drvstopf ('check_fields') + if(nan_check_component_fields) then + call t_drvstartf ('check_fields') + call check_fields(comp(eci), eci) + call t_drvstopf ('check_fields') + end If call t_unset_prefixf() if (present(seq_flds_c2x_fluxes)) then @@ -682,9 +684,11 @@ end subroutine comp_run call t_set_prefixf(comp(1)%oneletterid//":") call comp_run(EClock, comp(eci)%cdata_cc, comp(eci)%x2c_cc, comp(eci)%c2x_cc) - call t_drvstartf ('check_fields') - call check_fields(comp(eci), eci) - call t_drvstopf ('check_fields') + if(nan_check_component_fields) then + call t_drvstartf ('check_fields') + call check_fields(comp(eci), eci) + call t_drvstopf ('check_fields') + endif call t_unset_prefixf() if ((phase == 1) .and. present(seq_flds_c2x_fluxes)) then diff --git a/src/drivers/mct/shr/seq_flds_mod.F90 b/src/drivers/mct/shr/seq_flds_mod.F90 index e41814a3501..ccd007cb413 100644 --- a/src/drivers/mct/shr/seq_flds_mod.F90 +++ b/src/drivers/mct/shr/seq_flds_mod.F90 @@ -335,6 +335,7 @@ subroutine seq_flds_set(nmlfile, ID, infodata) character(len=CSS) :: fldname, fldflow logical :: is_state, is_flux integer :: i,n + logical :: nan_check_component_fields ! use cases namelists logical :: flds_co2a @@ -347,7 +348,7 @@ subroutine seq_flds_set(nmlfile, ID, infodata) namelist /seq_cplflds_inparm/ & flds_co2a, flds_co2b, flds_co2c, flds_co2_dmsa, flds_wiso, glc_nec, & - ice_ncat, seq_flds_i2o_per_cat, flds_bgc + ice_ncat, seq_flds_i2o_per_cat, flds_bgc, nan_check_component_fields ! user specified new fields integer, parameter :: nfldmax = 200 @@ -381,6 +382,7 @@ subroutine seq_flds_set(nmlfile, ID, infodata) glc_nec = 0 ice_ncat = 1 seq_flds_i2o_per_cat = .false. + nan_check_component_fields = .false. unitn = shr_file_getUnit() write(logunit,"(A)") subname//': read seq_cplflds_inparm namelist from: '& @@ -406,6 +408,7 @@ subroutine seq_flds_set(nmlfile, ID, infodata) call shr_mpi_bcast(glc_nec , mpicom) call shr_mpi_bcast(ice_ncat , mpicom) call shr_mpi_bcast(seq_flds_i2o_per_cat, mpicom) + call shr_mpi_bcast(nan_check_component_fields, mpicom) call glc_elevclass_init(glc_nec) @@ -1351,7 +1354,7 @@ subroutine seq_flds_set(nmlfile, ID, infodata) call metadata_set(attname, longname, stdname, units) if (trim(cime_model) == 'acme') then - ! Sea ice basal pressure + ! Sea ice basal pressure call seq_flds_add(i2x_states,"Si_bpress") call seq_flds_add(x2o_states,"Si_bpress") longname = 'Sea ice basal pressure' @@ -1361,7 +1364,7 @@ subroutine seq_flds_set(nmlfile, ID, infodata) call metadata_set(attname, longname, stdname, units) end if - ! Ocean melt and freeze potential + ! Ocean melt and freeze potential call seq_flds_add(o2x_fluxes,"Fioo_q") call seq_flds_add(x2i_fluxes,"Fioo_q") longname = 'Ocean melt and freeze potential' @@ -1419,7 +1422,7 @@ subroutine seq_flds_set(nmlfile, ID, infodata) attname = 'Fioi_salt' call metadata_set(attname, longname, stdname, units) - ! Black Carbon hydrophilic deposition + ! Black Carbon hydrophilic deposition call seq_flds_add(i2x_fluxes,"Fioi_bcphi" ) call seq_flds_add(x2o_fluxes,"Fioi_bcphi" ) longname = 'Hydrophylic black carbon deposition flux' @@ -1428,7 +1431,7 @@ subroutine seq_flds_set(nmlfile, ID, infodata) attname = 'Fioi_bcphi' call metadata_set(attname, longname, stdname, units) - ! Black Carbon hydrophobic deposition + ! Black Carbon hydrophobic deposition call seq_flds_add(i2x_fluxes,"Fioi_bcpho" ) call seq_flds_add(x2o_fluxes,"Fioi_bcpho" ) longname = 'Hydrophobic black carbon deposition flux' @@ -2514,10 +2517,10 @@ subroutine seq_flds_set(nmlfile, ID, infodata) longname = 'Ratio of ocean surface level abund. HDO/H2O/Rstd' attname = 'So_roce_HDO' call metadata_set(attname, longname, stdname, units) - + + !-------------------------------------------- + !Atmospheric specific humidty at lowest level: !-------------------------------------------- - !Atmospheric specific humidty at lowest level: - !-------------------------------------------- ! specific humidity of H216O at the lowest model level (kg/kg) call seq_flds_add(a2x_states,"Sa_shum_16O") @@ -2547,7 +2550,7 @@ subroutine seq_flds_set(nmlfile, ID, infodata) attname = 'Sa_shum_18O' call metadata_set(attname, longname, stdname, units) - ! Surface snow water equivalent (land/atm only) + ! Surface snow water equivalent (land/atm only) call seq_flds_add(l2x_states,"Sl_snowh_16O") call seq_flds_add(l2x_states,"Sl_snowh_18O") call seq_flds_add(l2x_states,"Sl_snowh_HDO") @@ -2572,7 +2575,7 @@ subroutine seq_flds_set(nmlfile, ID, infodata) !-------------- !Isotopic Rain: - !-------------- + !-------------- !Isotopic Precipitation Fluxes: units = 'kg m-2 s-1' @@ -2584,15 +2587,15 @@ subroutine seq_flds_set(nmlfile, ID, infodata) call seq_flds_add(x2i_fluxes, "Faxa_rain_16O") longname = 'Water flux due to H216O rain' !equiv. to bulk stdname = 'H2_16O_rainfall_flux' - attname = 'Faxa_rain_16O' + attname = 'Faxa_rain_16O' call metadata_set(attname, longname, stdname, units) longname = 'H216O Convective precipitation rate' stdname = 'H2_16O_convective_precipitation_flux' - attname = 'Faxa_rainc_16O' + attname = 'Faxa_rainc_16O' call metadata_set(attname, longname, stdname, units) longname = 'H216O Large-scale (stable) precipitation rate' stdname = 'H2_16O_large_scale_precipitation_flux' - attname = 'Faxa_rainl_16O' + attname = 'Faxa_rainl_16O' call metadata_set(attname, longname, stdname, units) call seq_flds_add(a2x_fluxes,"Faxa_rainc_18O") @@ -2603,15 +2606,15 @@ subroutine seq_flds_set(nmlfile, ID, infodata) call seq_flds_add(x2i_fluxes, "Faxa_rain_18O") longname = 'Water flux due to H218O rain' stdname = 'h2_18o_rainfall_flux' - attname = 'Faxa_rain_18O' + attname = 'Faxa_rain_18O' call metadata_set(attname, longname, stdname, units) longname = 'H218O Convective precipitation rate' stdname = 'H2_18O_convective_precipitation_flux' - attname = 'Faxa_rainc_18O' + attname = 'Faxa_rainc_18O' call metadata_set(attname, longname, stdname, units) longname = 'H218O Large-scale (stable) precipitation rate' stdname = 'H2_18O_large_scale_precipitation_flux' - attname = 'Faxa_rainl_18O' + attname = 'Faxa_rainl_18O' call metadata_set(attname, longname, stdname, units) call seq_flds_add(a2x_fluxes,"Faxa_rainc_HDO") @@ -2622,20 +2625,20 @@ subroutine seq_flds_set(nmlfile, ID, infodata) call seq_flds_add(x2i_fluxes, "Faxa_rain_HDO") longname = 'Water flux due to HDO rain' stdname = 'hdo_rainfall_flux' - attname = 'Faxa_rain_HDO' + attname = 'Faxa_rain_HDO' call metadata_set(attname, longname, stdname, units) longname = 'HDO Convective precipitation rate' stdname = 'HDO_convective_precipitation_flux' - attname = 'Faxa_rainc_HDO' + attname = 'Faxa_rainc_HDO' call metadata_set(attname, longname, stdname, units) longname = 'HDO Large-scale (stable) precipitation rate' stdname = 'HDO_large_scale_precipitation_flux' - attname = 'Faxa_rainl_HDO' + attname = 'Faxa_rainl_HDO' call metadata_set(attname, longname, stdname, units) !------------- !Isotopic snow: - !------------- + !------------- call seq_flds_add(a2x_fluxes,"Faxa_snowc_16O") call seq_flds_add(a2x_fluxes,"Faxa_snowl_16O") @@ -2645,7 +2648,7 @@ subroutine seq_flds_set(nmlfile, ID, infodata) call seq_flds_add(x2i_fluxes, "Faxa_snow_16O") longname = 'Water equiv. H216O snow flux' stdname = 'h2_16o_snowfall_flux' - attname = 'Faxa_snow_16O' + attname = 'Faxa_snow_16O' call metadata_set(attname, longname, stdname, units) longname = 'H2_16O Convective snow rate (water equivalent)' stdname = 'H2_16O_convective_snowfall_flux' @@ -2653,9 +2656,9 @@ subroutine seq_flds_set(nmlfile, ID, infodata) call metadata_set(attname, longname, stdname, units) longname = 'H2_16O Large-scale (stable) snow rate (water equivalent)' stdname = 'H2_16O_large_scale_snowfall_flux' - attname = 'Faxa_snowl_16O' + attname = 'Faxa_snowl_16O' call metadata_set(attname, longname, stdname, units) - + call seq_flds_add(a2x_fluxes,"Faxa_snowc_18O") call seq_flds_add(a2x_fluxes,"Faxa_snowl_18O") call seq_flds_add(x2o_fluxes, "Faxa_snow_18O") @@ -2664,7 +2667,7 @@ subroutine seq_flds_set(nmlfile, ID, infodata) call seq_flds_add(x2i_fluxes, "Faxa_snow_18O") longname = 'Isotopic water equiv. snow flux of H218O' stdname = 'h2_18o_snowfall_flux' - attname = 'Faxa_snow_18O' + attname = 'Faxa_snow_18O' call metadata_set(attname, longname, stdname, units) longname = 'H2_18O Convective snow rate (water equivalent)' stdname = 'H2_18O_convective_snowfall_flux' @@ -2672,9 +2675,9 @@ subroutine seq_flds_set(nmlfile, ID, infodata) call metadata_set(attname, longname, stdname, units) longname = 'H2_18O Large-scale (stable) snow rate (water equivalent)' stdname = 'H2_18O_large_scale_snowfall_flux' - attname = 'Faxa_snowl_18O' + attname = 'Faxa_snowl_18O' call metadata_set(attname, longname, stdname, units) - + call seq_flds_add(a2x_fluxes,"Faxa_snowc_HDO") call seq_flds_add(a2x_fluxes,"Faxa_snowl_HDO") call seq_flds_add(x2o_fluxes, "Faxa_snow_HDO") @@ -2683,7 +2686,7 @@ subroutine seq_flds_set(nmlfile, ID, infodata) call seq_flds_add(x2i_fluxes, "Faxa_snow_HDO") longname = 'Isotopic water equiv. snow flux of HDO' stdname = 'hdo_snowfall_flux' - attname = 'Faxa_snow_HDO' + attname = 'Faxa_snow_HDO' call metadata_set(attname, longname, stdname, units) longname = 'HDO Convective snow rate (water equivalent)' stdname = 'HDO_convective_snowfall_flux' @@ -2691,12 +2694,12 @@ subroutine seq_flds_set(nmlfile, ID, infodata) call metadata_set(attname, longname, stdname, units) longname = 'HDO Large-scale (stable) snow rate (water equivalent)' stdname = 'HDO_large_scale_snowfall_flux' - attname = 'Faxa_snowl_HDO' + attname = 'Faxa_snowl_HDO' call metadata_set(attname, longname, stdname, units) !---------------------------------- !Isotopic precipitation (rain+snow): - !---------------------------------- + !---------------------------------- call seq_flds_add(x2o_fluxes,"Faxa_prec_16O") ! derived rain+snow longname = 'Isotopic Water flux (rain+snow) for H2_16O' @@ -2779,7 +2782,7 @@ subroutine seq_flds_set(nmlfile, ID, infodata) ! H216O Evaporation water flux call seq_flds_add(l2x_fluxes,"Fall_evap_16O") - call seq_flds_add(i2x_fluxes,"Faii_evap_16O") + call seq_flds_add(i2x_fluxes,"Faii_evap_16O") call seq_flds_add(xao_fluxes,"Faox_evap_16O") call seq_flds_add(x2a_fluxes,"Faxx_evap_16O") call seq_flds_add(x2o_fluxes,"Foxx_evap_16O") @@ -2799,7 +2802,7 @@ subroutine seq_flds_set(nmlfile, ID, infodata) ! HD16O Evaporation water flux call seq_flds_add(l2x_fluxes,"Fall_evap_HDO") - call seq_flds_add(i2x_fluxes,"Faii_evap_HDO") + call seq_flds_add(i2x_fluxes,"Faii_evap_HDO") call seq_flds_add(xao_fluxes,"Faox_evap_HDO") call seq_flds_add(x2a_fluxes,"Faxx_evap_HDO") call seq_flds_add(x2o_fluxes,"Foxx_evap_HDO") @@ -2815,7 +2818,7 @@ subroutine seq_flds_set(nmlfile, ID, infodata) attname = 'Foxx_evap_HDO' call metadata_set(attname, longname, stdname, units) attname = 'Faxx_evap_HDO' - call metadata_set(attname, longname, stdname, units) + call metadata_set(attname, longname, stdname, units) ! H218O Evaporation water flux call seq_flds_add(l2x_fluxes,"Fall_evap_18O") @@ -2828,7 +2831,7 @@ subroutine seq_flds_set(nmlfile, ID, infodata) units = 'kg m-2 s-1' attname = 'Fall_evap_18O' call metadata_set(attname, longname, stdname, units) - attname = 'Faii_evap_18O' + attname = 'Faii_evap_18O' call metadata_set(attname, longname, stdname, units) attname = 'Faox_evap_18O' call metadata_set(attname, longname, stdname, units) @@ -2838,7 +2841,7 @@ subroutine seq_flds_set(nmlfile, ID, infodata) call metadata_set(attname, longname, stdname, units) !----------------------------- - !Isotopic sea ice melting flux: + !Isotopic sea ice melting flux: !----------------------------- ! H216O Water flux from melting @@ -3010,7 +3013,7 @@ subroutine seq_flds_set(nmlfile, ID, infodata) ! stdname = 'H2_18O_flodding_water_flux_back_to_land' ! attname = 'Flrr_flood_18O' ! call metadata_set(attname, longname, stdname, units) - + !----------------------------- endif !Water isotopes @@ -3168,7 +3171,7 @@ subroutine seq_flds_set(nmlfile, ID, infodata) longname = 'nitrogen deposition flux' stdname = 'nitrogen_deposition' - units = 'kg(N)/m2/sec' + units = 'kg(N)/m2/sec' call metadata_set(ndep_fields, longname, stdname, units) end if diff --git a/src/drivers/mct/shr/seq_infodata_mod.F90 b/src/drivers/mct/shr/seq_infodata_mod.F90 index 01c6b67689f..f15ddfa9067 100644 --- a/src/drivers/mct/shr/seq_infodata_mod.F90 +++ b/src/drivers/mct/shr/seq_infodata_mod.F90 @@ -276,11 +276,11 @@ MODULE seq_infodata_mod !=============================================================================== !BOP =========================================================================== ! -! !IROUTINE: seq_infodata_Init -- read in CCSM shared namelist +! !IROUTINE: seq_infodata_Init -- read in CIME shared namelist ! ! !DESCRIPTION: ! -! Read in input from seq_infodata_inparm namelist, output ccsm derived type for +! Read in input from seq_infodata_inparm namelist, output cime derived type for ! miscillaneous info. ! ! !INTERFACE: ------------------------------------------------------------------ @@ -1455,7 +1455,7 @@ SUBROUTINE seq_infodata_GetData_bytype( component_firstletter, infodata, & write(logunit,*) trim(subname),' Note: ESP type has no resume property' end if end if - + call seq_infodata_GetData(infodata, esp_present=comp_present, & esp_prognostic=comp_prognostic, esp_phase=comp_phase) else @@ -2000,9 +2000,9 @@ SUBROUTINE seq_infodata_PutData_bytype( component_firstletter, infodata, & if (present(comp_resume)) then write(logunit,*) trim(subname),' Note: ESP type has no resume property' end if - + end if - + call seq_infodata_PutData(infodata, esp_present=comp_present, & esp_prognostic=comp_prognostic, esp_phase=comp_phase) else