diff --git a/BranchChangeLog b/BranchChangeLog index 0b0ab344..76babd08 100644 --- a/BranchChangeLog +++ b/BranchChangeLog @@ -1,3 +1,30 @@ +=============================================================== +Tag Creator: mlevy +Developers: klindsay +Tag Date: 26 Jun 2020 +Tag Name: pop2_cesm2_1_rel_n11 +Tag Summary: add Newton-Krylov related tavg vars to abio_dic_dic14 + +Testing: passes aux_pop on cheyenne/intel, compared to pop2_cesm2_1_rel_n10 + expected NLCOMP & BASELINE failures for new test + some MEMCOMP failures + +computation and inclusion of vars in tavg file controlled with nml var abio_dic_dic14_ltavg_NK + +nml var enabled in new test ERS_Ld5_D.T62_g37.C.cheyenne_intel.pop-abio_dic_dic14_ltavg_NK + +mv io_read_fallback_register_field call for 'ABIO_PH_SURF' outside of all_fields_exist_in_restfile conditional + +Changes to be committed: + modified: bld/build-namelist + modified: bld/namelist_files/namelist_defaults_pop.xml + modified: bld/namelist_files/namelist_definition_pop.xml + modified: cime_config/testdefs/testlist_pop.xml + new file: cime_config/testdefs/testmods_dirs/pop/abio_dic_dic14_ltavg_NK/include_user_mods + new file: cime_config/testdefs/testmods_dirs/pop/abio_dic_dic14_ltavg_NK/user_nl_pop + modified: input_templates/ocn.abio_dic_dic14.tavg.csh + modified: source/abio_dic_dic14_mod.F90 + =============================================================================== Tag Creator: mlevy Developers: mlevy diff --git a/bld/build-namelist b/bld/build-namelist index b2390480..8f00dce4 100755 --- a/bld/build-namelist +++ b/bld/build-namelist @@ -2751,6 +2751,9 @@ sub module_tavg_script_args() { my $nl = shift; my $module = shift; my $cfg = shift; + if ($module eq "abio_dic_dic14") { + return ($nl->get_value('abio_dic_dic14_ltavg_NK')); + } if ($module eq "ecosys") { return ($nl->get_value('lecosys_tavg_all'), $nl->get_value('lecosys_tavg_alt_co2')); diff --git a/bld/namelist_files/namelist_defaults_pop.xml b/bld/namelist_files/namelist_defaults_pop.xml index 7da15dd2..838f78ae 100644 --- a/bld/namelist_files/namelist_defaults_pop.xml +++ b/bld/namelist_files/namelist_defaults_pop.xml @@ -1333,6 +1333,12 @@ 1 1 + + + + +.false. + diff --git a/bld/namelist_files/namelist_definition_pop.xml b/bld/namelist_files/namelist_definition_pop.xml index 3a050363..56ec5588 100644 --- a/bld/namelist_files/namelist_definition_pop.xml +++ b/bld/namelist_files/namelist_definition_pop.xml @@ -5883,6 +5883,20 @@ Year in data that corresponds to abio_atm_model_year. Default: 1 + + + + + +add Newton-Krylov spinup related tavg variables +Default: +.false. + + diff --git a/cime_config/testdefs/testlist_pop.xml b/cime_config/testdefs/testlist_pop.xml index 78fb54ce..283fcde1 100644 --- a/cime_config/testdefs/testlist_pop.xml +++ b/cime_config/testdefs/testlist_pop.xml @@ -278,6 +278,11 @@ + + + + + diff --git a/cime_config/testdefs/testmods_dirs/pop/abio_dic_dic14_ltavg_NK/include_user_mods b/cime_config/testdefs/testmods_dirs/pop/abio_dic_dic14_ltavg_NK/include_user_mods new file mode 100644 index 00000000..ff09bbe7 --- /dev/null +++ b/cime_config/testdefs/testmods_dirs/pop/abio_dic_dic14_ltavg_NK/include_user_mods @@ -0,0 +1 @@ +../abio_dic_dic14 diff --git a/cime_config/testdefs/testmods_dirs/pop/abio_dic_dic14_ltavg_NK/user_nl_pop b/cime_config/testdefs/testmods_dirs/pop/abio_dic_dic14_ltavg_NK/user_nl_pop new file mode 100644 index 00000000..87997404 --- /dev/null +++ b/cime_config/testdefs/testmods_dirs/pop/abio_dic_dic14_ltavg_NK/user_nl_pop @@ -0,0 +1 @@ +abio_dic_dic14_ltavg_NK = .true. diff --git a/input_templates/ocn.abio_dic_dic14.tavg.csh b/input_templates/ocn.abio_dic_dic14.tavg.csh index c467df95..4a2e5278 100755 --- a/input_templates/ocn.abio_dic_dic14.tavg.csh +++ b/input_templates/ocn.abio_dic_dic14.tavg.csh @@ -15,6 +15,8 @@ endif @ s1 = 1 # use base-model stream 1 +set abio_dic_dic14_ltavg_NK = $2 + cat >! $CASEROOT/Buildconf/popconf/abio_dic_dic14_tavg_contents << EOF $s1 ABIO_DIC $s1 ABIO_DIC14 @@ -38,6 +40,14 @@ $s1 STF_ABIO_DIC14 $s1 Jint_ABIO_DIC14 EOF +if ($abio_dic_dic14_ltavg_NK == ".true.") then +cat >> $CASEROOT/Buildconf/popconf/abio_dic_dic14_tavg_contents << EOF +$s1 d_SF_ABIO_DIC_d_ABIO_DIC +$s1 d_SF_ABIO_DIC14_d_ABIO_DIC +$s1 d_SF_ABIO_DIC14_d_ABIO_DIC14 +EOF +endif + if ($OCN_TAVG_TRACER_BUDGET == TRUE) then cat >> $CASEROOT/Buildconf/popconf/abio_dic_dic14_tavg_contents << EOF $s1 KPP_SRC_ABIO_DIC14 diff --git a/source/abio_dic_dic14_mod.F90 b/source/abio_dic_dic14_mod.F90 index 7b786518..d446d3a0 100644 --- a/source/abio_dic_dic14_mod.F90 +++ b/source/abio_dic_dic14_mod.F90 @@ -179,7 +179,10 @@ module abio_dic_dic14_mod tavg_FG_ABIO_DIC14, & ! tavg id for surface gas flux of C14 tavg_FG_ABIO_DIC, & ! tavg id for surface gas flux of CO2 tavg_ABIO_ALK, & ! tavg id for surface Alkalinity - tavg_ABIO_PH ! tavg id for surface PH + tavg_ABIO_PH, & ! tavg id for surface PH + tavg_d_SF_ABIO_DIC_d_ABIO_DIC, & ! tavg id for derivative of SF_ABIO_DIC wrt ABIO_DIC + tavg_d_SF_ABIO_DIC14_d_ABIO_DIC, & ! tavg id for derivative of SF_ABIO_DIC14 wrt ABIO_DIC + tavg_d_SF_ABIO_DIC14_d_ABIO_DIC14 ! tavg id for derivative of SF_ABIO_DIC14 wrt ABIO_DIC14 !----------------------------------------------------------------------- ! define tavg id for 3d fields related to surface fluxes @@ -566,10 +569,11 @@ subroutine abio_dic_dic14_init(abio_dic_dic14_ind_begin, init_ts_file_fmt, read_ call document(subname, 'some abio_dic_dic14 fields missing from restfile, ' /& &/ 'using abio_dic_dic14_restfile_fallback') abio_dic_dic14_restart_filename = abio_dic_dic14_restfile_fallback - call io_read_fallback_register_field('ABIO_PH_SURF', & - fallback_opt='const', const_val=c0) endif + call io_read_fallback_register_field('ABIO_PH_SURF', & + fallback_opt='const', const_val=c0) + call rest_read_tracer_block(abio_dic_dic14_ind_begin, & init_abio_dic_dic14_init_file_fmt, & abio_dic_dic14_restart_filename, & @@ -817,6 +821,23 @@ subroutine abio_dic_dic14_init_tavg coordinates='TLONG TLAT time') var_cnt = var_cnt+1 + call define_tavg_field(tavg_d_SF_ABIO_DIC_d_ABIO_DIC,'d_SF_ABIO_DIC_d_ABIO_DIC',2, & + long_name='derivative of SF_ABIO_DIC wrt ABIO_DIC', & + units='cm/s', grid_loc='2110', & + coordinates='TLONG TLAT time') + var_cnt = var_cnt+1 + + call define_tavg_field(tavg_d_SF_ABIO_DIC14_d_ABIO_DIC,'d_SF_ABIO_DIC14_d_ABIO_DIC',2, & + long_name='derivative of SF_ABIO_DIC14 wrt ABIO_DIC', & + units='cm/s', grid_loc='2110', & + coordinates='TLONG TLAT time') + var_cnt = var_cnt+1 + + call define_tavg_field(tavg_d_SF_ABIO_DIC14_d_ABIO_DIC14,'d_SF_ABIO_DIC14_d_ABIO_DIC14',2, & + long_name='derivative of SF_ABIO_DIC14 wrt ABIO_DIC14', & + units='cm/s', grid_loc='2110', & + coordinates='TLONG TLAT time') + var_cnt = var_cnt+1 !----------------------------------------------------------------------- ! Allocate variable to save surface variables to in surf_flux, @@ -958,6 +979,7 @@ subroutine abio_dic_dic14_set_sflux(U10_SQR,IFRAC,PRESS,SST,SSS, & use named_field_mod, only: named_field_get use grid, only: REGION_MASK use c14_atm_forcing_mod, only: c14_atm_forcing_update_data, c14_atm_forcing_get_data + use tavg, only: accumulate_tavg_now ! !INPUT PARAMETERS: @@ -1012,6 +1034,7 @@ subroutine abio_dic_dic14_set_sflux(U10_SQR,IFRAC,PRESS,SST,SSS, & PHHI, & ! upper bound for ph in solver ABIO_DIC_ROW, & ! row of DIC values for solver CO2STAR_ROW, & ! CO2STAR from solver + CO2STAR_ROW_TMP, & ! CO2STAR from solver DCO2STAR_ROW, & ! DCO2STAR from solver pCO2SURF_ROW, & ! pCO2SURF from solver DpCO2_ROW, & ! DpCO2 from solver @@ -1058,7 +1081,7 @@ subroutine abio_dic_dic14_set_sflux(U10_SQR,IFRAC,PRESS,SST,SSS, & !$OMP PARALLEL DO PRIVATE(iblock,j,XKW_ICE,CO2_SCHMIDT_USED,PV,SiO2, PO4,& !$OMP pCO2, D14C,SURF_VALS_DIC,SURF_VALS_DIC14,& !$OMP R14C_ocn,R14C_atm,PHLO,PHHI,ABIO_DIC_ROW,& - !$OMP ALK_ROW,PH_NEW,CO2STAR_ROW, DCO2STAR_ROW,& + !$OMP ALK_ROW,PH_NEW,CO2STAR_ROW,CO2STAR_ROW_TMP,DCO2STAR_ROW,& !$OMP pCO2SURF_ROW,DpCO2_ROW,GAS_FLUX_ABIO_DIC,& !$OMP GAS_FLUX_ABIO_DIC14,CO3_ROW) @@ -1225,6 +1248,51 @@ subroutine abio_dic_dic14_set_sflux(U10_SQR,IFRAC,PRESS,SST,SSS, & ABIO_DIC_SFLUX_TAVG(:,j,13,iblock) = DpCO2_ROW ABIO_DIC_SFLUX_TAVG(:,j,14,iblock) = ALK_ROW +!----------------------------------------------------------------------- +! compute derivatives of surface flux terms, if requested +!----------------------------------------------------------------------- + + if (accumulate_tavg_now(tavg_d_SF_ABIO_DIC14_d_ABIO_DIC14)) then + + ! d_SF_ABIO_DIC14_d_ABIO_DIC14 + where (SURF_VALS_DIC(:,j) /= c0) + ABIO_DIC_SFLUX_TAVG(:,j,18,iblock) = (-1) * PV(:,j) * CO2STAR_ROW / SURF_VALS_DIC(:,j) + elsewhere + ABIO_DIC_SFLUX_TAVG(:,j,18,iblock) = c0 + endwhere + + endif + + if (accumulate_tavg_now(tavg_d_SF_ABIO_DIC_d_ABIO_DIC) .or. & + accumulate_tavg_now(tavg_d_SF_ABIO_DIC14_d_ABIO_DIC)) then + + call co2calc_row(iblock, j, LAND_MASK(:,j,iblock), .true., & + .false., SST(:,j,iblock), SSS(:,j,iblock), & + ABIO_DIC_ROW + c1, ALK_ROW, PO4(:,j), SiO2(:,j), & + PHLO, PHHI, PH_NEW, pCO2(:,j), & + AP_USED(:,j,iblock), CO2STAR_ROW_TMP, & + DCO2STAR_ROW, pCO2SURF_ROW, DpCO2_ROW, CO3_ROW) + + call co2calc_row(iblock, j, LAND_MASK(:,j,iblock), .true., & + .false., SST(:,j,iblock), SSS(:,j,iblock), & + ABIO_DIC_ROW - c1, ALK_ROW, PO4(:,j), SiO2(:,j), & + PHLO, PHHI, PH_NEW, pCO2(:,j), & + AP_USED(:,j,iblock), CO2STAR_ROW, & + DCO2STAR_ROW, pCO2SURF_ROW, DpCO2_ROW, CO3_ROW) + + ! d_SF_ABIO_DIC_d_ABIO_DIC + ABIO_DIC_SFLUX_TAVG(:,j,16,iblock) = (-1) * PV(:,j) * & + (CO2STAR_ROW_TMP - CO2STAR_ROW) * p5 + + ! d_SF_ABIO_DIC14_d_ABIO_DIC + where (SURF_VALS_DIC(:,j) /= c0) + ABIO_DIC_SFLUX_TAVG(:,j,17,iblock) = (-1) * PV(:,j) * SURF_VALS_DIC14(:,j) * & + (CO2STAR_ROW_TMP / (SURF_VALS_DIC(:,j) + c1) - CO2STAR_ROW / (SURF_VALS_DIC(:,j) - c1)) * p5 + elsewhere + ABIO_DIC_SFLUX_TAVG(:,j,17,iblock) = c0 + endwhere + + endif end do !j = 1,ny_block !----------------------------------------------------------------------- @@ -1406,6 +1474,9 @@ subroutine abio_dic_dic14_tavg_forcing call accumulate_tavg_field(ABIO_DIC_SFLUX_TAVG(:,:,13,iblock),tavg_ABIO_DpCO2,iblock,1) call accumulate_tavg_field(ABIO_DIC_SFLUX_TAVG(:,:,14,iblock),tavg_ABIO_ALK,iblock,1) call accumulate_tavg_field(ABIO_DIC_SFLUX_TAVG(:,:,15,iblock),tavg_ABIO_D14Catm,iblock,1) + call accumulate_tavg_field(ABIO_DIC_SFLUX_TAVG(:,:,16,iblock),tavg_d_SF_ABIO_DIC_d_ABIO_DIC,iblock,1) + call accumulate_tavg_field(ABIO_DIC_SFLUX_TAVG(:,:,17,iblock),tavg_d_SF_ABIO_DIC14_d_ABIO_DIC,iblock,1) + call accumulate_tavg_field(ABIO_DIC_SFLUX_TAVG(:,:,18,iblock),tavg_d_SF_ABIO_DIC14_d_ABIO_DIC14,iblock,1) end do