From 845b5853897a76d4f39911dca5b4fda508fecbcc Mon Sep 17 00:00:00 2001 From: apcraig Date: Tue, 4 Jun 2024 10:55:20 -0600 Subject: [PATCH] Initial modifications for standalone Icepack bgc capability --- columnphysics/icepack_algae.F90 | 16 +- columnphysics/icepack_parameters.F90 | 4 +- columnphysics/icepack_zbgc.F90 | 4 +- configuration/driver/icedrv_init_column.F90 | 1113 ++----------------- 4 files changed, 108 insertions(+), 1029 deletions(-) diff --git a/columnphysics/icepack_algae.F90 b/columnphysics/icepack_algae.F90 index 7ed1e937..9d80c820 100644 --- a/columnphysics/icepack_algae.F90 +++ b/columnphysics/icepack_algae.F90 @@ -1879,11 +1879,15 @@ subroutine algal_dyn (dt, n_doc, n_dic, & ! Nutrient limitation !----------------------------------------------------------------------- - Nit_lim(k) = Nitin/(Nitin + K_Nit(k)) + if (Nitin + K_Nit(k) /= c0) then + Nit_lim(k) = Nitin/(Nitin + K_Nit(k)) + endif Am_lim(k) = c0 N_lim(k) = Nit_lim(k) if (tr_bgc_Am) then - Am_lim(k) = Amin/(Amin + K_Am(k)) + if (Amin + K_Am(k) /= c0) then + Am_lim(k) = Amin/(Amin + K_Am(k)) + endif N_lim(k) = min(c1, Nit_lim(k) + Am_lim(k)) endif Sil_lim(k) = c1 @@ -1936,10 +1940,12 @@ subroutine algal_dyn (dt, n_doc, n_dic, & U_Sil(k) = U_Sil_f(k)*U_Sil_tot U_Fe(k) = U_Fe_f(k)*U_Fe_tot + grow_N(k) = (U_Nit(k) + U_Am(k)) if (R_Si2N(k) > c0) then - grow_N(k) = min(U_Sil(k)/R_Si2N(k),U_Nit(k) + U_Am(k), U_Fe(k)/R_Fe2N(k)) - else - grow_N(k) = min(U_Nit(k) + U_Am(k),U_Fe(k)/R_Fe2N(k)) + grow_N(k) = min(grow_N(k),U_Sil(k)/R_Si2N(k)) + endif + if (R_Fe2N(k) /= c0) then + grow_N(k) = min(grow_N(k),U_Fe(k)/R_Fe2N(k)) endif fr_Am(k) = c0 diff --git a/columnphysics/icepack_parameters.F90 b/columnphysics/icepack_parameters.F90 index 1fa73979..5b3a422a 100644 --- a/columnphysics/icepack_parameters.F90 +++ b/columnphysics/icepack_parameters.F90 @@ -587,7 +587,6 @@ subroutine icepack_init_parameters( & snowage_rhos_in, snowage_Tgrd_in, snowage_T_in, & snowage_tau_in, snowage_kappa_in, snowage_drdt0_in, & snw_aging_table_in, snw_ssp_table_in, grid_o_t_in, tau_min_in, tau_max_in, & - ! these are defined in icepack_init_zbgc f_don_protein_in, kn_bac_protein_in, f_don_Am_protein_in, & ratio_Si2N_diatoms_in, & ratio_Si2N_sp_in, ratio_Si2N_phaeo_in, ratio_S2N_diatoms_in, & @@ -618,8 +617,7 @@ subroutine icepack_init_parameters( & ratio_C2N_diatoms_in, ratio_C2N_sp_in, ratio_C2N_phaeo_in, & ratio_chl2N_diatoms_in, ratio_chl2N_sp_in, ratio_chl2N_phaeo_in, & F_abs_chl_diatoms_in, F_abs_chl_sp_in, F_abs_chl_phaeo_in, & - ratio_C2N_proteins_in & - ) + ratio_C2N_proteins_in ) !----------------------------------------------------------------- ! control settings diff --git a/columnphysics/icepack_zbgc.F90 b/columnphysics/icepack_zbgc.F90 index 6a31d1eb..9a91618d 100644 --- a/columnphysics/icepack_zbgc.F90 +++ b/columnphysics/icepack_zbgc.F90 @@ -782,11 +782,11 @@ subroutine icepack_biogeochemistry(dt, & else first_ice(n) = .true. if (tr_brine) trcrn(nt_fbri,n) = c1 - !if (z_tracers) then + if (z_tracers) then do mm = 1,nbtrcr trcrn(nt_zbgc_frac-1+mm,n) = zbgc_frac_init(mm) enddo - !endif + endif endif if (aicen(n) > puny) then diff --git a/configuration/driver/icedrv_init_column.F90 b/configuration/driver/icedrv_init_column.F90 index 4c0b925c..61c04a29 100644 --- a/configuration/driver/icedrv_init_column.F90 +++ b/configuration/driver/icedrv_init_column.F90 @@ -528,7 +528,6 @@ subroutine init_hbrine() end subroutine init_hbrine -#ifdef NEWINITZBGC !======================================================================= ! Namelist variables, set to default values; may be altered at run time @@ -1064,877 +1063,6 @@ subroutine init_zbgc dEdd_algae = .false. endif - if (modal_aero .AND. (.NOT. tr_zaero) .AND. (.NOT. tr_aero)) then - modal_aero = .false. - endif - - if (modal_aero .AND. trim(shortwave(1:4)) /= 'dEdd') then - write(nu_diag,*) 'WARNING: modal_aero = T but shortwave /= dEdd' - write(nu_diag,*) 'WARNING: setting modal_aero = F' - modal_aero = .false. - endif - if (n_algae > icepack_max_algae) then - print*, 'error:number of algal types exceeds icepack_max_algae' - call icedrv_system_abort(file=__FILE__,line=__LINE__) - endif - if (n_doc > icepack_max_doc) then - print*, 'error:number of algal types exceeds icepack_max_doc' - call icedrv_system_abort(file=__FILE__,line=__LINE__) - endif - if (n_dic > icepack_max_dic) then - print*, 'error:number of dic types exceeds icepack_max_dic' - call icedrv_system_abort(file=__FILE__,line=__LINE__) - endif - if (n_don > icepack_max_don) then - print*, 'error:number of don types exceeds icepack_max_don' - call icedrv_system_abort(file=__FILE__,line=__LINE__) - endif - if (n_fed > icepack_max_fe) then - print*, 'error:number of dissolved fe types exceeds icepack_max_fe' - call icedrv_system_abort(file=__FILE__,line=__LINE__) - endif - if (n_fep > icepack_max_fe) then - print*, 'error:number of particulate fe types exceeds icepack_max_fe' - call icedrv_system_abort(file=__FILE__,line=__LINE__) - endif - - if ((TRBGCS == 0 .and. skl_bgc) .or. (TRALG == 0 .and. skl_bgc)) then - write(nu_diag,*) & - 'WARNING: skl_bgc=T but 0 bgc or algal tracers compiled' - write(nu_diag,*) & - 'WARNING: setting skl_bgc = F' - skl_bgc = .false. - endif - - if ((TRBGCZ == 0 .and. solve_zbgc) .or. (TRALG == 0 .and. solve_zbgc)) then - write(nu_diag,*) & - 'WARNING: solve_zbgc=T but 0 zbgc or algal tracers compiled' - write(nu_diag,*) & - 'WARNING: setting solve_zbgc = F' - solve_zbgc = .false. - endif - - if (solve_zbgc .and. .not. z_tracers) z_tracers = .true. - if (skl_bgc .or. solve_zbgc) then - tr_bgc_N = .true. ! minimum NP biogeochemistry - tr_bgc_Nit = .true. - else - tr_bgc_N = .false. - tr_bgc_C = .false. - tr_bgc_chl = .false. - tr_bgc_Nit = .false. - tr_bgc_Am = .false. - tr_bgc_Sil = .false. - tr_bgc_hum = .false. - tr_bgc_DMS = .false. - tr_bgc_PON = .false. - tr_bgc_DON = .false. - tr_bgc_Fe = .false. - endif - - !----------------------------------------------------------------- - ! z layer aerosols - !----------------------------------------------------------------- - if (tr_zaero .and. .not. z_tracers) z_tracers = .true. - - if (n_zaero > icepack_max_aero) then - print*, 'error:number of z aerosols exceeds icepack_max_aero' - call icedrv_system_abort(file=__FILE__,line=__LINE__) - endif - - if (skl_bgc .and. n_bgc < 2) then - write (nu_diag,*) ' ' - write (nu_diag,*) 'comp_ice must have number of bgc tracers >= 2' - write (nu_diag,*) 'number of bgc tracers compiled:',n_bgc - call icedrv_system_abort(file=__FILE__,line=__LINE__) - endif - - if (solve_zbgc .and. n_bgc < 2) then - write (nu_diag,*) ' ' - write (nu_diag,*) 'comp_ice must have number of zbgc tracers >= 2' - write (nu_diag,*) 'number of bgc tracers compiled:',n_bgc - call icedrv_system_abort(file=__FILE__,line=__LINE__) - endif - - if (tr_zaero .and. TRZAERO < 1) then - write (nu_diag,*) ' ' - write (nu_diag,*) 'comp_ice must have number of TRZAERO > 0' - write (nu_diag,*) 'in order to solve z aerosols:',TRZAERO - call icedrv_system_abort(file=__FILE__,line=__LINE__) - endif - - !----------------------------------------------------------------- - ! end conflict resolution - !----------------------------------------------------------------- - !----------------------------------------------------------------- - ! set Icepack values - !----------------------------------------------------------------- - - call icepack_init_parameters(ktherm_in=ktherm, shortwave_in=shortwave, & - scale_bgc_in=scale_bgc, skl_bgc_in=skl_bgc, z_tracers_in=z_tracers, & - dEdd_algae_in=dEdd_algae, solve_zbgc_in=solve_zbgc, & - bgc_flux_type_in=bgc_flux_type, grid_o_in=grid_o, l_sk_in=l_sk, & - initbio_frac_in=initbio_frac, frazil_scav_in=frazil_scav, & - grid_oS_in=grid_oS, l_skS_in=l_skS, phi_snow_in=phi_snow, & - algal_vel_in=algal_vel, R_dFe2dust_in=R_dFe2dust, & - dustFe_sol_in=dustFe_sol, T_max_in=T_max, fsal_in=fsal, & - op_dep_min_in=op_dep_min, fr_graze_s_in=fr_graze_s, & - fr_graze_e_in=fr_graze_e, fr_mort2min_in=fr_mort2min, & - fr_dFe_in=fr_dFe, k_nitrif_in=k_nitrif, t_iron_conv_in=t_iron_conv, & - max_loss_in=max_loss, max_dfe_doc1_in=max_dfe_doc1, fr_resp_in=fr_resp, & - fr_resp_s_in=fr_resp_s, y_sk_DMS_in=y_sk_DMS, t_sk_conv_in=t_sk_conv, & - t_sk_ox_in=t_sk_ox, modal_aero_in=modal_aero) - call icepack_warnings_flush(nu_diag) - if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, & - file=__FILE__, line=__LINE__) - - call icepack_init_parameters ( & - ratio_Si2N_diatoms_in = ratio_Si2N_diatoms, & - ratio_Si2N_sp_in = ratio_Si2N_sp, & - ratio_Si2N_phaeo_in = ratio_Si2N_phaeo, & - ratio_S2N_diatoms_in = ratio_S2N_diatoms, & - ratio_S2N_sp_in = ratio_S2N_sp, & - ratio_S2N_phaeo_in = ratio_S2N_phaeo, & - ratio_Fe2C_diatoms_in = ratio_Fe2C_diatoms, & - ratio_Fe2C_sp_in = ratio_Fe2C_sp, & - ratio_Fe2C_phaeo_in = ratio_Fe2C_phaeo, & - ratio_Fe2N_diatoms_in = ratio_Fe2N_diatoms, & - ratio_Fe2N_sp_in = ratio_Fe2N_sp, & - ratio_Fe2N_phaeo_in = ratio_Fe2N_phaeo, & - ratio_C2N_diatoms_in = ratio_C2N_diatoms, & - ratio_C2N_sp_in = ratio_C2N_sp, & - ratio_C2N_phaeo_in = ratio_C2N_phaeo, & - ratio_chl2N_diatoms_in = ratio_chl2N_diatoms, & - ratio_chl2N_sp_in = ratio_chl2N_sp, & - ratio_chl2N_phaeo_in = ratio_chl2N_phaeo, & - F_abs_chl_diatoms_in = F_abs_chl_diatoms, & - F_abs_chl_sp_in = F_abs_chl_sp, & - F_abs_chl_phaeo_in = F_abs_chl_phaeo, & - ratio_Fe2DON_in = ratio_Fe2DON, & - ratio_C2N_proteins_in = ratio_C2N_proteins, & - ratio_Fe2DOC_s_in = ratio_Fe2DOC_s, & - ratio_Fe2DOC_l_in = ratio_Fe2DOC_l, & - chlabs_diatoms_in = chlabs_diatoms, & - chlabs_sp_in = chlabs_sp, & - chlabs_phaeo_in = chlabs_phaeo, & - alpha2max_low_diatoms_in = alpha2max_low_diatoms, & - alpha2max_low_sp_in = alpha2max_low_sp, & - alpha2max_low_phaeo_in = alpha2max_low_phaeo, & - beta2max_diatoms_in = beta2max_diatoms, & - beta2max_sp_in = beta2max_sp, & - beta2max_phaeo_in = beta2max_phaeo, & - mu_max_diatoms_in = mu_max_diatoms, & - mu_max_sp_in = mu_max_sp, & - mu_max_phaeo_in = mu_max_phaeo, & - grow_Tdep_diatoms_in = grow_Tdep_diatoms, & - grow_Tdep_sp_in = grow_Tdep_sp, & - grow_Tdep_phaeo_in = grow_Tdep_phaeo, & - fr_graze_diatoms_in = fr_graze_diatoms, & - fr_graze_sp_in = fr_graze_sp, & - fr_graze_phaeo_in = fr_graze_phaeo, & - mort_pre_diatoms_in = mort_pre_diatoms, & - mort_pre_sp_in = mort_pre_sp, & - mort_pre_phaeo_in = mort_pre_phaeo, & - mort_Tdep_diatoms_in = mort_Tdep_diatoms, & - mort_Tdep_sp_in = mort_Tdep_sp, & - mort_Tdep_phaeo_in = mort_Tdep_phaeo, & - k_exude_diatoms_in = k_exude_diatoms, & - k_exude_sp_in = k_exude_sp, & - k_exude_phaeo_in = k_exude_phaeo, & - K_Nit_diatoms_in = K_Nit_diatoms, & - K_Nit_sp_in = K_Nit_sp, & - K_Nit_phaeo_in = K_Nit_phaeo, & - K_Am_diatoms_in = K_Am_diatoms, & - K_Am_sp_in = K_Am_sp, & - K_Am_phaeo_in = K_Am_phaeo, & - K_Sil_diatoms_in = K_Sil_diatoms, & - K_Sil_sp_in = K_Sil_sp, & - K_Sil_phaeo_in = K_Sil_phaeo, & - K_Fe_diatoms_in = K_Fe_diatoms, & - K_Fe_sp_in = K_Fe_sp, & - K_Fe_phaeo_in = K_Fe_phaeo, & - f_doc_s_in = f_doc_s, & - f_doc_l_in = f_doc_l, & - f_don_protein_in = f_don_protein, & - kn_bac_protein_in = kn_bac_protein, & - f_don_Am_protein_in = f_don_Am_protein, & - f_exude_s_in = f_exude_s, & - f_exude_l_in = f_exude_l, & - k_bac_s_in = k_bac_s, & - k_bac_l_in = k_bac_l, & - algaltype_diatoms_in = algaltype_diatoms, & - algaltype_sp_in = algaltype_sp, & - algaltype_phaeo_in = algaltype_phaeo, & - doctype_s_in = doctype_s, & - doctype_l_in = doctype_l, & - dictype_1_in = dictype_1, & - dontype_protein_in = dontype_protein, & - fedtype_1_in = fedtype_1, & - feptype_1_in = feptype_1, & - zaerotype_bc1_in = zaerotype_bc1, & - zaerotype_bc2_in = zaerotype_bc2, & - zaerotype_dust1_in = zaerotype_dust1, & - zaerotype_dust2_in = zaerotype_dust2, & - zaerotype_dust3_in = zaerotype_dust3, & - zaerotype_dust4_in = zaerotype_dust4) - call icepack_warnings_flush(nu_diag) - if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, & - file=__FILE__, line=__LINE__) - - !----------------------------------------------------------------- - ! set values in icepack - !----------------------------------------------------------------- - - call icepack_init_zbgc(trcr_base, trcr_depend, n_trcr_strata, nt_strata, printdiags=.true.) - call icepack_warnings_flush(nu_diag) - if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, & - file=__FILE__, line=__LINE__) - - 1000 format (a30,2x,f9.2) ! a30 to align formatted, unformatted statements - 1005 format (a30,2x,f9.6) ! float - 1010 format (a30,2x,l6) ! logical - 1020 format (a30,2x,i6) ! integer - 1030 format (a30, a8) ! character - - end subroutine init_zbgc - -!======================================================================= - - subroutine init_bgc_trcr(nk, nt_fbri, & - nt_bgc, nlt_bgc, & - bgctype, nt_depend, & - ntrcr, nbtrcr, & - bgc_tracer_type, trcr_depend, & - trcr_base, n_trcr_strata, & - nt_strata, bio_index) - - integer (kind=int_kind), intent(in) :: & - nk , & ! counter - nt_depend , & ! tracer dependency index - nt_fbri - - integer (kind=int_kind), intent(inout) :: & - ntrcr , & ! number of tracers - nbtrcr , & ! number of bio tracers - nt_bgc , & ! tracer index - nlt_bgc ! bio tracer index - - integer (kind=int_kind), dimension(:), intent(inout) :: & - trcr_depend , & ! tracer dependencies - n_trcr_strata, & ! number of underlying tracer layers - bio_index ! - - integer (kind=int_kind), dimension(:,:), intent(inout) :: & - nt_strata ! indices of underlying tracer layers - - real (kind=dbl_kind), dimension(:,:), intent(inout) :: & - trcr_base ! = 0 or 1 depending on tracer dependency - ! argument 2: (1) aice, (2) vice, (3) vsno - - real (kind=dbl_kind), intent(in) :: & - bgctype ! bio tracer transport type (mobile vs stationary) - - real (kind=dbl_kind), dimension(:), intent(inout) :: & - bgc_tracer_type ! bio tracer transport type array - - ! local variables - - integer (kind=int_kind) :: & - k , & ! loop index - n_strata , & ! temporary values - nt_strata1, & ! - nt_strata2 - - real (kind=dbl_kind) :: & - trcr_base1, & ! temporary values - trcr_base2, & - trcr_base3 - - character(len=*), parameter :: subname='(init_bgc_trcr)' - - !-------- - - nt_bgc = ntrcr + 1 - nbtrcr = nbtrcr + 1 - nlt_bgc = nbtrcr - bgc_tracer_type(nbtrcr) = bgctype - - if (nk > 1) then - ! include vertical bgc in snow - do k = nk, nk+1 - ntrcr = ntrcr + 1 - trcr_depend (nt_bgc + k ) = 2 ! snow volume - trcr_base (nt_bgc + k,1) = c0 - trcr_base (nt_bgc + k,2) = c0 - trcr_base (nt_bgc + k,3) = c1 - n_trcr_strata(nt_bgc + k ) = 0 - nt_strata (nt_bgc + k,1) = 0 - nt_strata (nt_bgc + k,2) = 0 - enddo - - trcr_base1 = c0 - trcr_base2 = c1 - trcr_base3 = c0 - n_strata = 1 - nt_strata1 = nt_fbri - nt_strata2 = 0 - else ! nk = 1 - trcr_base1 = c1 - trcr_base2 = c0 - trcr_base3 = c0 - n_strata = 0 - nt_strata1 = 0 - nt_strata2 = 0 - endif ! nk - - do k = 1, nk !in ice - ntrcr = ntrcr + 1 - trcr_depend (nt_bgc + k - 1 ) = nt_depend - trcr_base (nt_bgc + k - 1,1) = trcr_base1 - trcr_base (nt_bgc + k - 1,2) = trcr_base2 - trcr_base (nt_bgc + k - 1,3) = trcr_base3 - n_trcr_strata(nt_bgc + k - 1 ) = n_strata - nt_strata (nt_bgc + k - 1,1) = nt_strata1 - nt_strata (nt_bgc + k - 1,2) = nt_strata2 - enddo - - bio_index (nlt_bgc) = nt_bgc - - end subroutine init_bgc_trcr -#else - -!======================================================================= - -! Namelist variables, set to default values; may be altered at run time -! -! author Elizabeth C. Hunke, LANL -! Nicole Jeffery, LANL - - subroutine init_zbgc - - use icedrv_state, only: trcr_base, trcr_depend, n_trcr_strata - use icedrv_state, only: nt_strata - use icedrv_forcing, only: bgc_data_type - - character (len=char_len) :: & - shortwave ! from icepack - - integer (kind=int_kind) :: & - ntrcr, nbtrcr, nbtrcr_sw, & - ntrcr_o, nt_fbri, & - nt_bgc_Nit, nt_bgc_Am, nt_bgc_Sil, & - nt_bgc_DMS, nt_bgc_PON, & - nt_bgc_DMSPp, nt_bgc_DMSPd, & - nt_zbgc_frac, nlt_chl_sw, & - nlt_bgc_Nit, nlt_bgc_Am, nlt_bgc_Sil, & - nlt_bgc_DMS, nlt_bgc_DMSPp,nlt_bgc_DMSPd,& - nlt_bgc_PON, nt_bgc_hum, nlt_bgc_hum - - integer (kind=int_kind), dimension(icepack_max_aero) :: & - nlt_zaero_sw ! points to aerosol in trcrn_sw - - integer (kind=int_kind), dimension(icepack_max_algae) :: & - nlt_bgc_N , & ! algae - nlt_bgc_C , & ! - nlt_bgc_chl - - integer (kind=int_kind), dimension(icepack_max_doc) :: & - nlt_bgc_DOC ! disolved organic carbon - - integer (kind=int_kind), dimension(icepack_max_don) :: & - nlt_bgc_DON ! - - integer (kind=int_kind), dimension(icepack_max_dic) :: & - nlt_bgc_DIC ! disolved inorganic carbon - - integer (kind=int_kind), dimension(icepack_max_fe) :: & - nlt_bgc_Fed , & ! - nlt_bgc_Fep ! - - integer (kind=int_kind), dimension(icepack_max_aero) :: & - nlt_zaero ! non-reacting layer aerosols - - integer (kind=int_kind), dimension(icepack_max_algae) :: & - nt_bgc_N , & ! diatoms, phaeocystis, pico/small - nt_bgc_C , & ! diatoms, phaeocystis, pico/small - nt_bgc_chl ! diatoms, phaeocystis, pico/small - - integer (kind=int_kind), dimension(icepack_max_doc) :: & - nt_bgc_DOC ! dissolved organic carbon - - integer (kind=int_kind), dimension(icepack_max_don) :: & - nt_bgc_DON ! dissolved organic nitrogen - - integer (kind=int_kind), dimension(icepack_max_dic) :: & - nt_bgc_DIC ! dissolved inorganic carbon - - integer (kind=int_kind), dimension(icepack_max_fe) :: & - nt_bgc_Fed , & ! dissolved iron - nt_bgc_Fep ! particulate iron - - integer (kind=int_kind), dimension(icepack_max_aero) :: & - nt_zaero , & ! black carbon and other aerosols - nt_zaero_sw ! for shortwave calculation - - integer (kind=int_kind), dimension(icepack_max_nbtrcr) :: & - bio_index_o ! relates nlt_bgc_NO to ocean concentration index - - integer (kind=int_kind), dimension(icepack_max_nbtrcr) :: & - bio_index ! relates bio indices nlt_bgc_N to nt_bgc_N - - logical (kind=log_kind) :: & - tr_brine, & - tr_bgc_Nit, tr_bgc_Am, tr_bgc_Sil, & - tr_bgc_DMS, tr_bgc_PON, & - tr_bgc_N, tr_bgc_C, tr_bgc_chl, & - tr_bgc_DON, tr_bgc_Fe, tr_zaero, & - tr_bgc_hum, tr_aero - - integer (kind=int_kind) :: & - ktherm - - logical (kind=log_kind) :: & - solve_zsal, skl_bgc, z_tracers, scale_bgc, solve_zbgc, dEdd_algae, & - modal_aero, restore_bgc - - character (char_len) :: & - bgc_flux_type - - real (kind=dbl_kind) :: & - grid_o, l_sk, initbio_frac, & - frazil_scav, grid_oS, l_skS, & - phi_snow, & - ratio_Si2N_diatoms , ratio_Si2N_sp , ratio_Si2N_phaeo , & - ratio_S2N_diatoms , ratio_S2N_sp , ratio_S2N_phaeo , & - ratio_Fe2C_diatoms , ratio_Fe2C_sp , ratio_Fe2C_phaeo , & - ratio_Fe2N_diatoms , ratio_Fe2N_sp , ratio_Fe2N_phaeo , & - ratio_Fe2DON , ratio_Fe2DOC_s , ratio_Fe2DOC_l , & - fr_resp , tau_min , tau_max , & - algal_vel , R_dFe2dust , dustFe_sol , & - chlabs_diatoms , chlabs_sp , chlabs_phaeo , & - alpha2max_low_diatoms,alpha2max_low_sp , alpha2max_low_phaeo, & - beta2max_diatoms , beta2max_sp , beta2max_phaeo , & - mu_max_diatoms , mu_max_sp , mu_max_phaeo , & - grow_Tdep_diatoms , grow_Tdep_sp , grow_Tdep_phaeo , & - fr_graze_diatoms , fr_graze_sp , fr_graze_phaeo , & - mort_pre_diatoms , mort_pre_sp , mort_pre_phaeo , & - mort_Tdep_diatoms , mort_Tdep_sp , mort_Tdep_phaeo , & - k_exude_diatoms , k_exude_sp , k_exude_phaeo , & - K_Nit_diatoms , K_Nit_sp , K_Nit_phaeo , & - K_Am_diatoms , K_Am_sp , K_Am_phaeo , & - K_Sil_diatoms , K_Sil_sp , K_Sil_phaeo , & - K_Fe_diatoms , K_Fe_sp , K_Fe_phaeo , & - f_don_protein , kn_bac_protein , f_don_Am_protein , & - f_doc_s , f_doc_l , f_exude_s , & - f_exude_l , k_bac_s , k_bac_l , & - T_max , fsal , op_dep_min , & - fr_graze_s , fr_graze_e , fr_mort2min , & - fr_dFe , k_nitrif , t_iron_conv , & - max_loss , max_dfe_doc1 , fr_resp_s , & - y_sk_DMS , t_sk_conv , t_sk_ox , & - algaltype_diatoms , algaltype_sp , algaltype_phaeo , & - nitratetype , ammoniumtype , silicatetype , & - dmspptype , dmspdtype , humtype , & - doctype_s , doctype_l , dontype_protein , & - fedtype_1 , feptype_1 , zaerotype_bc1 , & - zaerotype_bc2 , zaerotype_dust1 , zaerotype_dust2 , & - zaerotype_dust3 , zaerotype_dust4 , ratio_C2N_diatoms , & - ratio_C2N_sp , ratio_C2N_phaeo , ratio_chl2N_diatoms, & - ratio_chl2N_sp , ratio_chl2N_phaeo , F_abs_chl_diatoms , & - F_abs_chl_sp , F_abs_chl_phaeo , ratio_C2N_proteins - - real (kind=dbl_kind), dimension(icepack_max_dic) :: & - dictype - - real (kind=dbl_kind), dimension(icepack_max_algae) :: & - algaltype ! tau_min for both retention and release - - real (kind=dbl_kind), dimension(icepack_max_doc) :: & - doctype - - real (kind=dbl_kind), dimension(icepack_max_don) :: & - dontype - - real (kind=dbl_kind), dimension(icepack_max_fe) :: & - fedtype - - real (kind=dbl_kind), dimension(icepack_max_fe) :: & - feptype - - real (kind=dbl_kind), dimension(icepack_max_aero) :: & - zaerotype - - real (kind=dbl_kind), dimension(icepack_max_algae) :: & - R_C2N , & ! algal C to N (mole/mole) - R_chl2N , & ! 3 algal chlorophyll to N (mg/mmol) - F_abs_chl ! to scale absorption in Dedd - - real (kind=dbl_kind), dimension(icepack_max_don) :: & ! increase compare to algal R_Fe2C - R_C2N_DON - - real (kind=dbl_kind), dimension(icepack_max_algae) :: & - R_Si2N , & ! algal Sil to N (mole/mole) - R_S2N , & ! algal S to N (mole/mole) - ! Marchetti et al 2006, 3 umol Fe/mol C for iron limited Pseudo-nitzschia - R_Fe2C , & ! algal Fe to carbon (umol/mmol) - R_Fe2N ! algal Fe to N (umol/mmol) - - real (kind=dbl_kind), dimension(icepack_max_don) :: & - R_Fe2DON ! Fe to N of DON (nmol/umol) - - real (kind=dbl_kind), dimension(icepack_max_doc) :: & - R_Fe2DOC ! Fe to C of DOC (nmol/umol) - - real (kind=dbl_kind), dimension(icepack_max_algae) :: & - chlabs , & ! chla absorption 1/m/(mg/m^3) - alpha2max_low , & ! light limitation (1/(W/m^2)) - beta2max , & ! light inhibition (1/(W/m^2)) - mu_max , & ! maximum growth rate (1/d) - grow_Tdep , & ! T dependence of growth (1/C) - fr_graze , & ! fraction of algae grazed - mort_pre , & ! mortality (1/day) - mort_Tdep , & ! T dependence of mortality (1/C) - k_exude , & ! algal carbon exudation rate (1/d) - K_Nit , & ! nitrate half saturation (mmol/m^3) - K_Am , & ! ammonium half saturation (mmol/m^3) - K_Sil , & ! silicon half saturation (mmol/m^3) - K_Fe ! iron half saturation or micromol/m^3 - - real (kind=dbl_kind), dimension(icepack_max_DON) :: & - f_don , & ! fraction of spilled grazing to DON - kn_bac , & ! Bacterial degredation of DON (1/d) - f_don_Am ! fraction of remineralized DON to Am - - real (kind=dbl_kind), dimension(icepack_max_DOC) :: & - f_exude , & ! fraction of exuded carbon to each DOC pool - k_bac ! Bacterial degredation of DOC (1/d) - - real (kind=dbl_kind), dimension(icepack_max_nbtrcr) :: & - zbgc_frac_init,&! initializes mobile fraction - bgc_tracer_type ! described tracer in mobile or stationary phases - ! < 0 is purely mobile (eg. nitrate) - ! > 0 has timescales for transitions between - ! phases based on whether the ice is melting or growing - - real (kind=dbl_kind), dimension(icepack_max_nbtrcr) :: & - zbgc_init_frac, & ! fraction of ocean tracer concentration in new ice - tau_ret, & ! retention timescale (s), mobile to stationary phase - tau_rel ! release timescale (s), stationary to mobile phase - - character (32) :: & - nml_filename = 'icepack_in' ! namelist input file name - - integer (kind=int_kind) :: & - nml_error, & ! namelist i/o error flag - k, mm , & ! loop index - ntd , & ! for tracer dependency calculation - nk , & ! - nt_depend - - character(len=*), parameter :: subname='(init_zbgc)' - - !------------------------------------------------------------ - ! Tracers have mobile and stationary phases. - ! ice growth allows for retention, ice melt facilitates mobility - ! bgc_tracer_type defines the exchange timescales between these phases - ! -1 : entirely in the mobile phase, no exchange (this is the default) - ! 0 : retention time scale is tau_min, release time scale is tau_max - ! 1 : retention time scale is tau_max, release time scale is tau_min - ! 0.5: retention time scale is tau_min, release time scale is tau_min - ! 2 : retention time scale is tau_max, release time scale is tau_max - !------------------------------------------------------------ - - !----------------------------------------------------------------- - ! namelist variables - !----------------------------------------------------------------- - - namelist /zbgc_nml/ & - tr_brine, tr_zaero, modal_aero, skl_bgc, & - z_tracers, dEdd_algae, solve_zbgc, bgc_flux_type, & - restore_bgc, scale_bgc, solve_zsal, bgc_data_type, & - tr_bgc_Nit, tr_bgc_C, tr_bgc_chl, tr_bgc_Am, tr_bgc_Sil, & - tr_bgc_DMS, tr_bgc_PON, tr_bgc_hum, tr_bgc_DON, tr_bgc_Fe, & - grid_o, l_sk, grid_oS, & - l_skS, phi_snow, initbio_frac, frazil_scav, & - ratio_Si2N_diatoms , ratio_Si2N_sp , ratio_Si2N_phaeo , & - ratio_S2N_diatoms , ratio_S2N_sp , ratio_S2N_phaeo , & - ratio_Fe2C_diatoms , ratio_Fe2C_sp , ratio_Fe2C_phaeo , & - ratio_Fe2N_diatoms , ratio_Fe2N_sp , ratio_Fe2N_phaeo , & - ratio_Fe2DON , ratio_Fe2DOC_s , ratio_Fe2DOC_l , & - fr_resp , tau_min , tau_max , & - algal_vel , R_dFe2dust , dustFe_sol , & - chlabs_diatoms , chlabs_sp , chlabs_phaeo , & - alpha2max_low_diatoms,alpha2max_low_sp , alpha2max_low_phaeo, & - beta2max_diatoms , beta2max_sp , beta2max_phaeo , & - mu_max_diatoms , mu_max_sp , mu_max_phaeo , & - grow_Tdep_diatoms , grow_Tdep_sp , grow_Tdep_phaeo , & - fr_graze_diatoms , fr_graze_sp , fr_graze_phaeo , & - mort_pre_diatoms , mort_pre_sp , mort_pre_phaeo , & - mort_Tdep_diatoms , mort_Tdep_sp , mort_Tdep_phaeo , & - k_exude_diatoms , k_exude_sp , k_exude_phaeo , & - K_Nit_diatoms , K_Nit_sp , K_Nit_phaeo , & - K_Am_diatoms , K_Am_sp , K_Am_phaeo , & - K_Sil_diatoms , K_Sil_sp , K_Sil_phaeo , & - K_Fe_diatoms , K_Fe_sp , K_Fe_phaeo , & - f_don_protein , kn_bac_protein , f_don_Am_protein , & - f_doc_s , f_doc_l , f_exude_s , & - f_exude_l , k_bac_s , k_bac_l , & - T_max , fsal , op_dep_min , & - fr_graze_s , fr_graze_e , fr_mort2min , & - fr_dFe , k_nitrif , t_iron_conv , & - max_loss , max_dfe_doc1 , fr_resp_s , & - y_sk_DMS , t_sk_conv , t_sk_ox , & - algaltype_diatoms , algaltype_sp , algaltype_phaeo , & - nitratetype , ammoniumtype , silicatetype , & - dmspptype , dmspdtype , humtype , & - doctype_s , doctype_l , dontype_protein , & - fedtype_1 , feptype_1 , zaerotype_bc1 , & - zaerotype_bc2 , zaerotype_dust1 , zaerotype_dust2 , & - zaerotype_dust3 , zaerotype_dust4 , ratio_C2N_diatoms , & - ratio_C2N_sp , ratio_C2N_phaeo , ratio_chl2N_diatoms, & - ratio_chl2N_sp , ratio_chl2N_phaeo , F_abs_chl_diatoms , & - F_abs_chl_sp , F_abs_chl_phaeo , ratio_C2N_proteins - - !----------------------------------------------------------------- - ! query Icepack values - !----------------------------------------------------------------- - - call icepack_query_tracer_sizes(ntrcr_out=ntrcr) - call icepack_query_tracer_flags(tr_aero_out=tr_aero) - call icepack_query_parameters(ktherm_out=ktherm, shortwave_out=shortwave, & - scale_bgc_out=scale_bgc, skl_bgc_out=skl_bgc, z_tracers_out=z_tracers, & - dEdd_algae_out=dEdd_algae, solve_zbgc_out=solve_zbgc, phi_snow_out=phi_snow, & - bgc_flux_type_out=bgc_flux_type, grid_o_out=grid_o, l_sk_out=l_sk, & - initbio_frac_out=initbio_frac, frazil_scav_out=frazil_scav, & - algal_vel_out=algal_vel, R_dFe2dust_out=R_dFe2dust, & - dustFe_sol_out=dustFe_sol, T_max_out=T_max, fsal_out=fsal, & - op_dep_min_out=op_dep_min, fr_graze_s_out=fr_graze_s, & - fr_graze_e_out=fr_graze_e, fr_mort2min_out=fr_mort2min, & - fr_dFe_out=fr_dFe, k_nitrif_out=k_nitrif, t_iron_conv_out=t_iron_conv, & - max_loss_out=max_loss, max_dfe_doc1_out=max_dfe_doc1, & - fr_resp_s_out=fr_resp_s, y_sk_DMS_out=y_sk_DMS, t_sk_conv_out=t_sk_conv, & - t_sk_ox_out=t_sk_ox) - call icepack_warnings_flush(nu_diag) - if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, & - file=__FILE__, line=__LINE__) - - !----------------------------------------------------------------- - ! default values - !----------------------------------------------------------------- - tr_brine = .false. ! brine height differs from ice height - tr_zaero = .false. ! z aerosol tracers - modal_aero = .false. ! use modal aerosol treatment of aerosols - restore_bgc = .false. ! restore bgc if true - solve_zsal = .false. ! update salinity tracer profile from solve_S_dt - bgc_data_type = 'default'! source of bgc data - tr_bgc_PON = .false. !--------------------------------------------- - tr_bgc_Nit = .false. ! biogeochemistry (skl or zbgc) - tr_bgc_C = .false. ! if skl_bgc = .true. then skl - tr_bgc_chl = .false. ! if z_tracers = .true. then vertically resolved - tr_bgc_Sil = .false. ! if z_tracers + solve_zbgc = .true. then - tr_bgc_Am = .false. ! vertically resolved with reactions - tr_bgc_DMS = .false. !------------------------------------------------ - tr_bgc_DON = .false. ! - tr_bgc_hum = .false. ! - tr_bgc_Fe = .false. ! - tr_bgc_N = .true. ! - - ! z biology parameters - ratio_Si2N_diatoms = 1.8_dbl_kind ! algal Si to N (mol/mol) - ratio_Si2N_sp = c0 ! diatoms, small plankton, phaeocystis - ratio_Si2N_phaeo = c0 - ratio_S2N_diatoms = 0.03_dbl_kind ! algal S to N (mol/mol) - ratio_S2N_sp = 0.03_dbl_kind - ratio_S2N_phaeo = 0.03_dbl_kind - ratio_Fe2C_diatoms = 0.0033_dbl_kind ! algal Fe to C (umol/mol) - ratio_Fe2C_sp = 0.0033_dbl_kind - ratio_Fe2C_phaeo = p1 - ratio_Fe2N_diatoms = 0.023_dbl_kind ! algal Fe to N (umol/mol) - ratio_Fe2N_sp = 0.023_dbl_kind - ratio_Fe2N_phaeo = 0.7_dbl_kind - ratio_Fe2DON = 0.023_dbl_kind ! Fe to N of DON (nmol/umol) - ratio_Fe2DOC_s = p1 ! Fe to C of DOC (nmol/umol) saccharids - ratio_Fe2DOC_l = 0.033_dbl_kind ! Fe to C of DOC (nmol/umol) lipids - tau_min = 5200.0_dbl_kind ! rapid mobile to stationary exchanges (s) - tau_max = 1.73e5_dbl_kind ! long time mobile to stationary exchanges (s) - chlabs_diatoms = 0.03_dbl_kind ! chl absorption (1/m/(mg/m^3)) - chlabs_sp = 0.01_dbl_kind - chlabs_phaeo = 0.05_dbl_kind - alpha2max_low_diatoms = 0.8_dbl_kind ! light limitation (1/(W/m^2)) - alpha2max_low_sp = 0.67_dbl_kind - alpha2max_low_phaeo = 0.67_dbl_kind - beta2max_diatoms = 0.018_dbl_kind ! light inhibition (1/(W/m^2)) - beta2max_sp = 0.0025_dbl_kind - beta2max_phaeo = 0.01_dbl_kind - mu_max_diatoms = 1.2_dbl_kind ! maximum growth rate (1/day) - mu_max_sp = 0.851_dbl_kind - mu_max_phaeo = 0.851_dbl_kind - grow_Tdep_diatoms = 0.06_dbl_kind ! Temperature dependence of growth (1/C) - grow_Tdep_sp = 0.06_dbl_kind - grow_Tdep_phaeo = 0.06_dbl_kind - fr_graze_diatoms = 0.01_dbl_kind ! Fraction grazed - fr_graze_sp = p1 - fr_graze_phaeo = p1 - mort_pre_diatoms = 0.007_dbl_kind! Mortality (1/day) - mort_pre_sp = 0.007_dbl_kind - mort_pre_phaeo = 0.007_dbl_kind - mort_Tdep_diatoms = 0.03_dbl_kind ! T dependence of mortality (1/C) - mort_Tdep_sp = 0.03_dbl_kind - mort_Tdep_phaeo = 0.03_dbl_kind - k_exude_diatoms = c0 ! algal exudation (1/d) - k_exude_sp = c0 - k_exude_phaeo = c0 - K_Nit_diatoms = c1 ! nitrate half saturation (mmol/m^3) - K_Nit_sp = c1 - K_Nit_phaeo = c1 - K_Am_diatoms = 0.3_dbl_kind ! ammonium half saturation (mmol/m^3) - K_Am_sp = 0.3_dbl_kind - K_Am_phaeo = 0.3_dbl_kind - K_Sil_diatoms = 4.0_dbl_kind ! silicate half saturation (mmol/m^3) - K_Sil_sp = c0 - K_Sil_phaeo = c0 - K_Fe_diatoms = c1 ! iron half saturation (nM) - K_Fe_sp = 0.2_dbl_kind - K_Fe_phaeo = p1 - f_don_protein = 0.6_dbl_kind ! fraction of spilled grazing to proteins - kn_bac_protein = 0.03_dbl_kind ! Bacterial degredation of DON (1/d) - f_don_Am_protein = 0.25_dbl_kind ! fraction of remineralized DON to ammonium - f_doc_s = 0.4_dbl_kind ! fraction of mortality to DOC - f_doc_l = 0.4_dbl_kind - f_exude_s = c1 ! fraction of exudation to DOC - f_exude_l = c1 - k_bac_s = 0.03_dbl_kind ! Bacterial degredation of DOC (1/d) - k_bac_l = 0.03_dbl_kind - algaltype_diatoms = c0 ! ------------------ - algaltype_sp = p5 ! - algaltype_phaeo = p5 ! - nitratetype = -c1 ! mobility type between - ammoniumtype = c1 ! stationary <--> mobile - silicatetype = -c1 ! - dmspptype = p5 ! - dmspdtype = -c1 ! - humtype = c1 ! - doctype_s = p5 ! - doctype_l = p5 ! - dontype_protein = p5 ! - fedtype_1 = p5 ! - feptype_1 = p5 ! - zaerotype_bc1 = c1 ! - zaerotype_bc2 = c1 ! - zaerotype_dust1 = c1 ! - zaerotype_dust2 = c1 ! - zaerotype_dust3 = c1 ! - zaerotype_dust4 = c1 !-------------------- - ratio_C2N_diatoms = 7.0_dbl_kind ! algal C to N ratio (mol/mol) - ratio_C2N_sp = 7.0_dbl_kind - ratio_C2N_phaeo = 7.0_dbl_kind - ratio_chl2N_diatoms= 2.1_dbl_kind ! algal chlorophyll to N ratio (mg/mmol) - ratio_chl2N_sp = 1.1_dbl_kind - ratio_chl2N_phaeo = 0.84_dbl_kind - F_abs_chl_diatoms = 2.0_dbl_kind ! scales absorbed radiation for dEdd - F_abs_chl_sp = 4.0_dbl_kind - F_abs_chl_phaeo = 5.0_dbl_kind - ratio_C2N_proteins = 7.0_dbl_kind ! ratio of C to N in proteins (mol/mol) - - !----------------------------------------------------------------- - ! read from input file - !----------------------------------------------------------------- - - write(nu_diag,*) subname,' Reading zbgc_nml' - - open (nu_nml, file=trim(nml_filename), status='old',iostat=nml_error) - if (nml_error /= 0) then - call icedrv_system_abort(string=subname//'ERROR: zbgc_nml open file '// & - trim(nml_filename), & - file=__FILE__, line=__LINE__) - endif - - nml_error = 1 - do while (nml_error > 0) - read(nu_nml, nml=zbgc_nml,iostat=nml_error) - end do - if (nml_error /= 0) then - call icedrv_system_abort(string=subname//'ERROR: zbgc_nml reading ', & - file=__FILE__, line=__LINE__) - endif - close(nu_nml) - - !----------------------------------------------------------------- - ! resolve conflicts - !----------------------------------------------------------------- - - !----------------------------------------------------------------- - ! zsalinity and brine - !----------------------------------------------------------------- - if (solve_zsal) then - call icedrv_system_abort(string=subname//'ERROR: zsalinity is deprecated ', & - file=__FILE__, line=__LINE__) - endif - - if (tr_brine .and. TRBRI == 0 ) then - write(nu_diag,*) & - 'WARNING: tr_brine=T but no brine height compiled' - write(nu_diag,*) & - 'WARNING: setting tr_brine = F' - tr_brine = .false. - elseif (tr_brine .and. nblyr < 1 ) then - write(nu_diag,*) & - 'WARNING: tr_brine=T but no biology layers compiled' - write(nu_diag,*) & - 'WARNING: setting tr_brine = F' - tr_brine = .false. - endif - - write(nu_diag,1010) ' tr_brine = ', tr_brine - if (tr_brine) then - write(nu_diag,1005) ' phi_snow = ', phi_snow - endif - - !----------------------------------------------------------------- - ! biogeochemistry - !----------------------------------------------------------------- - - if (.not. tr_brine) then - if (solve_zbgc) then - write(nu_diag,*) 'WARNING: tr_brine = F and solve_zbgc = T' - write(nu_diag,*) 'WARNING: setting solve_zbgc = F' - solve_zbgc = .false. - endif - if (skl_bgc) then - write(nu_diag,*) 'WARNING: tr_brine = F and skl_bgc = T' - write(nu_diag,*) 'WARNING: setting skl_bgc = F' - skl_bgc = .false. - endif - if (tr_zaero) then - write(nu_diag,*) 'WARNING: tr_brine = F and tr_zaero = T' - write(nu_diag,*) 'WARNING: setting tr_zaero = F' - tr_zaero = .false. - endif - endif - - if ((skl_bgc .AND. solve_zbgc) .or. (skl_bgc .AND. z_tracers)) then - print*, 'ERROR: skl_bgc and (solve_zbgc or z_tracers) are both true' - call icedrv_system_abort(file=__FILE__,line=__LINE__) - endif - - if (skl_bgc .AND. tr_zaero) then - write(nu_diag,*) 'WARNING: skl bgc does not use vertical tracers' - write(nu_diag,*) 'WARNING: setting tr_zaero = F' - tr_zaero = .false. - endif - - if (dEdd_algae .AND. trim(shortwave(1:4)) /= 'dEdd') then - write(nu_diag,*) 'WARNING: dEdd_algae = T but shortwave /= dEdd' - write(nu_diag,*) 'WARNING: setting dEdd_algae = F' - dEdd_algae = .false. - endif - - if (dEdd_algae .AND. (.NOT. tr_bgc_N) .AND. (.NOT. tr_zaero)) then - write(nu_diag,*) 'WARNING: need tr_bgc_N or tr_zaero for dEdd_algae' - write(nu_diag,*) 'WARNING: setting dEdd_algae = F' - dEdd_algae = .false. - endif - if (modal_aero .AND. (.NOT. tr_zaero) .AND. (.NOT. tr_aero)) then modal_aero = .false. endif @@ -2059,6 +1187,99 @@ subroutine init_zbgc if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, & file=__FILE__, line=__LINE__) + call icepack_init_parameters ( & + ratio_Si2N_diatoms_in = ratio_Si2N_diatoms, & + ratio_Si2N_sp_in = ratio_Si2N_sp, & + ratio_Si2N_phaeo_in = ratio_Si2N_phaeo, & + ratio_S2N_diatoms_in = ratio_S2N_diatoms, & + ratio_S2N_sp_in = ratio_S2N_sp, & + ratio_S2N_phaeo_in = ratio_S2N_phaeo, & + ratio_Fe2C_diatoms_in = ratio_Fe2C_diatoms, & + ratio_Fe2C_sp_in = ratio_Fe2C_sp, & + ratio_Fe2C_phaeo_in = ratio_Fe2C_phaeo, & + ratio_Fe2N_diatoms_in = ratio_Fe2N_diatoms, & + ratio_Fe2N_sp_in = ratio_Fe2N_sp, & + ratio_Fe2N_phaeo_in = ratio_Fe2N_phaeo, & + ratio_C2N_diatoms_in = ratio_C2N_diatoms, & + ratio_C2N_sp_in = ratio_C2N_sp, & + ratio_C2N_phaeo_in = ratio_C2N_phaeo, & + ratio_chl2N_diatoms_in = ratio_chl2N_diatoms, & + ratio_chl2N_sp_in = ratio_chl2N_sp, & + ratio_chl2N_phaeo_in = ratio_chl2N_phaeo, & + F_abs_chl_diatoms_in = F_abs_chl_diatoms, & + F_abs_chl_sp_in = F_abs_chl_sp, & + F_abs_chl_phaeo_in = F_abs_chl_phaeo, & + ratio_Fe2DON_in = ratio_Fe2DON, & + ratio_C2N_proteins_in = ratio_C2N_proteins, & + ratio_Fe2DOC_s_in = ratio_Fe2DOC_s, & + ratio_Fe2DOC_l_in = ratio_Fe2DOC_l, & + chlabs_diatoms_in = chlabs_diatoms, & + chlabs_sp_in = chlabs_sp, & + chlabs_phaeo_in = chlabs_phaeo, & + alpha2max_low_diatoms_in = alpha2max_low_diatoms, & + alpha2max_low_sp_in = alpha2max_low_sp, & + alpha2max_low_phaeo_in = alpha2max_low_phaeo, & + beta2max_diatoms_in = beta2max_diatoms, & + beta2max_sp_in = beta2max_sp, & + beta2max_phaeo_in = beta2max_phaeo, & + mu_max_diatoms_in = mu_max_diatoms, & + mu_max_sp_in = mu_max_sp, & + mu_max_phaeo_in = mu_max_phaeo, & + grow_Tdep_diatoms_in = grow_Tdep_diatoms, & + grow_Tdep_sp_in = grow_Tdep_sp, & + grow_Tdep_phaeo_in = grow_Tdep_phaeo, & + fr_graze_diatoms_in = fr_graze_diatoms, & + fr_graze_sp_in = fr_graze_sp, & + fr_graze_phaeo_in = fr_graze_phaeo, & + mort_pre_diatoms_in = mort_pre_diatoms, & + mort_pre_sp_in = mort_pre_sp, & + mort_pre_phaeo_in = mort_pre_phaeo, & + mort_Tdep_diatoms_in = mort_Tdep_diatoms, & + mort_Tdep_sp_in = mort_Tdep_sp, & + mort_Tdep_phaeo_in = mort_Tdep_phaeo, & + k_exude_diatoms_in = k_exude_diatoms, & + k_exude_sp_in = k_exude_sp, & + k_exude_phaeo_in = k_exude_phaeo, & + K_Nit_diatoms_in = K_Nit_diatoms, & + K_Nit_sp_in = K_Nit_sp, & + K_Nit_phaeo_in = K_Nit_phaeo, & + K_Am_diatoms_in = K_Am_diatoms, & + K_Am_sp_in = K_Am_sp, & + K_Am_phaeo_in = K_Am_phaeo, & + K_Sil_diatoms_in = K_Sil_diatoms, & + K_Sil_sp_in = K_Sil_sp, & + K_Sil_phaeo_in = K_Sil_phaeo, & + K_Fe_diatoms_in = K_Fe_diatoms, & + K_Fe_sp_in = K_Fe_sp, & + K_Fe_phaeo_in = K_Fe_phaeo, & + f_doc_s_in = f_doc_s, & + f_doc_l_in = f_doc_l, & + f_don_protein_in = f_don_protein, & + kn_bac_protein_in = kn_bac_protein, & + f_don_Am_protein_in = f_don_Am_protein, & + f_exude_s_in = f_exude_s, & + f_exude_l_in = f_exude_l, & + k_bac_s_in = k_bac_s, & + k_bac_l_in = k_bac_l, & + algaltype_diatoms_in = algaltype_diatoms, & + algaltype_sp_in = algaltype_sp, & + algaltype_phaeo_in = algaltype_phaeo, & + dictype_1_in = dictype_1, & + doctype_s_in = doctype_s, & + doctype_l_in = doctype_l, & + dontype_protein_in = dontype_protein, & + fedtype_1_in = fedtype_1, & + feptype_1_in = feptype_1, & + zaerotype_bc1_in = zaerotype_bc1, & + zaerotype_bc2_in = zaerotype_bc2, & + zaerotype_dust1_in = zaerotype_dust1, & + zaerotype_dust2_in = zaerotype_dust2, & + zaerotype_dust3_in = zaerotype_dust3, & + zaerotype_dust4_in = zaerotype_dust4) + call icepack_warnings_flush(nu_diag) + if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, & + file=__FILE__, line=__LINE__) + !----------------------------------------------------------------- ! initialize zbgc tracer indices !----------------------------------------------------------------- @@ -2141,152 +1362,6 @@ subroutine init_zbgc nt_bgc_hum = 0 nt_zbgc_frac = 0 - !----------------------------------------------------------------- - ! Define array parameters - !----------------------------------------------------------------- - - R_Si2N(1) = ratio_Si2N_diatoms - R_Si2N(2) = ratio_Si2N_sp - R_Si2N(3) = ratio_Si2N_phaeo - - R_S2N(1) = ratio_S2N_diatoms - R_S2N(2) = ratio_S2N_sp - R_S2N(3) = ratio_S2N_phaeo - - R_Fe2C(1) = ratio_Fe2C_diatoms - R_Fe2C(2) = ratio_Fe2C_sp - R_Fe2C(3) = ratio_Fe2C_phaeo - - R_Fe2N(1) = ratio_Fe2N_diatoms - R_Fe2N(2) = ratio_Fe2N_sp - R_Fe2N(3) = ratio_Fe2N_phaeo - - R_C2N(1) = ratio_C2N_diatoms - R_C2N(2) = ratio_C2N_sp - R_C2N(3) = ratio_C2N_phaeo - - R_chl2N(1) = ratio_chl2N_diatoms - R_chl2N(2) = ratio_chl2N_sp - R_chl2N(3) = ratio_chl2N_phaeo - - F_abs_chl(1) = F_abs_chl_diatoms - F_abs_chl(2) = F_abs_chl_sp - F_abs_chl(3) = F_abs_chl_phaeo - - R_Fe2DON(1) = ratio_Fe2DON - R_C2N_DON(1) = ratio_C2N_proteins - - R_Fe2DOC(1) = ratio_Fe2DOC_s - R_Fe2DOC(2) = ratio_Fe2DOC_l - R_Fe2DOC(3) = c0 - - chlabs(1) = chlabs_diatoms - chlabs(2) = chlabs_sp - chlabs(3) = chlabs_phaeo - - alpha2max_low(1) = alpha2max_low_diatoms - alpha2max_low(2) = alpha2max_low_sp - alpha2max_low(3) = alpha2max_low_phaeo - - beta2max(1) = beta2max_diatoms - beta2max(2) = beta2max_sp - beta2max(3) = beta2max_phaeo - - mu_max(1) = mu_max_diatoms - mu_max(2) = mu_max_sp - mu_max(3) = mu_max_phaeo - - grow_Tdep(1) = grow_Tdep_diatoms - grow_Tdep(2) = grow_Tdep_sp - grow_Tdep(3) = grow_Tdep_phaeo - - fr_graze(1) = fr_graze_diatoms - fr_graze(2) = fr_graze_sp - fr_graze(3) = fr_graze_phaeo - - mort_pre(1) = mort_pre_diatoms - mort_pre(2) = mort_pre_sp - mort_pre(3) = mort_pre_phaeo - - mort_Tdep(1) = mort_Tdep_diatoms - mort_Tdep(2) = mort_Tdep_sp - mort_Tdep(3) = mort_Tdep_phaeo - - k_exude(1) = k_exude_diatoms - k_exude(2) = k_exude_sp - k_exude(3) = k_exude_phaeo - - K_Nit(1) = K_Nit_diatoms - K_Nit(2) = K_Nit_sp - K_Nit(3) = K_Nit_phaeo - - K_Am(1) = K_Am_diatoms - K_Am(2) = K_Am_sp - K_Am(3) = K_Am_phaeo - - K_Sil(1) = K_Sil_diatoms - K_Sil(2) = K_Sil_sp - K_Sil(3) = K_Sil_phaeo - - K_Fe(1) = K_Fe_diatoms - K_Fe(2) = K_Fe_sp - K_Fe(3) = K_Fe_phaeo - - f_don(1) = f_don_protein - kn_bac(1) = kn_bac_protein - f_don_Am(1) = f_don_Am_protein - - f_exude(1) = f_exude_s - f_exude(2) = f_exude_l - k_bac(1) = k_bac_s - k_bac(2) = k_bac_l - - dictype(:) = -c1 - - algaltype(1) = algaltype_diatoms - algaltype(2) = algaltype_sp - algaltype(3) = algaltype_phaeo - - doctype(1) = doctype_s - doctype(2) = doctype_l - - dontype(1) = dontype_protein - - fedtype(1) = fedtype_1 - feptype(1) = feptype_1 - - zaerotype(1) = zaerotype_bc1 - zaerotype(2) = zaerotype_bc2 - zaerotype(3) = zaerotype_dust1 - zaerotype(4) = zaerotype_dust2 - zaerotype(5) = zaerotype_dust3 - zaerotype(6) = zaerotype_dust4 - - call icepack_init_zbgc ( & - R_Si2N_in=R_Si2N, & - R_S2N_in=R_S2N, R_Fe2C_in=R_Fe2C, R_Fe2N_in=R_Fe2N, R_C2N_in=R_C2N, & - R_chl2N_in=R_chl2N, F_abs_chl_in=F_abs_chl, R_Fe2DON_in=R_Fe2DON, & - R_C2N_DON_in=R_C2N_DON, & - R_Fe2DOC_in=R_Fe2DOC, & - chlabs_in=chlabs, alpha2max_low_in=alpha2max_low, beta2max_in=beta2max, & - mu_max_in=mu_max, grow_Tdep_in=grow_Tdep, fr_graze_in=fr_graze, & - mort_pre_in=mort_pre, & - mort_Tdep_in=mort_Tdep, k_exude_in=k_exude, & - K_Nit_in=K_Nit, K_Am_in=K_Am, K_sil_in=K_Sil, K_Fe_in=K_Fe, & - f_don_in=f_don, kn_bac_in=kn_bac, f_don_Am_in=f_don_Am, f_exude_in=f_exude, & - k_bac_in=k_bac, & - fr_resp_in=fr_resp, algal_vel_in=algal_vel, R_dFe2dust_in=R_dFe2dust, & - dustFe_sol_in=dustFe_sol, T_max_in=T_max, fr_mort2min_in=fr_mort2min, & - fr_dFe_in=fr_dFe, op_dep_min_in=op_dep_min, & - fr_graze_s_in=fr_graze_s, fr_graze_e_in=fr_graze_e, & - k_nitrif_in=k_nitrif, t_iron_conv_in=t_iron_conv, & - max_loss_in=max_loss, max_dfe_doc1_in=max_dfe_doc1, & - fr_resp_s_in=fr_resp_s, y_sk_DMS_in=y_sk_DMS, & - t_sk_conv_in=t_sk_conv, t_sk_ox_in=t_sk_ox, fsal_in=fsal) - call icepack_warnings_flush(nu_diag) - if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, & - file=__FILE__, line=__LINE__) - if (skl_bgc) then nk = 1 @@ -2821,7 +1896,7 @@ subroutine init_bgc_trcr(nk, nt_fbri, & bio_index (nlt_bgc) = nt_bgc end subroutine init_bgc_trcr -#endif + !======================================================================= end module icedrv_init_column