@@ -179,7 +179,10 @@ module abio_dic_dic14_mod
179179 tavg_FG_ABIO_DIC14, & ! tavg id for surface gas flux of C14
180180 tavg_FG_ABIO_DIC, & ! tavg id for surface gas flux of CO2
181181 tavg_ABIO_ALK, & ! tavg id for surface Alkalinity
182- tavg_ABIO_PH ! tavg id for surface PH
182+ tavg_ABIO_PH, & ! tavg id for surface PH
183+ tavg_d_SF_ABIO_DIC_d_ABIO_DIC, & ! tavg id for derivative of SF_ABIO_DIC wrt ABIO_DIC
184+ tavg_d_SF_ABIO_DIC14_d_ABIO_DIC, & ! tavg id for derivative of SF_ABIO_DIC14 wrt ABIO_DIC
185+ tavg_d_SF_ABIO_DIC14_d_ABIO_DIC14 ! tavg id for derivative of SF_ABIO_DIC14 wrt ABIO_DIC14
183186
184187!- ----------------------------------------------------------------------
185188! 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_
566569 call document(subname, ' some abio_dic_dic14 fields missing from restfile, ' / &
567570 &/ ' using abio_dic_dic14_restfile_fallback' )
568571 abio_dic_dic14_restart_filename = abio_dic_dic14_restfile_fallback
569- call io_read_fallback_register_field(' ABIO_PH_SURF' , &
570- fallback_opt= ' const' , const_val= c0)
571572 endif
572573
574+ call io_read_fallback_register_field(' ABIO_PH_SURF' , &
575+ fallback_opt= ' const' , const_val= c0)
576+
573577 call rest_read_tracer_block(abio_dic_dic14_ind_begin, &
574578 init_abio_dic_dic14_init_file_fmt, &
575579 abio_dic_dic14_restart_filename, &
@@ -817,6 +821,23 @@ subroutine abio_dic_dic14_init_tavg
817821 coordinates= ' TLONG TLAT time' )
818822 var_cnt = var_cnt+1
819823
824+ call define_tavg_field(tavg_d_SF_ABIO_DIC_d_ABIO_DIC,' d_SF_ABIO_DIC_d_ABIO_DIC' ,2 , &
825+ long_name= ' derivative of SF_ABIO_DIC wrt ABIO_DIC' , &
826+ units= ' cm/s' , grid_loc= ' 2110' , &
827+ coordinates= ' TLONG TLAT time' )
828+ var_cnt = var_cnt+1
829+
830+ call define_tavg_field(tavg_d_SF_ABIO_DIC14_d_ABIO_DIC,' d_SF_ABIO_DIC14_d_ABIO_DIC' ,2 , &
831+ long_name= ' derivative of SF_ABIO_DIC14 wrt ABIO_DIC' , &
832+ units= ' cm/s' , grid_loc= ' 2110' , &
833+ coordinates= ' TLONG TLAT time' )
834+ var_cnt = var_cnt+1
835+
836+ call define_tavg_field(tavg_d_SF_ABIO_DIC14_d_ABIO_DIC14,' d_SF_ABIO_DIC14_d_ABIO_DIC14' ,2 , &
837+ long_name= ' derivative of SF_ABIO_DIC14 wrt ABIO_DIC14' , &
838+ units= ' cm/s' , grid_loc= ' 2110' , &
839+ coordinates= ' TLONG TLAT time' )
840+ var_cnt = var_cnt+1
820841
821842!- ----------------------------------------------------------------------
822843! 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, &
958979 use named_field_mod, only: named_field_get
959980 use grid, only: REGION_MASK
960981 use c14_atm_forcing_mod, only: c14_atm_forcing_update_data, c14_atm_forcing_get_data
982+ use tavg, only: accumulate_tavg_now
961983
962984! !INPUT PARAMETERS:
963985
@@ -1012,6 +1034,7 @@ subroutine abio_dic_dic14_set_sflux(U10_SQR,IFRAC,PRESS,SST,SSS, &
10121034 PHHI, & ! upper bound for ph in solver
10131035 ABIO_DIC_ROW, & ! row of DIC values for solver
10141036 CO2STAR_ROW, & ! CO2STAR from solver
1037+ CO2STAR_ROW_TMP, & ! CO2STAR from solver
10151038 DCO2STAR_ROW, & ! DCO2STAR from solver
10161039 pCO2SURF_ROW, & ! pCO2SURF from solver
10171040 DpCO2_ROW, & ! DpCO2 from solver
@@ -1058,7 +1081,7 @@ subroutine abio_dic_dic14_set_sflux(U10_SQR,IFRAC,PRESS,SST,SSS, &
10581081 ! $OMP PARALLEL DO PRIVATE(iblock,j,XKW_ICE,CO2_SCHMIDT_USED,PV,SiO2, PO4,&
10591082 ! $OMP pCO2, D14C,SURF_VALS_DIC,SURF_VALS_DIC14,&
10601083 ! $OMP R14C_ocn,R14C_atm,PHLO,PHHI,ABIO_DIC_ROW,&
1061- ! $OMP ALK_ROW,PH_NEW,CO2STAR_ROW, DCO2STAR_ROW,&
1084+ ! $OMP ALK_ROW,PH_NEW,CO2STAR_ROW,CO2STAR_ROW_TMP, DCO2STAR_ROW,&
10621085 ! $OMP pCO2SURF_ROW,DpCO2_ROW,GAS_FLUX_ABIO_DIC,&
10631086 ! $OMP GAS_FLUX_ABIO_DIC14,CO3_ROW)
10641087
@@ -1225,6 +1248,51 @@ subroutine abio_dic_dic14_set_sflux(U10_SQR,IFRAC,PRESS,SST,SSS, &
12251248 ABIO_DIC_SFLUX_TAVG(:,j,13 ,iblock) = DpCO2_ROW
12261249 ABIO_DIC_SFLUX_TAVG(:,j,14 ,iblock) = ALK_ROW
12271250
1251+ !- ----------------------------------------------------------------------
1252+ ! compute derivatives of surface flux terms, if requested
1253+ !- ----------------------------------------------------------------------
1254+
1255+ if (accumulate_tavg_now(tavg_d_SF_ABIO_DIC14_d_ABIO_DIC14)) then
1256+
1257+ ! d_SF_ABIO_DIC14_d_ABIO_DIC14
1258+ where (SURF_VALS_DIC(:,j) /= c0)
1259+ ABIO_DIC_SFLUX_TAVG(:,j,18 ,iblock) = (- 1 ) * PV(:,j) * CO2STAR_ROW / SURF_VALS_DIC(:,j)
1260+ elsewhere
1261+ ABIO_DIC_SFLUX_TAVG(:,j,18 ,iblock) = c0
1262+ endwhere
1263+
1264+ endif
1265+
1266+ if (accumulate_tavg_now(tavg_d_SF_ABIO_DIC_d_ABIO_DIC) .or. &
1267+ accumulate_tavg_now(tavg_d_SF_ABIO_DIC14_d_ABIO_DIC)) then
1268+
1269+ call co2calc_row(iblock, j, LAND_MASK(:,j,iblock), .true. , &
1270+ .false. , SST(:,j,iblock), SSS(:,j,iblock), &
1271+ ABIO_DIC_ROW + c1, ALK_ROW, PO4(:,j), SiO2(:,j), &
1272+ PHLO, PHHI, PH_NEW, pCO2(:,j), &
1273+ AP_USED(:,j,iblock), CO2STAR_ROW_TMP, &
1274+ DCO2STAR_ROW, pCO2SURF_ROW, DpCO2_ROW, CO3_ROW)
1275+
1276+ call co2calc_row(iblock, j, LAND_MASK(:,j,iblock), .true. , &
1277+ .false. , SST(:,j,iblock), SSS(:,j,iblock), &
1278+ ABIO_DIC_ROW - c1, ALK_ROW, PO4(:,j), SiO2(:,j), &
1279+ PHLO, PHHI, PH_NEW, pCO2(:,j), &
1280+ AP_USED(:,j,iblock), CO2STAR_ROW, &
1281+ DCO2STAR_ROW, pCO2SURF_ROW, DpCO2_ROW, CO3_ROW)
1282+
1283+ ! d_SF_ABIO_DIC_d_ABIO_DIC
1284+ ABIO_DIC_SFLUX_TAVG(:,j,16 ,iblock) = (- 1 ) * PV(:,j) * &
1285+ (CO2STAR_ROW_TMP - CO2STAR_ROW) * p5
1286+
1287+ ! d_SF_ABIO_DIC14_d_ABIO_DIC
1288+ where (SURF_VALS_DIC(:,j) /= c0)
1289+ ABIO_DIC_SFLUX_TAVG(:,j,17 ,iblock) = (- 1 ) * PV(:,j) * SURF_VALS_DIC14(:,j) * &
1290+ (CO2STAR_ROW_TMP / (SURF_VALS_DIC(:,j) + c1) - CO2STAR_ROW / (SURF_VALS_DIC(:,j) - c1)) * p5
1291+ elsewhere
1292+ ABIO_DIC_SFLUX_TAVG(:,j,17 ,iblock) = c0
1293+ endwhere
1294+
1295+ endif
12281296
12291297 end do ! j = 1,ny_block
12301298!- ----------------------------------------------------------------------
@@ -1406,6 +1474,9 @@ subroutine abio_dic_dic14_tavg_forcing
14061474 call accumulate_tavg_field(ABIO_DIC_SFLUX_TAVG(:,:,13 ,iblock),tavg_ABIO_DpCO2,iblock,1 )
14071475 call accumulate_tavg_field(ABIO_DIC_SFLUX_TAVG(:,:,14 ,iblock),tavg_ABIO_ALK,iblock,1 )
14081476 call accumulate_tavg_field(ABIO_DIC_SFLUX_TAVG(:,:,15 ,iblock),tavg_ABIO_D14Catm,iblock,1 )
1477+ call accumulate_tavg_field(ABIO_DIC_SFLUX_TAVG(:,:,16 ,iblock),tavg_d_SF_ABIO_DIC_d_ABIO_DIC,iblock,1 )
1478+ call accumulate_tavg_field(ABIO_DIC_SFLUX_TAVG(:,:,17 ,iblock),tavg_d_SF_ABIO_DIC14_d_ABIO_DIC,iblock,1 )
1479+ call accumulate_tavg_field(ABIO_DIC_SFLUX_TAVG(:,:,18 ,iblock),tavg_d_SF_ABIO_DIC14_d_ABIO_DIC14,iblock,1 )
14091480 end do
14101481
14111482
0 commit comments