74
74
! ! ab_htotal_valid_min = 3.981E-09
75
75
! ! ab_htotal_valid_max = 1.259E-08
76
76
! ! #
77
- ! ! ab_htotal14c_src_file = INPUT/init_ocean_cobalt.res.nc
78
- ! ! ab_htotal14c_src_var_name = htotal
79
- ! ! ab_htotal14c_src_var_unit = none
80
- ! ! ab_htotal14c_dest_var_name = ab_htotal14c
81
- ! ! ab_htotal14c_dest_var_unit = mol kg-1
82
- ! ! ab_htotal14c_src_var_record = 1
83
- ! ! ab_htotal14c_src_var_gridspec = NONE
84
- ! ! ab_htotal14c_valid_min = 3.981E-09
85
- ! ! ab_htotal14c_valid_max = 1.259E-08
86
- ! ! #
87
77
! ! ## divide by 1e6 to convert from umol/kg to mol/kg
88
78
! ! dissicabio_src_file = INPUT/Preind_DIC.nc
89
79
! ! dissicabio_src_var_name = Preind_DIC
155
145
! ! #-- Non-CMIP Tracer Fields
156
146
! ! "generic_abiotic", "ab_alk", "ab_alk", "ocean_abiotic","all",.true.,"none", 2
157
147
! ! "generic_abiotic", "ab_htotal", "ab_htotal", "ocean_abiotic","all",.true.,"none", 2
158
- ! ! "generic_abiotic", "ab_htotal14c", "ab_htotal14c", "ocean_abiotic","all",.true.,"none", 2
159
148
! ! "generic_abiotic", "ab_po4", "ab_po4", "ocean_abiotic","all",.true.,"none", 2
160
149
! ! "generic_abiotic", "ab_sio4", "ab_sio4", "ocean_abiotic","all",.true.,"none", 2
161
150
! ! "generic_abiotic", "jdecay_di14c", "jdecay_di14c", "ocean_abiotic","all",.true.,"none", 2
162
151
! ! "generic_abiotic_z", "ab_alk", "ab_alk", "ocean_abiotic_z","all",.true.,"none",2
163
152
! ! "generic_abiotic_z", "ab_htotal", "ab_htotal", "ocean_abiotic_z","all",.true.,"none",2
164
- ! ! "generic_abiotic_z", "ab_htotal14c", "ab_htotal14c", "ocean_abiotic_z","all",.true.,"none",2
165
153
! ! "generic_abiotic_z", "ab_po4", "ab_po4", "ocean_abiotic_z","all",.true.,"none",2
166
154
! ! "generic_abiotic_z", "ab_sio4", "ab_sio4", "ocean_abiotic_z","all",.true.,"none",2
167
155
168
156
! ! #-- Non-CMIP Surface Fields
169
157
! ! "generic_abiotic", "sfc_ab_alk", "sfc_ab_alk", "ocean_abiotic","all",.true.,"none",2
170
158
! ! "generic_abiotic", "sfc_ab_htotal", "sfc_ab_htotal", "ocean_abiotic","all",.true.,"none",2
171
- ! ! "generic_abiotic", "sfc_ab_htotal14c", "sfc_ab_htotal14c", "ocean_abiotic","all",.true.,"none",2
172
159
! ! "generic_abiotic", "sfc_ab_po4", "sfc_ab_po4", "ocean_abiotic","all",.true.,"none",2
173
160
! ! "generic_abiotic", "sfc_ab_sio4", "sfc_ab_sio4", "ocean_abiotic","all",.true.,"none",2
174
161
! !
@@ -269,7 +256,7 @@ module generic_abiotic
269
256
270
257
! Diagnostic Output IDs
271
258
integer :: id_dissicabioos=- 1 , id_dissi14cabioos=- 1
272
- integer :: id_sfc_ab_htotal=- 1 , id_sfc_ab_htotal14c =- 1
259
+ integer :: id_sfc_ab_htotal=- 1
273
260
integer :: id_ab_alk=- 1 , id_ab_po4=- 1 , id_ab_sio4=- 1
274
261
integer :: id_sfc_ab_alk=- 1 , id_sfc_ab_po4=- 1 , id_sfc_ab_sio4=- 1
275
262
integer :: id_ab_pco2surf=- 1 , id_ab_p14co2surf=- 1
@@ -321,7 +308,7 @@ module generic_abiotic
321
308
322
309
type (CO2_dope_vector) :: CO2_dope_vec
323
310
type (generic_abiotic_params) :: abiotic
324
-
311
+
325
312
contains
326
313
327
314
subroutine generic_abiotic_register (tracer_list )
@@ -372,7 +359,7 @@ end subroutine generic_abiotic_register
372
359
373
360
! > \brief Initialize the generic abiotic module
374
361
! !
375
- ! ! This subroutine adds the dissicabio, dissi14cabio, ab_htotal, and ab_htotal14c tracers to the list of
362
+ ! ! This subroutine adds the dissicabio, dissi14cabio, and ab_htotal tracers to the list of
376
363
! ! generic tracers passed to it via utility subroutine g_tracer_add(). Adds all the parameters
377
364
! ! used by this module via utility subroutine g_tracer_add_param(). Allocates all work arrays used
378
365
! ! in the module.
@@ -460,10 +447,6 @@ subroutine generic_abiotic_register_diag(diag_list)
460
447
abiotic% id_sfc_ab_htotal = register_diag_field(package_name, vardesc_temp% name, axes(1 :2 ),&
461
448
init_time, vardesc_temp% longname,vardesc_temp% units, missing_value = missing_value1)
462
449
463
- vardesc_temp = vardesc(" sfc_ab_htotal14c" ," Surface Abiotic Htotal for 14C" ,' h' ,' 1' ,' s' ,' mol kg-1' ,' f' )
464
- abiotic% id_sfc_ab_htotal14c = register_diag_field(package_name, vardesc_temp% name, axes(1 :2 ),&
465
- init_time, vardesc_temp% longname,vardesc_temp% units, missing_value = missing_value1)
466
-
467
450
vardesc_temp = vardesc(" ab_pco2surf" ," Oceanic Abiotic pCO2" ,' h' ,' 1' ,' s' ,' uatm' ,' f' )
468
451
abiotic% id_ab_pco2surf = register_diag_field(package_name, vardesc_temp% name, axes(1 :2 ),&
469
452
init_time, vardesc_temp% longname,vardesc_temp% units, missing_value = missing_value1)
@@ -720,13 +703,6 @@ subroutine user_add_tracers(tracer_list)
720
703
prog = .false. , &
721
704
init_value = abiotic% htotal_in )
722
705
723
- call g_tracer_add(tracer_list,package_name, &
724
- name = ' ab_htotal14c' , &
725
- longname = ' abiotic H+ ion concentration for 14C' , &
726
- units = ' mol/kg' , &
727
- prog = .false. , &
728
- init_value = abiotic% htotal14c_in )
729
-
730
706
end subroutine user_add_tracers
731
707
732
708
@@ -762,7 +738,6 @@ subroutine generic_abiotic_update_from_source(tracer_list,Temp,Salt,sosga,rho_dz
762
738
grid_tmask= grid_tmask,grid_mask_coast= mask_coast,grid_kmt= grid_kmt)
763
739
764
740
call g_tracer_get_values(tracer_list,' ab_htotal' , ' field' , abiotic% f_htotal ,isd,jsd,ntau= 1 )
765
- call g_tracer_get_values(tracer_list,' ab_htotal14c' , ' field' , abiotic% f_htotal14c ,isd,jsd,ntau= 1 )
766
741
call g_tracer_get_values(tracer_list,' dissicabio' ,' field' , abiotic% f_dissicabio ,isd,jsd,ntau= tau)
767
742
call g_tracer_get_values(tracer_list,' dissi14cabio' ,' field' , abiotic% f_dissi14cabio ,isd,jsd,ntau= tau)
768
743
@@ -812,29 +787,22 @@ subroutine generic_abiotic_update_from_source(tracer_list,Temp,Salt,sosga,rho_dz
812
787
co2star= abiotic% abco2_csurf(:,:), alpha= abiotic% abco2_alpha(:,:), &
813
788
pCO2surf= abiotic% abpco2_csurf(:,:))
814
789
815
- call FMS_ocmip2_co2calc(CO2_dope_vec,grid_tmask(:,:,k),&
816
- Temp(:,:,k), Salt(:,:,k), &
817
- abiotic% f_dissi14cabio(:,:,k), &
818
- abiotic% f_po4(:,:,k), &
819
- abiotic% f_sio4(:,:,k), &
820
- abiotic% f_alk(:,:,k), &
821
- abiotic% htotal14clo, abiotic% htotal14chi,&
822
- ! InOut
823
- abiotic% f_htotal14c(:,:,k), &
824
- ! OUT
825
- co2star= abiotic% ab14co2_csurf(:,:), alpha= abiotic% ab14co2_alpha(:,:), &
826
- pCO2surf= abiotic% abp14co2_csurf(:,:))
790
+ ! Update csurf and alpha based on the atmospheric 14C/12C ratio
827
791
828
- ! Update alpha based on the atmospheric 14C/12C ratio
792
+ ! The 14C surface concentration (ab14co2_csurf, 14CO2*) is proportional to the 14C surface concentration
793
+ ! times the ratio of the *ocean* surface carbon concentration (i.e. DI14C/DIC). The 14C solubility (ab14co2_alpha)
794
+ ! is proportional to abco2_alpha times the 14C to C ratio of the *atmos* carbon concentration as the
795
+ ! ocean carbon solubility mainly depends on temperature and the atmos partial pressure of the gas.
829
796
830
797
call data_override(' OCN' , ' delta_14catm' , abiotic% delta_14catm(isc:iec,jsc:jec), model_time)
831
798
do j = jsc, jec ; do i = isc, iec ! {
832
- abiotic% ab14co2_alpha(i,j) = abiotic% ab14co2_alpha(i,j) * &
799
+ abiotic% ab14co2_csurf(i,j) = abiotic% abco2_csurf(i,j) * &
800
+ (abiotic% f_dissi14cabio(i,j,1 )/ (abiotic% f_dissicabio(i,j,1 ) + epsln))
801
+ abiotic% ab14co2_alpha(i,j) = abiotic% abco2_alpha(i,j) * &
833
802
(1.0 + abiotic% delta_14catm(i,j) * 1.0e-03 )
834
803
enddo ; enddo ; ! } i, j
835
804
836
805
call g_tracer_set_values(tracer_list,' ab_htotal' , ' field' ,abiotic% f_htotal ,isd,jsd,ntau= 1 )
837
- call g_tracer_set_values(tracer_list,' ab_htotal14c' ,' field' ,abiotic% f_htotal14c,isd,jsd,ntau= 1 )
838
806
839
807
call g_tracer_set_values(tracer_list,' dissicabio' ,' alpha' ,abiotic% abco2_alpha ,isd,jsd)
840
808
call g_tracer_set_values(tracer_list,' dissicabio' ,' csurf' ,abiotic% abco2_csurf ,isd,jsd)
@@ -844,7 +812,6 @@ subroutine generic_abiotic_update_from_source(tracer_list,Temp,Salt,sosga,rho_dz
844
812
call g_tracer_get_pointer(tracer_list,' dissicabio' , ' field' ,abiotic% p_dissicabio)
845
813
call g_tracer_get_pointer(tracer_list,' dissi14cabio' ,' field' ,abiotic% p_dissi14cabio)
846
814
call g_tracer_get_pointer(tracer_list,' ab_htotal' ,' field' ,abiotic% p_htotal)
847
- call g_tracer_get_pointer(tracer_list,' ab_htotal14c' ,' field' ,abiotic% p_htotal14c)
848
815
849
816
call g_tracer_get_pointer(tracer_list,' dissicabio' ,' stf_gas' ,abiotic% stf_gas_dissicabio)
850
817
call g_tracer_get_pointer(tracer_list,' dissi14cabio' ,' stf_gas' ,abiotic% stf_gas_dissi14cabio)
@@ -923,11 +890,6 @@ subroutine generic_abiotic_update_from_source(tracer_list,Temp,Salt,sosga,rho_dz
923
890
model_time, rmask = grid_tmask(:,:,1 ),&
924
891
is_in= isc, js_in= jsc,ie_in= iec, je_in= jec)
925
892
926
- if (abiotic% id_sfc_ab_htotal14c .gt. 0 ) &
927
- used = g_send_data(abiotic% id_sfc_ab_htotal14c, abiotic% f_htotal14c(:,:,1 ), &
928
- model_time, rmask = grid_tmask(:,:,1 ),&
929
- is_in= isc, js_in= jsc,ie_in= iec, je_in= jec)
930
-
931
893
if (abiotic% id_jdecay_di14c .gt. 0 ) &
932
894
used = g_send_data(abiotic% id_jdecay_di14c, abiotic% jdecay_di14c(:,:,:), &
933
895
model_time, rmask = grid_tmask(:,:,:), &
@@ -1010,7 +972,6 @@ subroutine generic_abiotic_set_boundary_values(tracer_list,SST,SSS,sosga,rho,ilb
1010
972
call g_tracer_get_pointer(tracer_list,' dissi14cabio' , ' field' , dissi14cabio_field)
1011
973
1012
974
call g_tracer_get_values(tracer_list, ' ab_htotal' , ' field' , htotal_field,isd,jsd,ntau= 1 )
1013
- call g_tracer_get_values(tracer_list, ' ab_htotal14c' , ' field' , htotal14c_field,isd,jsd,ntau= 1 )
1014
975
1015
976
do j = jsc, jec ; do i = isc, iec ! {
1016
977
abiotic% htotallo(i,j) = abiotic% htotal_scale_lo * htotal_field(i,j,1 )
@@ -1050,31 +1011,21 @@ subroutine generic_abiotic_set_boundary_values(tracer_list,SST,SSS,sosga,rho,ilb
1050
1011
co2star= abco2_csurf(:,:), alpha= abco2_alpha(:,:), &
1051
1012
pCO2surf= abiotic% abpco2_csurf(:,:))
1052
1013
1014
+ ! Update csurf and alpha based on the atmospheric 14C/12C ratio
1053
1015
1054
- call FMS_ocmip2_co2calc(CO2_dope_vec,grid_tmask(:,:,1 ), &
1055
- SST(:,:), SSS(:,:), &
1056
- dissi14cabio_field(:,:,1 ,tau), &
1057
- abiotic% f_po4(:,:,1 ), &
1058
- abiotic% f_sio4(:,:,1 ), &
1059
- abiotic% f_alk(:,:,1 ), &
1060
- abiotic% htotal14clo, abiotic% htotal14chi, &
1061
- ! InOut
1062
- htotal14c_field(:,:,1 ), &
1063
- ! Optional In
1064
- co2_calc= trim (co2_calc), &
1065
- zt= abiotic% zt(:,:,1 ), &
1066
- ! OUT
1067
- co2star= ab14co2_csurf(:,:), alpha= ab14co2_alpha(:,:),&
1068
- pCO2surf= abiotic% abp14co2_csurf(:,:))
1016
+ ! The 14C surface concentration (ab14co2_csurf, 14CO2*) is proportional to the 14C surface concentration
1017
+ ! times the ratio of the *ocean* surface carbon concentration (i.e. DI14C/DIC). The 14C solubility (ab14co2_alpha)
1018
+ ! is proportional to abco2_alpha times the 14C to C ratio of the *atmos* carbon concentration as the
1019
+ ! ocean carbon solubility mainly depends on temperature and the atmos partial pressure of the gas.
1069
1020
1070
- ! Update alpha based on the atmospheric 14C/12C ratio
1071
- call data_override(' OCN' , ' delta_14catm' , delta_14catm(isc:iec,jsc:jec), model_time)
1072
- do j = jsc, jec ; do i = isc, iec ! {
1073
- ab14co2_alpha(i,j) = ab14co2_alpha(i,j) * (1.0 + delta_14catm(i,j) * 1.0e-03 )
1074
- enddo ; enddo ; ! } i, j
1021
+ call data_override(' OCN' , ' delta_14catm' , delta_14catm(isc:iec,jsc:jec), model_time)
1022
+ do j = jsc, jec ; do i = isc, iec ! {
1023
+ ab14co2_csurf(i,j) = abco2_csurf(i,j) * &
1024
+ (dissi14cabio_field(i,j,1 ,tau)/ (dissicabio_field(i,j,1 ,tau) + epsln))
1025
+ ab14co2_alpha(i,j) = abco2_alpha(i,j) * (1.0 + delta_14catm(i,j) * 1.0e-03 )
1026
+ enddo ; enddo ; ! } i, j
1075
1027
1076
1028
call g_tracer_set_values(tracer_list,' ab_htotal' ,' field' ,htotal_field,isd,jsd,ntau= 1 )
1077
- call g_tracer_set_values(tracer_list,' ab_htotal14c' ,' field' ,htotal14c_field,isd,jsd,ntau= 1 )
1078
1029
call g_tracer_set_values(tracer_list,' dissicabio' ,' alpha' ,abco2_alpha ,isd,jsd)
1079
1030
call g_tracer_set_values(tracer_list,' dissicabio' ,' csurf' ,abco2_csurf ,isd,jsd)
1080
1031
call g_tracer_set_values(tracer_list,' dissi14cabio' ,' alpha' ,ab14co2_alpha ,isd,jsd)
0 commit comments