Skip to content

Commit

Permalink
add namelist control variable
Browse files Browse the repository at this point in the history
  • Loading branch information
jedwards4b committed Jul 27, 2017
1 parent 614d74d commit 8eb4ed0
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 49 deletions.
15 changes: 14 additions & 1 deletion src/drivers/mct/cime_config/namelist_definition_drv.xml
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,19 @@
</values>
</entry>

<entry id="nan_check_component_fields">
<type>logical</type>
<category>seq_flds</category>
<group>seq_cplflds_inparm</group>
<desc>
.true. means that all fields passed to coupler are checked for NaN values
</desc>
<values>
<value>.false.</value>
<value cime_model='cesm'>.true.</value>
</values>
</entry>

<!-- =========================== -->
<!-- -group seq_cplflds_custom -->
<!-- =========================== -->
Expand Down Expand Up @@ -2677,7 +2690,7 @@
<group>ccsm_pes</group>
<desc>
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.
Expand Down
18 changes: 11 additions & 7 deletions src/drivers/mct/main/component_mod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -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 <mpif.h>
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
75 changes: 39 additions & 36 deletions src/drivers/mct/shr/seq_flds_mod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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: '&
Expand All @@ -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)

Expand Down Expand Up @@ -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'
Expand All @@ -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'
Expand Down Expand Up @@ -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'
Expand All @@ -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'
Expand Down Expand Up @@ -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")
Expand Down Expand Up @@ -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")
Expand All @@ -2572,7 +2575,7 @@ subroutine seq_flds_set(nmlfile, ID, infodata)

!--------------
!Isotopic Rain:
!--------------
!--------------

!Isotopic Precipitation Fluxes:
units = 'kg m-2 s-1'
Expand All @@ -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")
Expand All @@ -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")
Expand All @@ -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")
Expand All @@ -2645,17 +2648,17 @@ 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'
attname = 'Faxa_snowc_16O'
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")
Expand All @@ -2664,17 +2667,17 @@ 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'
attname = 'Faxa_snowc_18O'
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")
Expand All @@ -2683,20 +2686,20 @@ 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'
attname = 'Faxa_snowc_HDO'
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'
Expand Down Expand Up @@ -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")
Expand All @@ -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")
Expand All @@ -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")
Expand All @@ -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)
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
10 changes: 5 additions & 5 deletions src/drivers/mct/shr/seq_infodata_mod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -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: ------------------------------------------------------------------
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 8eb4ed0

Please sign in to comment.