diff --git a/cicecore/cicedyn/analysis/ice_history_shared.F90 b/cicecore/cicedyn/analysis/ice_history_shared.F90 index d6fa78542..97e0e563f 100644 --- a/cicecore/cicedyn/analysis/ice_history_shared.F90 +++ b/cicecore/cicedyn/analysis/ice_history_shared.F90 @@ -834,7 +834,7 @@ subroutine construct_filename(ncfile,suffix,ns) ! Check whether the filename is already in use. ! Same filename in multiple history streams leads to files being overwritten (not good). - ! The current filename convention means we just have to check latest filename, + ! The current filename convention means we just have to check latest filename, ! not all filenames ever generated because of use of current model date/time in filename. ! write(nu_diag,'(2a,i2,1x,a)') subname, 'debug ncfile= ',ns,trim(ncfile) diff --git a/cicecore/cicedyn/dynamics/ice_dyn_eap.F90 b/cicecore/cicedyn/dynamics/ice_dyn_eap.F90 index cc85d8ab6..8249e3068 100644 --- a/cicecore/cicedyn/dynamics/ice_dyn_eap.F90 +++ b/cicecore/cicedyn/dynamics/ice_dyn_eap.F90 @@ -353,8 +353,7 @@ subroutine eap (dt) do ij = 1, icellT(iblk) i = indxTi(ij, iblk) j = indxTj(ij, iblk) - call icepack_ice_strength(ncat=ncat, & - aice = aice (i,j, iblk), & + call icepack_ice_strength(aice = aice (i,j, iblk), & vice = vice (i,j, iblk), & aice0 = aice0 (i,j, iblk), & aicen = aicen (i,j,:,iblk), & diff --git a/cicecore/cicedyn/dynamics/ice_dyn_evp.F90 b/cicecore/cicedyn/dynamics/ice_dyn_evp.F90 index 68101f579..c858de1c8 100644 --- a/cicecore/cicedyn/dynamics/ice_dyn_evp.F90 +++ b/cicecore/cicedyn/dynamics/ice_dyn_evp.F90 @@ -537,8 +537,7 @@ subroutine evp (dt) do ij = 1, icellT(iblk) i = indxTi(ij, iblk) j = indxTj(ij, iblk) - call icepack_ice_strength(ncat = ncat, & - aice = aice (i,j, iblk), & + call icepack_ice_strength(aice = aice (i,j, iblk), & vice = vice (i,j, iblk), & aice0 = aice0 (i,j, iblk), & aicen = aicen (i,j,:,iblk), & @@ -595,8 +594,7 @@ subroutine evp (dt) do ij = 1, icellT(iblk) i = indxTi(ij, iblk) j = indxTj(ij, iblk) - call icepack_ice_strength(ncat = ncat, & - aice = aice (i,j, iblk), & + call icepack_ice_strength(aice = aice (i,j, iblk), & vice = vice (i,j, iblk), & aice0 = aice0 (i,j, iblk), & aicen = aicen (i,j,:,iblk), & diff --git a/cicecore/cicedyn/dynamics/ice_dyn_vp.F90 b/cicecore/cicedyn/dynamics/ice_dyn_vp.F90 index 0d04bf974..22a53bc59 100644 --- a/cicecore/cicedyn/dynamics/ice_dyn_vp.F90 +++ b/cicecore/cicedyn/dynamics/ice_dyn_vp.F90 @@ -386,13 +386,12 @@ subroutine implicit_solver (dt) do ij = 1, icellT(iblk) i = indxTi(ij, iblk) j = indxTj(ij, iblk) - call icepack_ice_strength (ncat, & - aice (i,j, iblk), & - vice (i,j, iblk), & - aice0 (i,j, iblk), & - aicen (i,j,:,iblk), & - vicen (i,j,:,iblk), & - strength(i,j, iblk)) + call icepack_ice_strength (aice = aice (i,j, iblk), & + vice = vice (i,j, iblk), & + aice0 = aice0 (i,j, iblk), & + aicen = aicen (i,j,:,iblk), & + vicen = vicen (i,j,:,iblk), & + strength = strength(i,j, iblk)) enddo ! ij enddo ! iblk diff --git a/cicecore/cicedyn/dynamics/ice_transport_driver.F90 b/cicecore/cicedyn/dynamics/ice_transport_driver.F90 index fca964593..7d19a7974 100644 --- a/cicecore/cicedyn/dynamics/ice_transport_driver.F90 +++ b/cicecore/cicedyn/dynamics/ice_transport_driver.F90 @@ -1739,8 +1739,7 @@ subroutine work_to_state (nx_block, ny_block, & i = indxi(ij) j = indxj(ij) - call icepack_compute_tracers(ntrcr = ntrcr, & - trcr_depend = trcr_depend(:), & + call icepack_compute_tracers(trcr_depend = trcr_depend(:), & atrcrn = work (ij,narrays+1:narrays+ntrcr), & aicen = aicen(i,j,n), & vicen = vicen(i,j,n), & diff --git a/cicecore/cicedyn/general/ice_forcing.F90 b/cicecore/cicedyn/general/ice_forcing.F90 index 241bf8b5d..26aef9f9c 100755 --- a/cicecore/cicedyn/general/ice_forcing.F90 +++ b/cicecore/cicedyn/general/ice_forcing.F90 @@ -5396,9 +5396,10 @@ subroutine get_wave_spec if (wave_spec) then ! get hardwired frequency bin info and a dummy wave spectrum profile ! the latter is used if wave_spec_type == profile - call icepack_init_wave(nfreq, & - wave_spectrum_profile, & - wavefreq, dwavefreq) + call icepack_init_wave(nfreq = nfreq, & + wave_spectrum_profile = wave_spectrum_profile, & + wavefreq = wavefreq, & + dwavefreq = dwavefreq) ! read more realistic data from a file if ((trim(wave_spec_type) == 'constant').OR.(trim(wave_spec_type) == 'random')) then @@ -5481,10 +5482,10 @@ subroutine wave_spec_data if (icepack_warnings_aborted()) call abort_ice(error_message=subname, & file=__FILE__, line=__LINE__) - call icepack_init_wave(nfreq, & - wave_spectrum_profile, & - wavefreq, dwavefreq) - + call icepack_init_wave(nfreq = nfreq, & + wave_spectrum_profile = wave_spectrum_profile, & + wavefreq = wavefreq, & + dwavefreq = dwavefreq) !spec_file = trim(ocn_data_dir)//'/'//trim(wave_spec_file) spec_file = trim(wave_spec_file) diff --git a/cicecore/cicedyn/general/ice_init.F90 b/cicecore/cicedyn/general/ice_init.F90 index 0796efd2d..e966043fb 100644 --- a/cicecore/cicedyn/general/ice_init.F90 +++ b/cicecore/cicedyn/general/ice_init.F90 @@ -3024,8 +3024,7 @@ subroutine init_state enddo if (tmask(i,j,iblk)) & - call icepack_aggregate(ncat = ncat, & - aicen = aicen(i,j,:,iblk), & + call icepack_aggregate(aicen = aicen(i,j,:,iblk), & trcrn = trcrn(i,j,:,:,iblk), & vicen = vicen(i,j,:,iblk), & vsnon = vsnon(i,j,:,iblk), & @@ -3034,7 +3033,6 @@ subroutine init_state vice = vice (i,j, iblk), & vsno = vsno (i,j, iblk), & aice0 = aice0(i,j, iblk), & - ntrcr = ntrcr, & trcr_depend = trcr_depend(:), & trcr_base = trcr_base(:,:), & n_trcr_strata = n_trcr_strata(:), & @@ -3513,7 +3511,6 @@ subroutine set_state_var (nx_block, ny_block, & Sprofile = salinz(i,j,:), & Tprofile = Tmltz(i,j,:), & Tsfc = Tsfc, & - nilyr = nilyr, nslyr = nslyr, & qin = qin(:), qsn = qsn(:)) ! surface temperature diff --git a/cicecore/cicedyn/general/ice_step_mod.F90 b/cicecore/cicedyn/general/ice_step_mod.F90 index 2726a6101..56805b625 100644 --- a/cicecore/cicedyn/general/ice_step_mod.F90 +++ b/cicecore/cicedyn/general/ice_step_mod.F90 @@ -389,8 +389,7 @@ subroutine step_therm1 (dt, iblk) if (tmask(i,j,iblk)) then - call icepack_step_therm1(dt=dt, ncat=ncat, & - nilyr=nilyr, nslyr=nslyr, & + call icepack_step_therm1(dt=dt, & aicen_init = aicen_init (i,j,:,iblk), & vicen_init = vicen_init (i,j,:,iblk), & vsnon_init = vsnon_init (i,j,:,iblk), & @@ -679,8 +678,7 @@ subroutine step_therm2 (dt, iblk) if (tr_fsd) & wave_sig_ht(i,j,iblk) = c4*SQRT(SUM(wave_spectrum(i,j,:,iblk)*dwavefreq(:))) - call icepack_step_therm2(dt=dt, ncat=ncat, & - nltrcr=nltrcr, nilyr=nilyr, nslyr=nslyr, nblyr=nblyr, & + call icepack_step_therm2(dt=dt, & hin_max = hin_max (:), & aicen = aicen (i,j,:,iblk), & vicen = vicen (i,j,:,iblk), & @@ -708,9 +706,6 @@ subroutine step_therm2 (dt, iblk) fresh = fresh (i,j, iblk), & fsalt = fsalt (i,j, iblk), & fhocn = fhocn (i,j, iblk), & - bgrid = bgrid, & - cgrid = cgrid, & - igrid = igrid, & faero_ocn = faero_ocn (i,j,:,iblk), & first_ice = first_ice (i,j,:,iblk), & flux_bio = flux_bio (i,j,1:nbtrcr,iblk), & @@ -722,7 +717,6 @@ subroutine step_therm2 (dt, iblk) HDO_ocn = HDO_ocn (i,j, iblk), & H2_16O_ocn = H2_16O_ocn(i,j, iblk), & H2_18O_ocn = H2_18O_ocn(i,j, iblk), & - nfsd = nfsd, & wave_sig_ht= wave_sig_ht(i,j,iblk), & wave_spectrum = wave_spectrum(i,j,:,iblk), & wavefreq = wavefreq(:), & @@ -811,8 +805,7 @@ subroutine update_state (dt, daidt, dvidt, dvsdt, dagedt, offset) !----------------------------------------------------------------- ! if (tmask(i,j,iblk)) & - call icepack_aggregate(ncat = ncat, & - aicen = aicen(i,j,:,iblk), & + call icepack_aggregate(aicen = aicen(i,j,:,iblk), & trcrn = trcrn(i,j,:,:,iblk), & vicen = vicen(i,j,:,iblk), & vsnon = vsnon(i,j,:,iblk), & @@ -821,7 +814,6 @@ subroutine update_state (dt, daidt, dvidt, dvsdt, dagedt, offset) vice = vice (i,j, iblk), & vsno = vsno (i,j, iblk), & aice0 = aice0(i,j, iblk), & - ntrcr = ntrcr, & trcr_depend = trcr_depend(:), & trcr_base = trcr_base(:,:), & n_trcr_strata = n_trcr_strata(:), & @@ -914,16 +906,18 @@ subroutine step_dyn_wave (dt) do j = jlo, jhi do i = ilo, ihi d_afsd_wave(i,j,:,iblk) = c0 - call icepack_step_wavefracture (wave_spec_type, & - dt, ncat, nfsd, nfreq, & - aice (i,j, iblk), & - vice (i,j, iblk), & - aicen (i,j,:, iblk), & - floe_rad_l(:), floe_rad_c(:), & - wave_spectrum (i,j,:, iblk), & - wavefreq(:), dwavefreq(:), & - trcrn (i,j,:,:,iblk), & - d_afsd_wave (i,j,:, iblk)) + call icepack_step_wavefracture(wave_spec_type = wave_spec_type, & + dt = dt, nfreq = nfreq, & + aice = aice (i,j, iblk), & + vice = vice (i,j, iblk), & + aicen = aicen (i,j,:, iblk), & + floe_rad_l = floe_rad_l (:), & + floe_rad_c = floe_rad_c (:), & + wave_spectrum = wave_spectrum(i,j,:, iblk), & + wavefreq = wavefreq (:), & + dwavefreq = dwavefreq (:), & + trcrn = trcrn (i,j,:,:,iblk), & + d_afsd_wave = d_afsd_wave (i,j,:, iblk)) end do ! i end do ! j end do ! iblk @@ -1100,13 +1094,12 @@ subroutine step_dyn_ridge (dt, ndtd, iblk) if (tmask(i,j,iblk)) then - call icepack_step_ridge (dt=dt, ndtd=ndtd, & - nilyr=nilyr, nslyr=nslyr, nblyr=nblyr, & - ncat=ncat, n_aero=n_aero, hin_max=hin_max(:), & - trcr_depend = trcr_depend (:), & - trcr_base = trcr_base (:,:), & - n_trcr_strata = n_trcr_strata(:), & - nt_strata = nt_strata (:,:), & + call icepack_step_ridge (dt=dt, ndtd=ndtd, & + hin_max = hin_max(:), & + trcr_depend = trcr_depend (:), & + trcr_base = trcr_base (:,:),& + n_trcr_strata = n_trcr_strata(:), & + nt_strata = nt_strata (:,:),& trcrn = trcrn (i,j,:,:,iblk), & rdg_conv = rdg_conv (i,j, iblk), & rdg_shear = rdg_shear(i,j, iblk), & @@ -1223,27 +1216,26 @@ subroutine step_snow (dt, iblk) do j = jlo, jhi do i = ilo, ihi - call icepack_step_snow (dt, nilyr, & - nslyr, ncat, & - wind (i,j, iblk), & - aice (i,j, iblk), & - aicen(i,j,:,iblk), & - vicen(i,j,:,iblk), & - vsnon(i,j,:,iblk), & - trcrn(i,j,nt_Tsfc,:,iblk), & - trcrn(i,j,nt_qice,:,iblk), & ! top layer only - trcrn(i,j,nt_sice,:,iblk), & ! top layer only - trcrn(i,j,nt_qsno:nt_qsno+nslyr-1,:,iblk), & - trcrn(i,j,nt_alvl,:,iblk), & - trcrn(i,j,nt_vlvl,:,iblk), & - trcrn(i,j,nt_smice:nt_smice+nslyr-1,:,iblk), & - trcrn(i,j,nt_smliq:nt_smliq+nslyr-1,:,iblk), & - trcrn(i,j,nt_rsnw:nt_rsnw+nslyr-1,:,iblk), & - trcrn(i,j,nt_rhos:nt_rhos+nslyr-1,:,iblk), & - fresh (i,j,iblk), & - fhocn (i,j,iblk), & - fsloss (i,j,iblk), & - fsnow (i,j,iblk)) + call icepack_step_snow (dt = dt, & + wind = wind (i,j, iblk), & + aice = aice (i,j, iblk), & + aicen = aicen(i,j,:,iblk), & + vicen = vicen(i,j,:,iblk), & + vsnon = vsnon(i,j,:,iblk), & + Tsfc = trcrn(i,j,nt_Tsfc,:,iblk), & + zqin1 = trcrn(i,j,nt_qice,:,iblk), & ! top layer only + zSin1 = trcrn(i,j,nt_sice,:,iblk), & ! top layer only + zqsn = trcrn(i,j,nt_qsno:nt_qsno+nslyr-1,:,iblk), & + alvl = trcrn(i,j,nt_alvl,:,iblk), & + vlvl = trcrn(i,j,nt_vlvl,:,iblk), & + smice = trcrn(i,j,nt_smice:nt_smice+nslyr-1,:,iblk), & + smliq = trcrn(i,j,nt_smliq:nt_smliq+nslyr-1,:,iblk), & + rsnw = trcrn(i,j,nt_rsnw:nt_rsnw+nslyr-1,:,iblk), & + rhos_cmpn = trcrn(i,j,nt_rhos:nt_rhos+nslyr-1,:,iblk),& + fresh = fresh (i,j,iblk), & + fhocn = fhocn (i,j,iblk), & + fsloss = fsloss (i,j,iblk), & + fsnow = fsnow (i,j,iblk)) enddo enddo @@ -1383,7 +1375,6 @@ subroutine step_radiation (dt, iblk) if (tmask(i,j,iblk)) then call icepack_step_radiation (dt=dt, & - swgrid=swgrid(:), igrid=igrid(:), & fbri=fbri(:), & aicen=aicen(i,j, :,iblk), & vicen=vicen(i,j, :,iblk), & @@ -1616,7 +1607,7 @@ subroutine biogeochemistry (dt, iblk) use ice_domain_size, only: nblyr, nilyr, nslyr, n_algae, n_zaero, ncat, & n_doc, n_dic, n_don, n_fed, n_fep use ice_flux, only: meltbn, melttn, congeln, snoicen, & - sst, sss, fsnow, meltsn + sst, sss, Tf, fsnow, meltsn use ice_flux_bgc, only: hin_old, flux_bio, flux_bio_atm, faero_atm, & nit, amm, sil, dmsp, dms, algalN, doc, don, dic, fed, fep, zaeros, hum use ice_state, only: aicen_init, vicen_init, aicen, vicen, vsnon, & @@ -1677,10 +1668,7 @@ subroutine biogeochemistry (dt, iblk) do j = jlo, jhi do i = ilo, ihi - call icepack_load_ocean_bio_array(max_nbtrcr = icepack_max_nbtrcr, & - max_algae = icepack_max_algae, max_don = icepack_max_don, & - max_doc = icepack_max_doc, max_dic = icepack_max_dic, & - max_aero = icepack_max_aero, max_fe = icepack_max_fe, & + call icepack_load_ocean_bio_array( & nit = nit(i,j, iblk), amm = amm (i,j, iblk), & sil = sil(i,j, iblk), dmsp = dmsp (i,j, iblk), & dms = dms(i,j, iblk), algalN = algalN(i,j,:,iblk), & @@ -1699,10 +1687,7 @@ subroutine biogeochemistry (dt, iblk) enddo ! mm endif - call icepack_biogeochemistry(dt=dt, ntrcr=ntrcr, nbtrcr=nbtrcr,& - bgrid=bgrid, igrid=igrid, icgrid=icgrid, cgrid=cgrid, & - nblyr=nblyr, nilyr=nilyr, nslyr=nslyr, n_algae=n_algae, n_zaero=n_zaero, & - ncat=ncat, n_doc=n_doc, n_dic=n_dic, n_don=n_don, n_fed=n_fed, n_fep=n_fep, & + call icepack_biogeochemistry(dt=dt, & upNO = upNO (i,j, iblk), & upNH = upNH (i,j, iblk), & iDi = iDi (i,j,:,:, iblk), & @@ -1725,13 +1710,13 @@ subroutine biogeochemistry (dt, iblk) ice_bio_net = ice_bio_net (i,j,1:nbtrcr, iblk), & snow_bio_net = snow_bio_net(i,j,1:nbtrcr, iblk), & fswthrun = fswthrun (i,j,:, iblk), & - sice_rho = sice_rho (i,j,:, iblk), & meltbn = meltbn (i,j,:, iblk), & melttn = melttn (i,j,:, iblk), & congeln = congeln (i,j,:, iblk), & snoicen = snoicen (i,j,:, iblk), & sst = sst (i,j, iblk), & sss = sss (i,j, iblk), & + Tf = Tf (i,j, iblk), & fsnow = fsnow (i,j, iblk), & meltsn = meltsn (i,j,:, iblk), & hin_old = hin_old (i,j,:, iblk), & @@ -1744,8 +1729,7 @@ subroutine biogeochemistry (dt, iblk) vsnon = vsnon (i,j,:, iblk), & aice0 = aice0 (i,j, iblk), & trcrn = trcrn (i,j,:,:, iblk), & - vsnon_init = vsnon_init (i,j,:, iblk), & - skl_bgc = skl_bgc) + vsnon_init = vsnon_init (i,j,:, iblk)) enddo ! i enddo ! j diff --git a/cicecore/cicedyn/infrastructure/ice_restart_driver.F90 b/cicecore/cicedyn/infrastructure/ice_restart_driver.F90 index bde40dd14..dd9d77807 100644 --- a/cicecore/cicedyn/infrastructure/ice_restart_driver.F90 +++ b/cicecore/cicedyn/infrastructure/ice_restart_driver.F90 @@ -686,8 +686,7 @@ subroutine restartfile (ice_ic) do j = 1, ny_block do i = 1, nx_block if (tmask(i,j,iblk)) & - call icepack_aggregate(ncat = ncat, & - aicen = aicen(i,j,:,iblk), & + call icepack_aggregate(aicen = aicen(i,j,:,iblk), & trcrn = trcrn(i,j,:,:,iblk), & vicen = vicen(i,j,:,iblk), & vsnon = vsnon(i,j,:,iblk), & @@ -696,7 +695,6 @@ subroutine restartfile (ice_ic) vice = vice (i,j, iblk), & vsno = vsno (i,j, iblk), & aice0 = aice0(i,j, iblk), & - ntrcr = ntrcr, & trcr_depend = trcr_depend, & trcr_base = trcr_base, & n_trcr_strata = n_trcr_strata, & @@ -1055,8 +1053,7 @@ subroutine restartfile_v4 (ice_ic) do j = 1, ny_block do i = 1, nx_block if (tmask(i,j,iblk)) & - call icepack_aggregate(ncat = ncat, & - aicen = aicen(i,j,:,iblk), & + call icepack_aggregate(aicen = aicen(i,j,:,iblk), & trcrn = trcrn(i,j,:,:,iblk), & vicen = vicen(i,j,:,iblk), & vsnon = vsnon(i,j,:,iblk), & @@ -1065,7 +1062,6 @@ subroutine restartfile_v4 (ice_ic) vice = vice (i,j, iblk), & vsno = vsno (i,j, iblk), & aice0 = aice0(i,j, iblk), & - ntrcr = ntrcr, & trcr_depend = trcr_depend, & trcr_base = trcr_base, & n_trcr_strata = n_trcr_strata, & diff --git a/cicecore/cicedyn/infrastructure/ice_restoring.F90 b/cicecore/cicedyn/infrastructure/ice_restoring.F90 index 27328d9dd..b7f1b3971 100644 --- a/cicecore/cicedyn/infrastructure/ice_restoring.F90 +++ b/cicecore/cicedyn/infrastructure/ice_restoring.F90 @@ -521,7 +521,6 @@ subroutine set_restore_var (nx_block, ny_block, & Sprofile=salinz(i,j,:), & Tprofile=Tmltz(i,j,:), & Tsfc=Tsfc, & - nilyr=nilyr, nslyr=nslyr, & qin=qin(:), qsn=qsn(:)) ! surface temperature diff --git a/cicecore/drivers/direct/hadgem3/CICE_InitMod.F90 b/cicecore/drivers/direct/hadgem3/CICE_InitMod.F90 index 3f87f2ca8..c64bd463c 100644 --- a/cicecore/drivers/direct/hadgem3/CICE_InitMod.F90 +++ b/cicecore/drivers/direct/hadgem3/CICE_InitMod.F90 @@ -133,9 +133,9 @@ subroutine cice_init call init_coupler_flux ! initialize fluxes exchanged with coupler call init_thermo_vertical ! initialize vertical thermodynamics - call icepack_init_itd(ncat=ncat, hin_max=hin_max) ! ice thickness distribution + call icepack_init_itd(hin_max=hin_max) ! ice thickness distribution if (my_task == master_task) then - call icepack_init_itd_hist(ncat=ncat, hin_max=hin_max, c_hi_range=c_hi_range) ! output + call icepack_init_itd_hist(hin_max=hin_max, c_hi_range=c_hi_range) ! output endif call icepack_query_tracer_flags(tr_fsd_out=tr_fsd) @@ -143,13 +143,12 @@ subroutine cice_init if (icepack_warnings_aborted()) call abort_ice(trim(subname), & file=__FILE__,line= __LINE__) - if (tr_fsd) call icepack_init_fsd_bounds (nfsd, & ! floe size distribution - floe_rad_l, & ! fsd size lower bound in m (radius) - floe_rad_c, & ! fsd size bin centre in m (radius) - floe_binwidth, & ! fsd size bin width in m (radius) - c_fsd_range, & ! string for history output + if (tr_fsd) call icepack_init_fsd_bounds ( & + floe_rad_l = floe_rad_l, & ! fsd size lower bound in m (radius) + floe_rad_c = floe_rad_c, & ! fsd size bin centre in m (radius) + floe_binwidth = floe_binwidth, & ! fsd size bin width in m (radius) + c_fsd_range = c_fsd_range, & ! string for history output write_diags=(my_task == master_task)) ! write diag on master only - call icepack_warnings_flush(nu_diag) if (icepack_warnings_aborted()) call abort_ice(error_message=subname, & file=__FILE__, line=__LINE__) @@ -412,8 +411,7 @@ subroutine init_restart do j = 1, ny_block do i = 1, nx_block if (tmask(i,j,iblk)) then - call icepack_aggregate(ncat = ncat, & - aicen = aicen(i,j,:,iblk), & + call icepack_aggregate(aicen = aicen(i,j,:,iblk), & trcrn = trcrn(i,j,:,:,iblk), & vicen = vicen(i,j,:,iblk), & vsnon = vsnon(i,j,:,iblk), & @@ -422,7 +420,6 @@ subroutine init_restart vice = vice (i,j, iblk), & vsno = vsno (i,j, iblk), & aice0 = aice0(i,j, iblk), & - ntrcr = ntrcr, & trcr_depend = trcr_depend, & trcr_base = trcr_base, & n_trcr_strata = n_trcr_strata, & diff --git a/cicecore/drivers/direct/nemo_concepts/CICE_InitMod.F90 b/cicecore/drivers/direct/nemo_concepts/CICE_InitMod.F90 index 7e2308f20..47b158842 100644 --- a/cicecore/drivers/direct/nemo_concepts/CICE_InitMod.F90 +++ b/cicecore/drivers/direct/nemo_concepts/CICE_InitMod.F90 @@ -133,9 +133,9 @@ subroutine cice_init call init_coupler_flux ! initialize fluxes exchanged with coupler call init_thermo_vertical ! initialize vertical thermodynamics - call icepack_init_itd(ncat=ncat, hin_max=hin_max) ! ice thickness distribution + call icepack_init_itd(hin_max=hin_max) ! ice thickness distribution if (my_task == master_task) then - call icepack_init_itd_hist(ncat=ncat, hin_max=hin_max, c_hi_range=c_hi_range) ! output + call icepack_init_itd_hist(hin_max=hin_max, c_hi_range=c_hi_range) ! output endif call icepack_query_tracer_flags(tr_fsd_out=tr_fsd) @@ -143,13 +143,12 @@ subroutine cice_init if (icepack_warnings_aborted()) call abort_ice(trim(subname), & file=__FILE__,line= __LINE__) - if (tr_fsd) call icepack_init_fsd_bounds (nfsd, & ! floe size distribution - floe_rad_l, & ! fsd size lower bound in m (radius) - floe_rad_c, & ! fsd size bin centre in m (radius) - floe_binwidth, & ! fsd size bin width in m (radius) - c_fsd_range, & ! string for history output + if (tr_fsd) call icepack_init_fsd_bounds ( & + floe_rad_l = floe_rad_l, & ! fsd size lower bound in m (radius) + floe_rad_c = floe_rad_c, & ! fsd size bin centre in m (radius) + floe_binwidth = floe_binwidth, & ! fsd size bin width in m (radius) + c_fsd_range = c_fsd_range, & ! string for history output write_diags=(my_task == master_task)) ! write diag on master only - call icepack_warnings_flush(nu_diag) if (icepack_warnings_aborted()) call abort_ice(error_message=subname, & file=__FILE__, line=__LINE__) @@ -412,8 +411,7 @@ subroutine init_restart do j = 1, ny_block do i = 1, nx_block if (tmask(i,j,iblk)) then - call icepack_aggregate(ncat = ncat, & - aicen = aicen(i,j,:,iblk), & + call icepack_aggregate(aicen = aicen(i,j,:,iblk), & trcrn = trcrn(i,j,:,:,iblk), & vicen = vicen(i,j,:,iblk), & vsnon = vsnon(i,j,:,iblk), & @@ -422,7 +420,6 @@ subroutine init_restart vice = vice (i,j, iblk), & vsno = vsno (i,j, iblk), & aice0 = aice0(i,j, iblk), & - ntrcr = ntrcr, & trcr_depend = trcr_depend, & trcr_base = trcr_base, & n_trcr_strata = n_trcr_strata, & diff --git a/cicecore/drivers/mct/cesm1/CICE_InitMod.F90 b/cicecore/drivers/mct/cesm1/CICE_InitMod.F90 index 419dbacc9..b9ab6a39d 100644 --- a/cicecore/drivers/mct/cesm1/CICE_InitMod.F90 +++ b/cicecore/drivers/mct/cesm1/CICE_InitMod.F90 @@ -147,9 +147,9 @@ subroutine cice_init(mpicom_ice) call init_thermo_vertical ! initialize vertical thermodynamics - call icepack_init_itd(ncat=ncat, hin_max=hin_max) ! ice thickness distribution + call icepack_init_itd(hin_max=hin_max) ! ice thickness distribution if (my_task == master_task) then - call icepack_init_itd_hist(ncat=ncat, hin_max=hin_max, c_hi_range=c_hi_range) ! output + call icepack_init_itd_hist(hin_max=hin_max, c_hi_range=c_hi_range) ! output endif call icepack_query_tracer_flags(tr_fsd_out=tr_fsd) @@ -157,13 +157,12 @@ subroutine cice_init(mpicom_ice) if (icepack_warnings_aborted()) call abort_ice(trim(subname), & file=__FILE__,line= __LINE__) - if (tr_fsd) call icepack_init_fsd_bounds (nfsd, & ! floe size distribution - floe_rad_l, & ! fsd size lower bound in m (radius) - floe_rad_c, & ! fsd size bin centre in m (radius) - floe_binwidth, & ! fsd size bin width in m (radius) - c_fsd_range, & ! string for history output + if (tr_fsd) call icepack_init_fsd_bounds ( & + floe_rad_l = floe_rad_l, & ! fsd size lower bound in m (radius) + floe_rad_c = floe_rad_c, & ! fsd size bin centre in m (radius) + floe_binwidth = floe_binwidth, & ! fsd size bin width in m (radius) + c_fsd_range = c_fsd_range, & ! string for history output write_diags=(my_task == master_task)) ! write diag on master only - call icepack_warnings_flush(nu_diag) if (icepack_warnings_aborted()) call abort_ice(error_message=subname, & file=__FILE__, line=__LINE__) @@ -478,8 +477,7 @@ subroutine init_restart do j = 1, ny_block do i = 1, nx_block if (tmask(i,j,iblk)) then - call icepack_aggregate(ncat = ncat, & - aicen = aicen(i,j,:,iblk), & + call icepack_aggregate(aicen = aicen(i,j,:,iblk), & trcrn = trcrn(i,j,:,:,iblk), & vicen = vicen(i,j,:,iblk), & vsnon = vsnon(i,j,:,iblk), & @@ -488,7 +486,6 @@ subroutine init_restart vice = vice (i,j, iblk), & vsno = vsno (i,j, iblk), & aice0 = aice0(i,j, iblk), & - ntrcr = ntrcr, & trcr_depend = trcr_depend, & trcr_base = trcr_base, & n_trcr_strata = n_trcr_strata, & diff --git a/cicecore/drivers/nuopc/cmeps/CICE_InitMod.F90 b/cicecore/drivers/nuopc/cmeps/CICE_InitMod.F90 index b235ebf0e..ac2268824 100644 --- a/cicecore/drivers/nuopc/cmeps/CICE_InitMod.F90 +++ b/cicecore/drivers/nuopc/cmeps/CICE_InitMod.F90 @@ -118,9 +118,9 @@ subroutine cice_init2() call init_coupler_flux ! initialize fluxes exchanged with coupler call init_thermo_vertical ! initialize vertical thermodynamics - call icepack_init_itd(ncat=ncat, hin_max=hin_max) ! ice thickness distribution + call icepack_init_itd(hin_max=hin_max) ! ice thickness distribution if (my_task == master_task) then - call icepack_init_itd_hist(ncat=ncat, hin_max=hin_max, c_hi_range=c_hi_range) ! output + call icepack_init_itd_hist(hin_max=hin_max, c_hi_range=c_hi_range) ! output endif call icepack_query_tracer_flags(tr_fsd_out=tr_fsd) @@ -128,13 +128,12 @@ subroutine cice_init2() if (icepack_warnings_aborted()) call abort_ice(trim(subname), & file=__FILE__,line= __LINE__) - if (tr_fsd) call icepack_init_fsd_bounds (nfsd, & ! floe size distribution - floe_rad_l, & ! fsd size lower bound in m (radius) - floe_rad_c, & ! fsd size bin centre in m (radius) - floe_binwidth, & ! fsd size bin width in m (radius) - c_fsd_range, & ! string for history output + if (tr_fsd) call icepack_init_fsd_bounds ( & + floe_rad_l = floe_rad_l, & ! fsd size lower bound in m (radius) + floe_rad_c = floe_rad_c, & ! fsd size bin centre in m (radius) + floe_binwidth = floe_binwidth, & ! fsd size bin width in m (radius) + c_fsd_range = c_fsd_range, & ! string for history output write_diags=(my_task == master_task)) ! write diag on master only - call icepack_warnings_flush(nu_diag) if (icepack_warnings_aborted()) call abort_ice(error_message=subname, & file=__FILE__, line=__LINE__) @@ -432,7 +431,7 @@ subroutine init_restart() do j = 1, ny_block do i = 1, nx_block if (tmask(i,j,iblk)) then - call icepack_aggregate(ncat = ncat, & + call icepack_aggregate( & aicen = aicen(i,j,:,iblk), & trcrn = trcrn(i,j,:,:,iblk), & vicen = vicen(i,j,:,iblk), & @@ -442,7 +441,6 @@ subroutine init_restart() vice = vice (i,j, iblk), & vsno = vsno (i,j, iblk), & aice0 = aice0(i,j, iblk), & - ntrcr = ntrcr, & trcr_depend = trcr_depend, & trcr_base = trcr_base, & n_trcr_strata = n_trcr_strata, & diff --git a/cicecore/drivers/nuopc/cmeps/ice_comp_nuopc.F90 b/cicecore/drivers/nuopc/cmeps/ice_comp_nuopc.F90 index 4c4be8308..edf5d289a 100644 --- a/cicecore/drivers/nuopc/cmeps/ice_comp_nuopc.F90 +++ b/cicecore/drivers/nuopc/cmeps/ice_comp_nuopc.F90 @@ -683,7 +683,7 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) if(mastertask) write(nu_diag,*) trim(subname)//'WARNING: pio_typename from driver needs to be set for netcdf output to work' end if - + #else @@ -850,7 +850,7 @@ subroutine InitializeRealize(gcomp, importState, exportState, clock, rc) idate0 = start_ymd year_init = (idate0/10000) month_init= (idate0-year_init*10000)/100 ! integer month of basedate - day_init = idate0-year_init*10000-month_init*100 + day_init = idate0-year_init*10000-month_init*100 ! - Set use_leap_years based on calendar (as some CICE calls use this instead of the calendar type) if (calendar_type == ice_calendar_gregorian) then diff --git a/cicecore/drivers/nuopc/dmi/CICE_InitMod.F90 b/cicecore/drivers/nuopc/dmi/CICE_InitMod.F90 index 4577113f1..25c126201 100644 --- a/cicecore/drivers/nuopc/dmi/CICE_InitMod.F90 +++ b/cicecore/drivers/nuopc/dmi/CICE_InitMod.F90 @@ -156,9 +156,9 @@ subroutine cice_init(mpi_comm) call init_thermo_vertical ! initialize vertical thermodynamics - call icepack_init_itd(ncat=ncat, hin_max=hin_max) ! ice thickness distribution + call icepack_init_itd(hin_max=hin_max) ! ice thickness distribution if (my_task == master_task) then - call icepack_init_itd_hist(ncat=ncat, hin_max=hin_max, c_hi_range=c_hi_range) ! output + call icepack_init_itd_hist(hin_max=hin_max, c_hi_range=c_hi_range) ! output endif call icepack_query_tracer_flags(tr_fsd_out=tr_fsd) @@ -166,16 +166,16 @@ subroutine cice_init(mpi_comm) if (icepack_warnings_aborted()) call abort_ice(trim(subname), & file=__FILE__,line= __LINE__) - if (tr_fsd) call icepack_init_fsd_bounds (nfsd, & ! floe size distribution - floe_rad_l, & ! fsd size lower bound in m (radius) - floe_rad_c, & ! fsd size bin centre in m (radius) - floe_binwidth, & ! fsd size bin width in m (radius) - c_fsd_range, & ! string for history output + if (tr_fsd) call icepack_init_fsd_bounds ( & + floe_rad_l = floe_rad_l, & ! fsd size lower bound in m (radius) + floe_rad_c = floe_rad_c, & ! fsd size bin centre in m (radius) + floe_binwidth = floe_binwidth, & ! fsd size bin width in m (radius) + c_fsd_range = c_fsd_range, & ! string for history output write_diags=(my_task == master_task)) ! write diag on master only - call icepack_warnings_flush(nu_diag) if (icepack_warnings_aborted()) call abort_ice(error_message=subname, & file=__FILE__, line=__LINE__) + #ifndef CICE_IN_NEMO call init_forcing_ocn(dt) ! initialize sss and sst from data #endif @@ -494,8 +494,7 @@ subroutine init_restart do j = 1, ny_block do i = 1, nx_block if (tmask(i,j,iblk)) then - call icepack_aggregate(ncat = ncat, & - aicen = aicen(i,j,:,iblk), & + call icepack_aggregate(aicen = aicen(i,j,:,iblk), & trcrn = trcrn(i,j,:,:,iblk), & vicen = vicen(i,j,:,iblk), & vsnon = vsnon(i,j,:,iblk), & @@ -504,7 +503,6 @@ subroutine init_restart vice = vice (i,j, iblk), & vsno = vsno (i,j, iblk), & aice0 = aice0(i,j, iblk), & - ntrcr = ntrcr, & trcr_depend = trcr_depend, & trcr_base = trcr_base, & n_trcr_strata = n_trcr_strata, & diff --git a/cicecore/drivers/standalone/cice/CICE_InitMod.F90 b/cicecore/drivers/standalone/cice/CICE_InitMod.F90 index 194293118..edb091941 100644 --- a/cicecore/drivers/standalone/cice/CICE_InitMod.F90 +++ b/cicecore/drivers/standalone/cice/CICE_InitMod.F90 @@ -144,9 +144,9 @@ subroutine cice_init call init_thermo_vertical ! initialize vertical thermodynamics - call icepack_init_itd(ncat=ncat, hin_max=hin_max) ! ice thickness distribution + call icepack_init_itd(hin_max=hin_max) ! ice thickness distribution if (my_task == master_task) then - call icepack_init_itd_hist(ncat=ncat, hin_max=hin_max, c_hi_range=c_hi_range) ! output + call icepack_init_itd_hist(hin_max=hin_max, c_hi_range=c_hi_range) ! output endif call icepack_query_tracer_flags(tr_fsd_out=tr_fsd) @@ -154,13 +154,12 @@ subroutine cice_init if (icepack_warnings_aborted()) call abort_ice(trim(subname), & file=__FILE__,line= __LINE__) - if (tr_fsd) call icepack_init_fsd_bounds (nfsd, & ! floe size distribution - floe_rad_l, & ! fsd size lower bound in m (radius) - floe_rad_c, & ! fsd size bin centre in m (radius) - floe_binwidth, & ! fsd size bin width in m (radius) - c_fsd_range, & ! string for history output + if (tr_fsd) call icepack_init_fsd_bounds ( & + floe_rad_l = floe_rad_l, & ! fsd size lower bound in m (radius) + floe_rad_c = floe_rad_c, & ! fsd size bin centre in m (radius) + floe_binwidth = floe_binwidth, & ! fsd size bin width in m (radius) + c_fsd_range = c_fsd_range, & ! string for history output write_diags=(my_task == master_task)) ! write diag on master only - call icepack_warnings_flush(nu_diag) if (icepack_warnings_aborted()) call abort_ice(error_message=subname, & file=__FILE__, line=__LINE__) @@ -479,8 +478,7 @@ subroutine init_restart do j = 1, ny_block do i = 1, nx_block if (tmask(i,j,iblk)) then - call icepack_aggregate(ncat = ncat, & - aicen = aicen(i,j,:,iblk), & + call icepack_aggregate(aicen = aicen(i,j,:,iblk), & trcrn = trcrn(i,j,:,:,iblk), & vicen = vicen(i,j,:,iblk), & vsnon = vsnon(i,j,:,iblk), & @@ -489,7 +487,6 @@ subroutine init_restart vice = vice (i,j, iblk), & vsno = vsno (i,j, iblk), & aice0 = aice0(i,j, iblk), & - ntrcr = ntrcr, & trcr_depend = trcr_depend, & trcr_base = trcr_base, & n_trcr_strata = n_trcr_strata, & diff --git a/cicecore/drivers/unittest/gridavgchk/CICE_InitMod.F90 b/cicecore/drivers/unittest/gridavgchk/CICE_InitMod.F90 index cb1241a5e..edb091941 100644 --- a/cicecore/drivers/unittest/gridavgchk/CICE_InitMod.F90 +++ b/cicecore/drivers/unittest/gridavgchk/CICE_InitMod.F90 @@ -66,7 +66,7 @@ subroutine cice_init floe_binwidth, c_fsd_range use ice_state, only: alloc_state use ice_flux_bgc, only: alloc_flux_bgc - use ice_calendar, only: dt, dt_dyn, write_ic, & + use ice_calendar, only: dt, write_ic, & init_calendar, advance_timestep, calc_timesteps use ice_communicate, only: init_communicate, my_task, master_task use ice_diagnostics, only: init_diags @@ -144,9 +144,9 @@ subroutine cice_init call init_thermo_vertical ! initialize vertical thermodynamics - call icepack_init_itd(ncat=ncat, hin_max=hin_max) ! ice thickness distribution + call icepack_init_itd(hin_max=hin_max) ! ice thickness distribution if (my_task == master_task) then - call icepack_init_itd_hist(ncat=ncat, hin_max=hin_max, c_hi_range=c_hi_range) ! output + call icepack_init_itd_hist(hin_max=hin_max, c_hi_range=c_hi_range) ! output endif call icepack_query_tracer_flags(tr_fsd_out=tr_fsd) @@ -154,13 +154,12 @@ subroutine cice_init if (icepack_warnings_aborted()) call abort_ice(trim(subname), & file=__FILE__,line= __LINE__) - if (tr_fsd) call icepack_init_fsd_bounds (nfsd, & ! floe size distribution - floe_rad_l, & ! fsd size lower bound in m (radius) - floe_rad_c, & ! fsd size bin centre in m (radius) - floe_binwidth, & ! fsd size bin width in m (radius) - c_fsd_range, & ! string for history output + if (tr_fsd) call icepack_init_fsd_bounds ( & + floe_rad_l = floe_rad_l, & ! fsd size lower bound in m (radius) + floe_rad_c = floe_rad_c, & ! fsd size bin centre in m (radius) + floe_binwidth = floe_binwidth, & ! fsd size bin width in m (radius) + c_fsd_range = c_fsd_range, & ! string for history output write_diags=(my_task == master_task)) ! write diag on master only - call icepack_warnings_flush(nu_diag) if (icepack_warnings_aborted()) call abort_ice(error_message=subname, & file=__FILE__, line=__LINE__) @@ -244,6 +243,7 @@ subroutine cice_init call init_flux_ocn ! initialize ocean fluxes sent to coupler call dealloc_grid ! deallocate temporary grid arrays + if (my_task == master_task) then call ice_memusage_print(nu_diag,subname//':end') endif @@ -478,8 +478,7 @@ subroutine init_restart do j = 1, ny_block do i = 1, nx_block if (tmask(i,j,iblk)) then - call icepack_aggregate(ncat = ncat, & - aicen = aicen(i,j,:,iblk), & + call icepack_aggregate(aicen = aicen(i,j,:,iblk), & trcrn = trcrn(i,j,:,:,iblk), & vicen = vicen(i,j,:,iblk), & vsnon = vsnon(i,j,:,iblk), & @@ -488,7 +487,6 @@ subroutine init_restart vice = vice (i,j, iblk), & vsno = vsno (i,j, iblk), & aice0 = aice0(i,j, iblk), & - ntrcr = ntrcr, & trcr_depend = trcr_depend, & trcr_base = trcr_base, & n_trcr_strata = n_trcr_strata, & diff --git a/cicecore/drivers/unittest/halochk/CICE_InitMod.F90 b/cicecore/drivers/unittest/halochk/CICE_InitMod.F90 index cb1241a5e..edb091941 100644 --- a/cicecore/drivers/unittest/halochk/CICE_InitMod.F90 +++ b/cicecore/drivers/unittest/halochk/CICE_InitMod.F90 @@ -66,7 +66,7 @@ subroutine cice_init floe_binwidth, c_fsd_range use ice_state, only: alloc_state use ice_flux_bgc, only: alloc_flux_bgc - use ice_calendar, only: dt, dt_dyn, write_ic, & + use ice_calendar, only: dt, write_ic, & init_calendar, advance_timestep, calc_timesteps use ice_communicate, only: init_communicate, my_task, master_task use ice_diagnostics, only: init_diags @@ -144,9 +144,9 @@ subroutine cice_init call init_thermo_vertical ! initialize vertical thermodynamics - call icepack_init_itd(ncat=ncat, hin_max=hin_max) ! ice thickness distribution + call icepack_init_itd(hin_max=hin_max) ! ice thickness distribution if (my_task == master_task) then - call icepack_init_itd_hist(ncat=ncat, hin_max=hin_max, c_hi_range=c_hi_range) ! output + call icepack_init_itd_hist(hin_max=hin_max, c_hi_range=c_hi_range) ! output endif call icepack_query_tracer_flags(tr_fsd_out=tr_fsd) @@ -154,13 +154,12 @@ subroutine cice_init if (icepack_warnings_aborted()) call abort_ice(trim(subname), & file=__FILE__,line= __LINE__) - if (tr_fsd) call icepack_init_fsd_bounds (nfsd, & ! floe size distribution - floe_rad_l, & ! fsd size lower bound in m (radius) - floe_rad_c, & ! fsd size bin centre in m (radius) - floe_binwidth, & ! fsd size bin width in m (radius) - c_fsd_range, & ! string for history output + if (tr_fsd) call icepack_init_fsd_bounds ( & + floe_rad_l = floe_rad_l, & ! fsd size lower bound in m (radius) + floe_rad_c = floe_rad_c, & ! fsd size bin centre in m (radius) + floe_binwidth = floe_binwidth, & ! fsd size bin width in m (radius) + c_fsd_range = c_fsd_range, & ! string for history output write_diags=(my_task == master_task)) ! write diag on master only - call icepack_warnings_flush(nu_diag) if (icepack_warnings_aborted()) call abort_ice(error_message=subname, & file=__FILE__, line=__LINE__) @@ -244,6 +243,7 @@ subroutine cice_init call init_flux_ocn ! initialize ocean fluxes sent to coupler call dealloc_grid ! deallocate temporary grid arrays + if (my_task == master_task) then call ice_memusage_print(nu_diag,subname//':end') endif @@ -478,8 +478,7 @@ subroutine init_restart do j = 1, ny_block do i = 1, nx_block if (tmask(i,j,iblk)) then - call icepack_aggregate(ncat = ncat, & - aicen = aicen(i,j,:,iblk), & + call icepack_aggregate(aicen = aicen(i,j,:,iblk), & trcrn = trcrn(i,j,:,:,iblk), & vicen = vicen(i,j,:,iblk), & vsnon = vsnon(i,j,:,iblk), & @@ -488,7 +487,6 @@ subroutine init_restart vice = vice (i,j, iblk), & vsno = vsno (i,j, iblk), & aice0 = aice0(i,j, iblk), & - ntrcr = ntrcr, & trcr_depend = trcr_depend, & trcr_base = trcr_base, & n_trcr_strata = n_trcr_strata, & diff --git a/cicecore/drivers/unittest/opticep/CICE_InitMod.F90 b/cicecore/drivers/unittest/opticep/CICE_InitMod.F90 index 194293118..edb091941 100644 --- a/cicecore/drivers/unittest/opticep/CICE_InitMod.F90 +++ b/cicecore/drivers/unittest/opticep/CICE_InitMod.F90 @@ -144,9 +144,9 @@ subroutine cice_init call init_thermo_vertical ! initialize vertical thermodynamics - call icepack_init_itd(ncat=ncat, hin_max=hin_max) ! ice thickness distribution + call icepack_init_itd(hin_max=hin_max) ! ice thickness distribution if (my_task == master_task) then - call icepack_init_itd_hist(ncat=ncat, hin_max=hin_max, c_hi_range=c_hi_range) ! output + call icepack_init_itd_hist(hin_max=hin_max, c_hi_range=c_hi_range) ! output endif call icepack_query_tracer_flags(tr_fsd_out=tr_fsd) @@ -154,13 +154,12 @@ subroutine cice_init if (icepack_warnings_aborted()) call abort_ice(trim(subname), & file=__FILE__,line= __LINE__) - if (tr_fsd) call icepack_init_fsd_bounds (nfsd, & ! floe size distribution - floe_rad_l, & ! fsd size lower bound in m (radius) - floe_rad_c, & ! fsd size bin centre in m (radius) - floe_binwidth, & ! fsd size bin width in m (radius) - c_fsd_range, & ! string for history output + if (tr_fsd) call icepack_init_fsd_bounds ( & + floe_rad_l = floe_rad_l, & ! fsd size lower bound in m (radius) + floe_rad_c = floe_rad_c, & ! fsd size bin centre in m (radius) + floe_binwidth = floe_binwidth, & ! fsd size bin width in m (radius) + c_fsd_range = c_fsd_range, & ! string for history output write_diags=(my_task == master_task)) ! write diag on master only - call icepack_warnings_flush(nu_diag) if (icepack_warnings_aborted()) call abort_ice(error_message=subname, & file=__FILE__, line=__LINE__) @@ -479,8 +478,7 @@ subroutine init_restart do j = 1, ny_block do i = 1, nx_block if (tmask(i,j,iblk)) then - call icepack_aggregate(ncat = ncat, & - aicen = aicen(i,j,:,iblk), & + call icepack_aggregate(aicen = aicen(i,j,:,iblk), & trcrn = trcrn(i,j,:,:,iblk), & vicen = vicen(i,j,:,iblk), & vsnon = vsnon(i,j,:,iblk), & @@ -489,7 +487,6 @@ subroutine init_restart vice = vice (i,j, iblk), & vsno = vsno (i,j, iblk), & aice0 = aice0(i,j, iblk), & - ntrcr = ntrcr, & trcr_depend = trcr_depend, & trcr_base = trcr_base, & n_trcr_strata = n_trcr_strata, & diff --git a/cicecore/drivers/unittest/opticep/ice_init_column.F90 b/cicecore/drivers/unittest/opticep/ice_init_column.F90 index a55338556..0b45a78af 100644 --- a/cicecore/drivers/unittest/opticep/ice_init_column.F90 +++ b/cicecore/drivers/unittest/opticep/ice_init_column.F90 @@ -55,27 +55,6 @@ module ice_init_column nitratetype , ammoniumtype , silicatetype, & dmspptype , dmspdtype , humtype - 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) :: & grid_o, l_sk, grid_o_t, initbio_frac, & frazil_scav, grid_oS, l_skS, & @@ -109,6 +88,7 @@ module ice_init_column max_loss , max_dfe_doc1 , fr_resp_s , & y_sk_DMS , t_sk_conv , t_sk_ox , & algaltype_diatoms , algaltype_sp , algaltype_phaeo , & + dictype_1 , & doctype_s , doctype_l , dontype_protein , & fedtype_1 , feptype_1 , zaerotype_bc1 , & zaerotype_bc2 , zaerotype_dust1 , zaerotype_dust2 , & @@ -149,7 +129,7 @@ subroutine init_thermo_vertical !----------------------------------------------------------------- call icepack_query_parameters(depressT_out=depressT) - call icepack_init_thermo(nilyr=nilyr, sprofile=sprofile) + call icepack_init_thermo(sprofile=sprofile) call icepack_warnings_flush(nu_diag) if (icepack_warnings_aborted()) call abort_ice(error_message=subname, & file=__FILE__, line=__LINE__) @@ -345,7 +325,6 @@ subroutine init_shortwave if (tmask(i,j,iblk)) then call icepack_step_radiation (dt=dt, & - swgrid=swgrid(:), igrid=igrid(:), & fbri=fbri(:), & aicen=aicen(i,j,:,iblk), & vicen=vicen(i,j,:,iblk), & @@ -656,10 +635,10 @@ subroutine init_fsd(floesize) if (tr_fsd) then ! initialize floe size distribution the same in every column and category - call icepack_init_fsd(nfsd, ice_ic, & - floe_rad_c, & ! fsd size bin centre in m (radius) - floe_binwidth, & ! fsd size bin width in m (radius) - afsd) ! floe size distribution + call icepack_init_fsd(ice_ic = ice_ic, & + floe_rad_c = floe_rad_c, & ! fsd size bin centre in m (radius) + floe_binwidth = floe_binwidth, & ! fsd size bin width in m (radius) + afsd = afsd) ! floe size distribution do iblk = 1, max_blocks do j = 1, ny_block @@ -670,7 +649,7 @@ subroutine init_fsd(floesize) enddo ! k enddo ! n - call icepack_cleanup_fsd (ncat, nfsd, afsdn) ! renormalize + call icepack_cleanup_fsd (afsdn = afsdn) ! renormalize do n = 1, ncat do k = 1, nfsd @@ -811,9 +790,7 @@ subroutine init_bgc() algalN=algalN(i,j,:,iblk), doc=doc (i,j,:,iblk), dic=dic(i,j,:,iblk), & don=don (i,j,:,iblk), fed=fed (i,j,:,iblk), fep=fep(i,j,:,iblk), & hum=hum (i,j, iblk), nit=nit (i,j, iblk), sil=sil(i,j, iblk), & - zaeros=zaeros(i,j,:,iblk), & - max_dic = icepack_max_dic, max_don = icepack_max_don, & - max_fe = icepack_max_fe, max_aero = icepack_max_aero) + zaeros=zaeros(i,j,:,iblk)) enddo ! i enddo ! j @@ -841,10 +818,7 @@ subroutine init_bgc() do j = jlo, jhi do i = ilo, ihi - call icepack_load_ocean_bio_array(max_nbtrcr=icepack_max_nbtrcr, & - max_algae=icepack_max_algae, max_don=icepack_max_don, & - max_doc=icepack_max_doc, max_fe=icepack_max_fe, & - max_dic=icepack_max_dic, max_aero=icepack_max_aero, & + call icepack_load_ocean_bio_array( & nit =nit (i,j, iblk), amm=amm(i,j, iblk), sil =sil (i,j, iblk), & dmsp=dmsp(i,j, iblk), dms=dms(i,j, iblk), algalN=algalN(i,j,:,iblk), & doc =doc (i,j,:,iblk), don=don(i,j,:,iblk), dic =dic (i,j,:,iblk), & @@ -881,8 +855,7 @@ subroutine init_bgc() trcrn_bgc(k-ntrcr_o,n) = trcrn(i,j,k,n,iblk) enddo enddo - call icepack_init_bgc(ncat=ncat, nblyr=nblyr, nilyr=nilyr, ntrcr_o=ntrcr_o, & - cgrid=cgrid, igrid=igrid, ntrcr=ntrcr, nbtrcr=nbtrcr, & + call icepack_init_bgc( & sicen=sicen(:,:), trcrn=trcrn_bgc(:,:), sss=sss(i,j, iblk), & ocean_bio_all=ocean_bio_all(i,j,:,iblk)) enddo ! i @@ -926,8 +899,7 @@ subroutine init_hbrine() if (icepack_warnings_aborted()) call abort_ice(error_message=subname, & file=__FILE__,line= __LINE__) - call icepack_init_hbrine(bgrid=bgrid, igrid=igrid, cgrid=cgrid, icgrid=icgrid, & - swgrid=swgrid, nblyr=nblyr, nilyr=nilyr, phi_snow=phi_snow) + call icepack_init_hbrine(phi_snow=phi_snow) call icepack_warnings_flush(nu_diag) if (icepack_warnings_aborted()) call abort_ice(error_message=subname, & file=__FILE__, line=__LINE__) @@ -1032,6 +1004,7 @@ subroutine input_zbgc algaltype_diatoms , algaltype_sp , algaltype_phaeo , & nitratetype , ammoniumtype , silicatetype , & dmspptype , dmspdtype , humtype , & + dictype_1 , & doctype_s , doctype_l , dontype_protein , & fedtype_1 , feptype_1 , zaerotype_bc1 , & zaerotype_bc2 , zaerotype_dust1 , zaerotype_dust2 , & @@ -1080,17 +1053,17 @@ subroutine input_zbgc tr_bgc_N = .true. ! ! brine height parameter - phi_snow = p5 ! snow porosity + phi_snow = -1.0_dbl_kind ! snow porosity ! skl biology parameters bgc_flux_type = 'Jin2006'! type of ocean-ice poston velocity ('constant') ! z biology parameters - grid_o = c5 ! for bottom flux - grid_o_t = c5 ! for top flux - l_sk = 7.0_dbl_kind ! characteristic diffusive scale (m) - initbio_frac = c1 ! fraction of ocean trcr concentration in bio trcrs - frazil_scav = c1 ! increase in initial bio tracer from ocean scavenging + grid_o = 0.006 ! for bottom flux + grid_o_t = 0.006 ! for top flux + l_sk = 2.0_dbl_kind ! characteristic diffusive scale (m) + initbio_frac = c1 ! fraction of ocean trcr concentration in bio trcrs + frazil_scav = 0.8_dbl_kind ! increase in initial bio tracer from ocean scavenging 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 @@ -1099,118 +1072,119 @@ subroutine input_zbgc 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_Fe2C_phaeo = 0.1_dbl_kind 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_s = 0.1_dbl_kind ! Fe to C of DOC (nmol/umol) saccharids ratio_Fe2DOC_l = 0.033_dbl_kind ! Fe to C of DOC (nmol/umol) lipids fr_resp = 0.05_dbl_kind ! frac of algal growth lost due to respiration - 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) - algal_vel = 1.11e-8_dbl_kind! 0.5 cm/d(m/s) Lavoie 2005 1.5 cm/day + tau_min = 3600.0_dbl_kind ! rapid mobile to stationary exchanges (s) + tau_max = 604800._dbl_kind! long time mobile to stationary exchanges (s) + algal_vel = 1.0e-7_dbl_kind ! 0.5 cm/d(m/s) Lavoie 2005 1.5 cm/day R_dFe2dust = 0.035_dbl_kind ! g/g (3.5% content) Tagliabue 2009 dustFe_sol = 0.005_dbl_kind ! solubility fraction 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) + alpha2max_low_diatoms = 0.30_dbl_kind ! light limitation (1/(W/m^2)) + alpha2max_low_sp = 0.20_dbl_kind + alpha2max_low_phaeo = 0.17_dbl_kind + beta2max_diatoms = 0.001_dbl_kind ! light inhibition (1/(W/m^2)) + beta2max_sp = 0.001_dbl_kind + beta2max_phaeo = 0.04_dbl_kind + mu_max_diatoms = 1.44_dbl_kind ! maximum growth rate (1/day) + mu_max_sp = 0.41_dbl_kind + mu_max_phaeo = 0.63_dbl_kind + grow_Tdep_diatoms = 0.063_dbl_kind ! Temperature dependence of growth (1/C) + grow_Tdep_sp = 0.063_dbl_kind + grow_Tdep_phaeo = 0.063_dbl_kind + fr_graze_diatoms = 0.19_dbl_kind ! Fraction grazed + fr_graze_sp = 0.19_dbl_kind + fr_graze_phaeo = 0.19_dbl_kind + 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_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_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_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_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_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_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 + K_Fe_phaeo = 0.1_dbl_kind + f_don_protein = 0.6_dbl_kind ! fraction of spilled grazing to proteins + kn_bac_protein = 0.2_dbl_kind ! Bacterial degredation of DON (1/d) + f_don_Am_protein = c1 ! fraction of remineralized DON to ammonium + f_doc_s = 0.5_dbl_kind ! fraction of mortality to DOC + f_doc_l = 0.5_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_s = 0.03_dbl_kind ! Bacterial degredation of DOC (1/d) k_bac_l = 0.03_dbl_kind - T_max = c0 ! maximum temperature (C) - fsal = c1 ! Salinity limitation (ppt) - op_dep_min = p1 ! Light attenuates for optical depths exceeding min - fr_graze_s = p5 ! fraction of grazing spilled or slopped - fr_graze_e = p5 ! fraction of assimilation excreted - fr_mort2min = p5 ! fractionation of mortality to Am - fr_dFe = 0.3_dbl_kind ! fraction of remineralized nitrogen - ! (in units of algal iron) - k_nitrif = c0 ! nitrification rate (1/day) + T_max = c0 ! maximum temperature (C) + fsal = c1 ! Salinity limitation (ppt) + op_dep_min = 0.1_dbl_kind ! Light attenuates for optical depths exceeding min + fr_graze_s = 0.5_dbl_kind ! fraction of grazing spilled or slopped + fr_graze_e = 0.5_dbl_kind ! fraction of assimilation excreted + fr_mort2min = 0.9_dbl_kind ! fractionation of mortality to Am + fr_dFe = c1 ! fraction of remineralized nitrogen + ! (in units of algal iron) + k_nitrif = 0.046_dbl_kind ! nitrification rate (1/day) t_iron_conv = 3065.0_dbl_kind ! desorption loss pFe to dFe (day) - max_loss = 0.9_dbl_kind ! restrict uptake to % of remaining value - max_dfe_doc1 = 0.2_dbl_kind ! max ratio of dFe to saccharides in the ice - !(nM Fe/muM C) - fr_resp_s = 0.75_dbl_kind ! DMSPd fraction of respiration loss as DMSPd - y_sk_DMS = p5 ! fraction conversion given high yield - t_sk_conv = 3.0_dbl_kind ! Stefels conversion time (d) - t_sk_ox = 10.0_dbl_kind ! DMS oxidation time (d) - 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) + max_loss = 0.9_dbl_kind ! restrict uptake to % of remaining value + max_dfe_doc1 = 0.2_dbl_kind ! max ratio of dFe to saccharides in the ice + !(nM Fe/muM C) + fr_resp_s = 0.9_dbl_kind ! DMSPd fraction of respiration loss as DMSPd + y_sk_DMS = 0.7_dbl_kind ! fraction conversion given high yield + t_sk_conv = 5.0_dbl_kind ! Stefels conversion time (d) + t_sk_ox = 12.0_dbl_kind ! DMS oxidation time (d) + algaltype_diatoms = c0 ! ------------------ + algaltype_sp = c0 ! + algaltype_phaeo = c0 ! + nitratetype = -c1 ! mobility type between + ammoniumtype = c0 ! stationary <--> mobile + silicatetype = -c1 ! + dmspptype = 0.5_dbl_kind ! + dmspdtype = c0 ! + humtype = c0 ! + dictype_1 = -c1 ! + doctype_s = c0 ! + doctype_l = c0 ! + dontype_protein = c0 ! + fedtype_1 = c0 ! + feptype_1 = 0.5_dbl_kind ! + 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_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_diatoms = 2.0_dbl_kind ! scales absorbed radiation for dEdd F_abs_chl_sp = 4.0_dbl_kind F_abs_chl_phaeo = 5.0 - ratio_C2N_proteins = 7.0_dbl_kind ! ratio of C to N in proteins (mol/mol) + ratio_C2N_proteins = 5.0_dbl_kind ! ratio of C to N in proteins (mol/mol) - ! z salinity parameters - grid_oS = c5 ! for bottom flux - l_skS = 7.0_dbl_kind ! characteristic diffusive scale (m) + ! z salinity parameters + grid_oS = c0 ! for bottom flux + l_skS = 0.028_dbl_kind ! characteristic diffusive scale (m) !----------------------------------------------------------------- ! read from input file @@ -1372,6 +1346,7 @@ subroutine input_zbgc call broadcast_scalar(dmspptype , master_task) call broadcast_scalar(dmspdtype , master_task) call broadcast_scalar(humtype , master_task) + call broadcast_scalar(dictype_1 , master_task) call broadcast_scalar(doctype_s , master_task) call broadcast_scalar(doctype_l , master_task) call broadcast_scalar(dontype_protein , master_task) @@ -1423,6 +1398,16 @@ subroutine input_zbgc ! biogeochemistry !----------------------------------------------------------------- + ! deprecate skl bgc (Aug 2024) + ! no skl code removed yet + if (skl_bgc) then + if (my_task == master_task) then + write(nu_diag,*) 'ERROR: skl_bgc is not validate and temporarily DEPRECATED' + write(nu_diag,*) 'ERROR: if you would like to use skl_bgc, please contact the Consortium' + abort_flag = 102 + endif + endif + if (.not. tr_brine) then if (solve_zbgc) then if (my_task == master_task) then @@ -1659,16 +1644,113 @@ subroutine input_zbgc ! set values in icepack !----------------------------------------------------------------- - call icepack_init_parameters( & - ktherm_in=ktherm, shortwave_in=shortwave, & - skl_bgc_in=skl_bgc, z_tracers_in=z_tracers, scale_bgc_in=scale_bgc, & - 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, & - grid_oS_in=grid_oS, l_skS_in=l_skS, & - phi_snow_in=phi_snow, frazil_scav_in = frazil_scav, & - modal_aero_in=modal_aero) + 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 abort_ice(error_message=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 abort_ice(error_message=subname, & file=__FILE__, line=__LINE__) @@ -2237,7 +2319,7 @@ subroutine init_zbgc use ice_state, only: trcr_base, trcr_depend, n_trcr_strata, & nt_strata - use ice_arrays_column, only: R_C2N, R_chl2N, R_C2N_DON, R_Si2N, trcrn_sw + use ice_arrays_column, only: R_C2N, R_chl2N, trcrn_sw integer (kind=int_kind) :: & nbtrcr, nbtrcr_sw, nt_fbri, & @@ -2306,6 +2388,27 @@ subroutine init_zbgc tr_bgc_DON, tr_bgc_Fe, tr_zaero, & tr_bgc_hum + 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) :: & initbio_frac, & frazil_scav @@ -2325,46 +2428,6 @@ subroutine init_zbgc logical (kind=log_kind) :: & skl_bgc, z_tracers, dEdd_algae - real (kind=dbl_kind), dimension(icepack_max_algae) :: & - F_abs_chl ! to scale absorption in Dedd - - real (kind=dbl_kind), dimension(icepack_max_algae) :: & - 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_doc , & ! fraction of mort_N that goes to each doc pool - f_exude , & ! fraction of exuded carbon to each DOC pool - k_bac ! Bacterial degredation of DOC (1/d) - integer (kind=int_kind) :: & k, mm , & ! loop index nk , & ! layer index @@ -2443,126 +2506,28 @@ subroutine init_zbgc !----------------------------------------------------------------- allocate( & - R_C2N_DON(icepack_max_don), & ! carbon to nitrogen mole ratio of DON pool - R_C2N(icepack_max_algae), & ! algal C to N (mole/mole) + R_C2N (icepack_max_algae), & ! algal C to N (mole/mole) R_chl2N(icepack_max_algae), & ! 3 algal chlorophyll to N (mg/mmol) - R_Si2N(icepack_max_algae), & ! silica to nitrogen mole ratio for algal groups stat=ierr) if (ierr/=0) call abort_ice(subname//' Out of Memory') - 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 + R_C2N(1) = ratio_C2N_diatoms + R_C2N(2) = ratio_C2N_sp + R_C2N(3) = ratio_C2N_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_doc(1) = f_doc_s - f_doc(2) = f_doc_l - - 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 + R_chl2N(1) = ratio_chl2N_diatoms + R_chl2N(2) = ratio_chl2N_sp + R_chl2N(3) = ratio_chl2N_phaeo 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 - + dictype(:) = -c1 + 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 @@ -2570,25 +2535,6 @@ subroutine init_zbgc zaerotype(5) = zaerotype_dust3 zaerotype(6) = zaerotype_dust4 - call icepack_init_zbgc ( & -!opt R_S2N_in=R_S2N, R_Fe2C_in=R_Fe2C, R_Fe2N_in=R_Fe2N, R_C2N_in=R_C2N, & -!opt R_chl2N_in=R_chl2N, F_abs_chl_in=F_abs_chl, R_Fe2DON_in=R_Fe2DON, R_Fe2DOC_in=R_Fe2DOC, & -!opt mort_Tdep_in=mort_Tdep, k_exude_in=k_exude, & -!opt K_Nit_in=K_Nit, K_Am_in=K_Am, K_sil_in=K_Sil, K_Fe_in=K_Fe, & -!opt 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, & -!opt fr_resp_in=fr_resp, algal_vel_in=algal_vel, R_dFe2dust_in=R_dFe2dust, & -!opt dustFe_sol_in=dustFe_sol, T_max_in=T_max, fr_mort2min_in=fr_mort2min, fr_dFe_in=fr_dFe, & -!opt op_dep_min_in=op_dep_min, fr_graze_s_in=fr_graze_s, fr_graze_e_in=fr_graze_e, & -!opt k_nitrif_in=k_nitrif, t_iron_conv_in=t_iron_conv, max_loss_in=max_loss, max_dfe_doc1_in=max_dfe_doc1, & -!opt 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, & -!opt mu_max_in=mu_max, R_Si2N_in=R_Si2N, R_C2N_DON_in=R_C2N_DON, chlabs_in=chlabs, & -!opt alpha2max_low_in=alpha2max_low, beta2max_in=beta2max, grow_Tdep_in=grow_Tdep, & -!opt fr_graze_in=fr_graze, mort_pre_in=mort_pre, f_doc_in=f_doc,fsal_in=fsal) - ) - call icepack_warnings_flush(nu_diag) - if (icepack_warnings_aborted()) call abort_ice(error_message=subname, & - file=__FILE__, line=__LINE__) - !----------------------------------------------------------------- ! assign tracer dependencies ! bgc_tracer_type: < 0 purely mobile , >= 0 stationary @@ -2875,7 +2821,11 @@ subroutine init_zbgc call icepack_init_zbgc( & !opt zbgc_init_frac_in=zbgc_init_frac, tau_ret_in=tau_ret, tau_rel_in=tau_rel, & !opt zbgc_frac_init_in=zbgc_frac_init, bgc_tracer_type_in=bgc_tracer_type) - ) + ) + call icepack_warnings_flush(nu_diag) + if (icepack_warnings_aborted()) call abort_ice(error_message=subname, & + file=__FILE__, line=__LINE__) + call icepack_init_tracer_indices( & bio_index_o_in=bio_index_o, bio_index_in=bio_index) call icepack_warnings_flush(nu_diag) @@ -2914,6 +2864,7 @@ subroutine init_zbgc write(nu_diag,1000) ' frazil_scav = ', frazil_scav endif ! skl_bgc or solve_bgc + call flush_fileunit(nu_diag) endif ! master_task 1000 format (a30,2x,f9.2) ! a30 to align formatted, unformatted statements @@ -2974,6 +2925,10 @@ subroutine init_bgc_trcr(nk, nt_fbri, & bgc_tracer_type(nlt_bgc) = bgctype + if (my_task == master_task) then + write(nu_diag,*) subname,'bgc_tracer_type',nlt_bgc,bgc_tracer_type(nlt_bgc) + endif + if (nk > 1) then ! include vertical bgc in snow do k = nk, nk+1 trcr_depend (nt_bgc + k ) = 2 ! snow volume diff --git a/cicecore/drivers/unittest/opticep/ice_step_mod.F90 b/cicecore/drivers/unittest/opticep/ice_step_mod.F90 index 64320e601..6e46ec51f 100644 --- a/cicecore/drivers/unittest/opticep/ice_step_mod.F90 +++ b/cicecore/drivers/unittest/opticep/ice_step_mod.F90 @@ -389,8 +389,7 @@ subroutine step_therm1 (dt, iblk) if (tmask(i,j,iblk)) then - call icepack_step_therm1(dt=dt, ncat=ncat, & - nilyr=nilyr, nslyr=nslyr, & + call icepack_step_therm1(dt=dt, & aicen_init = aicen_init (i,j,:,iblk), & vicen_init = vicen_init (i,j,:,iblk), & vsnon_init = vsnon_init (i,j,:,iblk), & @@ -680,8 +679,7 @@ subroutine step_therm2 (dt, iblk) if (tr_fsd) & wave_sig_ht(i,j,iblk) = c4*SQRT(SUM(wave_spectrum(i,j,:,iblk)*dwavefreq(:))) - call icepack_step_therm2(dt=dt, ncat=ncat, & - nltrcr=nltrcr, nilyr=nilyr, nslyr=nslyr, nblyr=nblyr, & + call icepack_step_therm2(dt=dt, & hin_max = hin_max (:), & aicen = aicen (i,j,:,iblk), & vicen = vicen (i,j,:,iblk), & @@ -709,9 +707,6 @@ subroutine step_therm2 (dt, iblk) fresh = fresh (i,j, iblk), & fsalt = fsalt (i,j, iblk), & fhocn = fhocn (i,j, iblk), & - bgrid = bgrid, & - cgrid = cgrid, & - igrid = igrid, & faero_ocn = faero_ocn (i,j,:,iblk), & first_ice = first_ice (i,j,:,iblk), & flux_bio = flux_bio (i,j,1:nbtrcr,iblk), & @@ -813,8 +808,7 @@ subroutine update_state (dt, daidt, dvidt, dvsdt, dagedt, offset) !----------------------------------------------------------------- ! if (tmask(i,j,iblk)) & - call icepack_aggregate(ncat = ncat, & - aicen = aicen(i,j,:,iblk), & + call icepack_aggregate(aicen = aicen(i,j,:,iblk), & trcrn = trcrn(i,j,:,:,iblk), & vicen = vicen(i,j,:,iblk), & vsnon = vsnon(i,j,:,iblk), & @@ -823,7 +817,6 @@ subroutine update_state (dt, daidt, dvidt, dvsdt, dagedt, offset) vice = vice (i,j, iblk), & vsno = vsno (i,j, iblk), & aice0 = aice0(i,j, iblk), & - ntrcr = ntrcr, & trcr_depend = trcr_depend(:), & trcr_base = trcr_base(:,:), & n_trcr_strata = n_trcr_strata(:), & @@ -839,7 +832,7 @@ subroutine update_state (dt, daidt, dvidt, dvsdt, dagedt, offset) if (present(daidt)) daidt(i,j,iblk) = (aice(i,j,iblk) - daidt(i,j,iblk)) / dt if (present(dvidt)) dvidt(i,j,iblk) = (vice(i,j,iblk) - dvidt(i,j,iblk)) / dt if (present(dvsdt)) dvsdt(i,j,iblk) = (vsno(i,j,iblk) - dvsdt(i,j,iblk)) / dt - if (tr_iage .and. present(dagedt)) then + if (present(dagedt) .and. tr_iage) then if (offset > c0) then ! thermo if (trcr(i,j,nt_iage,iblk) > c0) & dagedt(i,j,iblk) = (trcr(i,j,nt_iage,iblk) & @@ -916,16 +909,18 @@ subroutine step_dyn_wave (dt) do j = jlo, jhi do i = ilo, ihi d_afsd_wave(i,j,:,iblk) = c0 - call icepack_step_wavefracture (wave_spec_type, & - dt, ncat, nfsd, nfreq, & - aice (i,j, iblk), & - vice (i,j, iblk), & - aicen (i,j,:, iblk), & - floe_rad_l(:), floe_rad_c(:), & - wave_spectrum (i,j,:, iblk), & - wavefreq(:), dwavefreq(:), & - trcrn (i,j,:,:,iblk), & - d_afsd_wave (i,j,:, iblk)) + call icepack_step_wavefracture(wave_spec_type = wave_spec_type, & + dt = dt, nfreq = nfreq, & + aice = aice (i,j, iblk), & + vice = vice (i,j, iblk), & + aicen = aicen (i,j,:, iblk), & + floe_rad_l = floe_rad_l (:), & + floe_rad_c = floe_rad_c (:), & + wave_spectrum = wave_spectrum(i,j,:, iblk), & + wavefreq = wavefreq (:), & + dwavefreq = dwavefreq (:), & + trcrn = trcrn (i,j,:,:,iblk), & + d_afsd_wave = d_afsd_wave (i,j,:, iblk)) end do ! i end do ! j end do ! iblk @@ -1102,13 +1097,12 @@ subroutine step_dyn_ridge (dt, ndtd, iblk) if (tmask(i,j,iblk)) then - call icepack_step_ridge (dt=dt, ndtd=ndtd, & - nilyr=nilyr, nslyr=nslyr, nblyr=nblyr, & - ncat=ncat, n_aero=n_aero, hin_max=hin_max(:), & - trcr_depend = trcr_depend (:), & - trcr_base = trcr_base (:,:), & - n_trcr_strata = n_trcr_strata(:), & - nt_strata = nt_strata (:,:), & + call icepack_step_ridge (dt=dt, ndtd=ndtd, & + hin_max = hin_max(:), & + trcr_depend = trcr_depend (:), & + trcr_base = trcr_base (:,:),& + n_trcr_strata = n_trcr_strata(:), & + nt_strata = nt_strata (:,:),& trcrn = trcrn (i,j,:,:,iblk), & rdg_conv = rdg_conv (i,j, iblk), & rdg_shear = rdg_shear(i,j, iblk), & @@ -1225,27 +1219,26 @@ subroutine step_snow (dt, iblk) do j = jlo, jhi do i = ilo, ihi - call icepack_step_snow (dt, nilyr, & - nslyr, ncat, & - wind (i,j, iblk), & - aice (i,j, iblk), & - aicen(i,j,:,iblk), & - vicen(i,j,:,iblk), & - vsnon(i,j,:,iblk), & - trcrn(i,j,nt_Tsfc,:,iblk), & - trcrn(i,j,nt_qice,:,iblk), & ! top layer only - trcrn(i,j,nt_sice,:,iblk), & ! top layer only - trcrn(i,j,nt_qsno:nt_qsno+nslyr-1,:,iblk), & - trcrn(i,j,nt_alvl,:,iblk), & - trcrn(i,j,nt_vlvl,:,iblk), & - trcrn(i,j,nt_smice:nt_smice+nslyr-1,:,iblk), & - trcrn(i,j,nt_smliq:nt_smliq+nslyr-1,:,iblk), & - trcrn(i,j,nt_rsnw:nt_rsnw+nslyr-1,:,iblk), & - trcrn(i,j,nt_rhos:nt_rhos+nslyr-1,:,iblk), & - fresh (i,j,iblk), & - fhocn (i,j,iblk), & - fsloss (i,j,iblk), & - fsnow (i,j,iblk)) + call icepack_step_snow (dt = dt, & + wind = wind (i,j, iblk), & + aice = aice (i,j, iblk), & + aicen = aicen(i,j,:,iblk), & + vicen = vicen(i,j,:,iblk), & + vsnon = vsnon(i,j,:,iblk), & + Tsfc = trcrn(i,j,nt_Tsfc,:,iblk), & + zqin1 = trcrn(i,j,nt_qice,:,iblk), & ! top layer only + zSin1 = trcrn(i,j,nt_sice,:,iblk), & ! top layer only + zqsn = trcrn(i,j,nt_qsno:nt_qsno+nslyr-1,:,iblk), & + alvl = trcrn(i,j,nt_alvl,:,iblk), & + vlvl = trcrn(i,j,nt_vlvl,:,iblk), & + smice = trcrn(i,j,nt_smice:nt_smice+nslyr-1,:,iblk), & + smliq = trcrn(i,j,nt_smliq:nt_smliq+nslyr-1,:,iblk), & + rsnw = trcrn(i,j,nt_rsnw:nt_rsnw+nslyr-1,:,iblk), & + rhos_cmpn = trcrn(i,j,nt_rhos:nt_rhos+nslyr-1,:,iblk),& + fresh = fresh (i,j,iblk), & + fhocn = fhocn (i,j,iblk), & + fsloss = fsloss (i,j,iblk), & + fsnow = fsnow (i,j,iblk)) enddo enddo @@ -1385,7 +1378,6 @@ subroutine step_radiation (dt, iblk) if (tmask(i,j,iblk)) then call icepack_step_radiation (dt=dt, & - swgrid=swgrid(:), igrid=igrid(:), & fbri=fbri(:), & aicen=aicen(i,j, :,iblk), & vicen=vicen(i,j, :,iblk), & @@ -1619,7 +1611,7 @@ subroutine biogeochemistry (dt, iblk) use ice_domain_size, only: nblyr, nilyr, nslyr, n_algae, n_zaero, ncat, & n_doc, n_dic, n_don, n_fed, n_fep use ice_flux, only: meltbn, melttn, congeln, snoicen, & - sst, sss, fsnow, meltsn + sst, sss, Tf, fsnow, meltsn use ice_flux_bgc, only: hin_old, flux_bio, flux_bio_atm, faero_atm, & nit, amm, sil, dmsp, dms, algalN, doc, don, dic, fed, fep, zaeros, hum use ice_state, only: aicen_init, vicen_init, aicen, vicen, vsnon, & @@ -1680,10 +1672,7 @@ subroutine biogeochemistry (dt, iblk) do j = jlo, jhi do i = ilo, ihi - call icepack_load_ocean_bio_array(max_nbtrcr = icepack_max_nbtrcr, & - max_algae = icepack_max_algae, max_don = icepack_max_don, & - max_doc = icepack_max_doc, max_dic = icepack_max_dic, & - max_aero = icepack_max_aero, max_fe = icepack_max_fe, & + call icepack_load_ocean_bio_array( & nit = nit(i,j, iblk), amm = amm (i,j, iblk), & sil = sil(i,j, iblk), dmsp = dmsp (i,j, iblk), & dms = dms(i,j, iblk), algalN = algalN(i,j,:,iblk), & @@ -1702,10 +1691,7 @@ subroutine biogeochemistry (dt, iblk) enddo ! mm endif - call icepack_biogeochemistry(dt=dt, ntrcr=ntrcr, nbtrcr=nbtrcr,& - bgrid=bgrid, igrid=igrid, icgrid=icgrid, cgrid=cgrid, & - nblyr=nblyr, nilyr=nilyr, nslyr=nslyr, n_algae=n_algae, n_zaero=n_zaero, & - ncat=ncat, n_doc=n_doc, n_dic=n_dic, n_don=n_don, n_fed=n_fed, n_fep=n_fep, & + call icepack_biogeochemistry(dt=dt, & upNO = upNO (i,j, iblk), & upNH = upNH (i,j, iblk), & iDi = iDi (i,j,:,:, iblk), & @@ -1728,13 +1714,13 @@ subroutine biogeochemistry (dt, iblk) ice_bio_net = ice_bio_net (i,j,1:nbtrcr, iblk), & snow_bio_net = snow_bio_net(i,j,1:nbtrcr, iblk), & fswthrun = fswthrun (i,j,:, iblk), & - sice_rho = sice_rho (i,j,:, iblk), & meltbn = meltbn (i,j,:, iblk), & melttn = melttn (i,j,:, iblk), & congeln = congeln (i,j,:, iblk), & snoicen = snoicen (i,j,:, iblk), & sst = sst (i,j, iblk), & sss = sss (i,j, iblk), & + Tf = Tf (i,j, iblk), & fsnow = fsnow (i,j, iblk), & meltsn = meltsn (i,j,:, iblk), & hin_old = hin_old (i,j,:, iblk), & @@ -1747,8 +1733,7 @@ subroutine biogeochemistry (dt, iblk) vsnon = vsnon (i,j,:, iblk), & aice0 = aice0 (i,j, iblk), & trcrn = trcrn (i,j,:,:, iblk), & - vsnon_init = vsnon_init (i,j,:, iblk), & - skl_bgc = skl_bgc) + vsnon_init = vsnon_init (i,j,:, iblk)) enddo ! i enddo ! j diff --git a/cicecore/drivers/unittest/sumchk/CICE_InitMod.F90 b/cicecore/drivers/unittest/sumchk/CICE_InitMod.F90 index cb1241a5e..edb091941 100644 --- a/cicecore/drivers/unittest/sumchk/CICE_InitMod.F90 +++ b/cicecore/drivers/unittest/sumchk/CICE_InitMod.F90 @@ -66,7 +66,7 @@ subroutine cice_init floe_binwidth, c_fsd_range use ice_state, only: alloc_state use ice_flux_bgc, only: alloc_flux_bgc - use ice_calendar, only: dt, dt_dyn, write_ic, & + use ice_calendar, only: dt, write_ic, & init_calendar, advance_timestep, calc_timesteps use ice_communicate, only: init_communicate, my_task, master_task use ice_diagnostics, only: init_diags @@ -144,9 +144,9 @@ subroutine cice_init call init_thermo_vertical ! initialize vertical thermodynamics - call icepack_init_itd(ncat=ncat, hin_max=hin_max) ! ice thickness distribution + call icepack_init_itd(hin_max=hin_max) ! ice thickness distribution if (my_task == master_task) then - call icepack_init_itd_hist(ncat=ncat, hin_max=hin_max, c_hi_range=c_hi_range) ! output + call icepack_init_itd_hist(hin_max=hin_max, c_hi_range=c_hi_range) ! output endif call icepack_query_tracer_flags(tr_fsd_out=tr_fsd) @@ -154,13 +154,12 @@ subroutine cice_init if (icepack_warnings_aborted()) call abort_ice(trim(subname), & file=__FILE__,line= __LINE__) - if (tr_fsd) call icepack_init_fsd_bounds (nfsd, & ! floe size distribution - floe_rad_l, & ! fsd size lower bound in m (radius) - floe_rad_c, & ! fsd size bin centre in m (radius) - floe_binwidth, & ! fsd size bin width in m (radius) - c_fsd_range, & ! string for history output + if (tr_fsd) call icepack_init_fsd_bounds ( & + floe_rad_l = floe_rad_l, & ! fsd size lower bound in m (radius) + floe_rad_c = floe_rad_c, & ! fsd size bin centre in m (radius) + floe_binwidth = floe_binwidth, & ! fsd size bin width in m (radius) + c_fsd_range = c_fsd_range, & ! string for history output write_diags=(my_task == master_task)) ! write diag on master only - call icepack_warnings_flush(nu_diag) if (icepack_warnings_aborted()) call abort_ice(error_message=subname, & file=__FILE__, line=__LINE__) @@ -244,6 +243,7 @@ subroutine cice_init call init_flux_ocn ! initialize ocean fluxes sent to coupler call dealloc_grid ! deallocate temporary grid arrays + if (my_task == master_task) then call ice_memusage_print(nu_diag,subname//':end') endif @@ -478,8 +478,7 @@ subroutine init_restart do j = 1, ny_block do i = 1, nx_block if (tmask(i,j,iblk)) then - call icepack_aggregate(ncat = ncat, & - aicen = aicen(i,j,:,iblk), & + call icepack_aggregate(aicen = aicen(i,j,:,iblk), & trcrn = trcrn(i,j,:,:,iblk), & vicen = vicen(i,j,:,iblk), & vsnon = vsnon(i,j,:,iblk), & @@ -488,7 +487,6 @@ subroutine init_restart vice = vice (i,j, iblk), & vsno = vsno (i,j, iblk), & aice0 = aice0(i,j, iblk), & - ntrcr = ntrcr, & trcr_depend = trcr_depend, & trcr_base = trcr_base, & n_trcr_strata = n_trcr_strata, & diff --git a/cicecore/shared/ice_arrays_column.F90 b/cicecore/shared/ice_arrays_column.F90 index 9480d79bc..337828d60 100644 --- a/cicecore/shared/ice_arrays_column.F90 +++ b/cicecore/shared/ice_arrays_column.F90 @@ -229,12 +229,8 @@ module ice_arrays_column bgc_data_dir ! directory for biogeochemistry data real (kind=dbl_kind), dimension(:), allocatable, public :: & - R_C2N_DON ! carbon to nitrogen mole ratio of DON pool - - real (kind=dbl_kind), dimension(:), allocatable, public :: & - R_C2N , & ! algal C to N (mole/mole) - R_chl2N , & ! 3 algal chlorophyll to N (mg/mmol) - R_Si2N ! silica to nitrogen mole ratio for algal groups + R_chl2N, & ! 3 algal chlorophyll to N (mg/mmol) + R_C2N ! algal C to N (mole/mole) ! floe size distribution real(kind=dbl_kind), dimension(:), allocatable, public :: & diff --git a/cicecore/shared/ice_distribution.F90 b/cicecore/shared/ice_distribution.F90 index d0768fc5a..bc2f72f00 100644 --- a/cicecore/shared/ice_distribution.F90 +++ b/cicecore/shared/ice_distribution.F90 @@ -41,7 +41,7 @@ module ice_distribution ice_distributionGetBlockLoc, & ice_distributionGetBlockID, & create_local_block_ids, & - proc_decomposition + proc_decomposition character (char_len), public :: & processor_shape ! 'square-pop' (approx) POP default config diff --git a/cicecore/shared/ice_init_column.F90 b/cicecore/shared/ice_init_column.F90 index 22cd3184a..10936fa7e 100644 --- a/cicecore/shared/ice_init_column.F90 +++ b/cicecore/shared/ice_init_column.F90 @@ -55,27 +55,6 @@ module ice_init_column nitratetype , ammoniumtype , silicatetype, & dmspptype , dmspdtype , humtype - 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) :: & grid_o, l_sk, grid_o_t, initbio_frac, & frazil_scav, grid_oS, l_skS, & @@ -109,6 +88,7 @@ module ice_init_column max_loss , max_dfe_doc1 , fr_resp_s , & y_sk_DMS , t_sk_conv , t_sk_ox , & algaltype_diatoms , algaltype_sp , algaltype_phaeo , & + dictype_1 , & doctype_s , doctype_l , dontype_protein , & fedtype_1 , feptype_1 , zaerotype_bc1 , & zaerotype_bc2 , zaerotype_dust1 , zaerotype_dust2 , & @@ -149,7 +129,7 @@ subroutine init_thermo_vertical !----------------------------------------------------------------- call icepack_query_parameters(depressT_out=depressT) - call icepack_init_thermo(nilyr=nilyr, sprofile=sprofile) + call icepack_init_thermo(sprofile=sprofile) call icepack_warnings_flush(nu_diag) if (icepack_warnings_aborted()) call abort_ice(error_message=subname, & file=__FILE__, line=__LINE__) @@ -345,7 +325,6 @@ subroutine init_shortwave if (tmask(i,j,iblk)) then call icepack_step_radiation (dt=dt, & - swgrid=swgrid(:), igrid=igrid(:), & fbri=fbri(:), & aicen=aicen(i,j,:,iblk), & vicen=vicen(i,j,:,iblk), & @@ -656,10 +635,10 @@ subroutine init_fsd(floesize) if (tr_fsd) then ! initialize floe size distribution the same in every column and category - call icepack_init_fsd(nfsd, ice_ic, & - floe_rad_c, & ! fsd size bin centre in m (radius) - floe_binwidth, & ! fsd size bin width in m (radius) - afsd) ! floe size distribution + call icepack_init_fsd(ice_ic = ice_ic, & + floe_rad_c = floe_rad_c, & ! fsd size bin centre in m (radius) + floe_binwidth = floe_binwidth, & ! fsd size bin width in m (radius) + afsd = afsd) ! floe size distribution do iblk = 1, max_blocks do j = 1, ny_block @@ -670,7 +649,7 @@ subroutine init_fsd(floesize) enddo ! k enddo ! n - call icepack_cleanup_fsd (ncat, nfsd, afsdn) ! renormalize + call icepack_cleanup_fsd (afsdn = afsdn) ! renormalize do n = 1, ncat do k = 1, nfsd @@ -811,9 +790,7 @@ subroutine init_bgc() algalN=algalN(i,j,:,iblk), doc=doc (i,j,:,iblk), dic=dic(i,j,:,iblk), & don=don (i,j,:,iblk), fed=fed (i,j,:,iblk), fep=fep(i,j,:,iblk), & hum=hum (i,j, iblk), nit=nit (i,j, iblk), sil=sil(i,j, iblk), & - zaeros=zaeros(i,j,:,iblk), & - max_dic = icepack_max_dic, max_don = icepack_max_don, & - max_fe = icepack_max_fe, max_aero = icepack_max_aero) + zaeros=zaeros(i,j,:,iblk)) enddo ! i enddo ! j @@ -841,10 +818,7 @@ subroutine init_bgc() do j = jlo, jhi do i = ilo, ihi - call icepack_load_ocean_bio_array(max_nbtrcr=icepack_max_nbtrcr, & - max_algae=icepack_max_algae, max_don=icepack_max_don, & - max_doc=icepack_max_doc, max_fe=icepack_max_fe, & - max_dic=icepack_max_dic, max_aero=icepack_max_aero, & + call icepack_load_ocean_bio_array( & nit =nit (i,j, iblk), amm=amm(i,j, iblk), sil =sil (i,j, iblk), & dmsp=dmsp(i,j, iblk), dms=dms(i,j, iblk), algalN=algalN(i,j,:,iblk), & doc =doc (i,j,:,iblk), don=don(i,j,:,iblk), dic =dic (i,j,:,iblk), & @@ -881,8 +855,7 @@ subroutine init_bgc() trcrn_bgc(k-ntrcr_o,n) = trcrn(i,j,k,n,iblk) enddo enddo - call icepack_init_bgc(ncat=ncat, nblyr=nblyr, nilyr=nilyr, ntrcr_o=ntrcr_o, & - cgrid=cgrid, igrid=igrid, ntrcr=ntrcr, nbtrcr=nbtrcr, & + call icepack_init_bgc( & sicen=sicen(:,:), trcrn=trcrn_bgc(:,:), sss=sss(i,j, iblk), & ocean_bio_all=ocean_bio_all(i,j,:,iblk)) enddo ! i @@ -926,8 +899,7 @@ subroutine init_hbrine() if (icepack_warnings_aborted()) call abort_ice(error_message=subname, & file=__FILE__,line= __LINE__) - call icepack_init_hbrine(bgrid=bgrid, igrid=igrid, cgrid=cgrid, icgrid=icgrid, & - swgrid=swgrid, nblyr=nblyr, nilyr=nilyr, phi_snow=phi_snow) + call icepack_init_hbrine(phi_snow=phi_snow) call icepack_warnings_flush(nu_diag) if (icepack_warnings_aborted()) call abort_ice(error_message=subname, & file=__FILE__, line=__LINE__) @@ -1032,6 +1004,7 @@ subroutine input_zbgc algaltype_diatoms , algaltype_sp , algaltype_phaeo , & nitratetype , ammoniumtype , silicatetype , & dmspptype , dmspdtype , humtype , & + dictype_1 , & doctype_s , doctype_l , dontype_protein , & fedtype_1 , feptype_1 , zaerotype_bc1 , & zaerotype_bc2 , zaerotype_dust1 , zaerotype_dust2 , & @@ -1080,17 +1053,17 @@ subroutine input_zbgc tr_bgc_N = .true. ! ! brine height parameter - phi_snow = p5 ! snow porosity + phi_snow = -1.0_dbl_kind ! snow porosity ! skl biology parameters bgc_flux_type = 'Jin2006'! type of ocean-ice poston velocity ('constant') ! z biology parameters - grid_o = c5 ! for bottom flux - grid_o_t = c5 ! for top flux - l_sk = 7.0_dbl_kind ! characteristic diffusive scale (m) - initbio_frac = c1 ! fraction of ocean trcr concentration in bio trcrs - frazil_scav = c1 ! increase in initial bio tracer from ocean scavenging + grid_o = 0.006 ! for bottom flux + grid_o_t = 0.006 ! for top flux + l_sk = 2.0_dbl_kind ! characteristic diffusive scale (m) + initbio_frac = c1 ! fraction of ocean trcr concentration in bio trcrs + frazil_scav = 0.8_dbl_kind ! increase in initial bio tracer from ocean scavenging 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 @@ -1099,118 +1072,119 @@ subroutine input_zbgc 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_Fe2C_phaeo = 0.1_dbl_kind 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_s = 0.1_dbl_kind ! Fe to C of DOC (nmol/umol) saccharids ratio_Fe2DOC_l = 0.033_dbl_kind ! Fe to C of DOC (nmol/umol) lipids fr_resp = 0.05_dbl_kind ! frac of algal growth lost due to respiration - 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) - algal_vel = 1.11e-8_dbl_kind! 0.5 cm/d(m/s) Lavoie 2005 1.5 cm/day + tau_min = 3600.0_dbl_kind ! rapid mobile to stationary exchanges (s) + tau_max = 604800._dbl_kind! long time mobile to stationary exchanges (s) + algal_vel = 1.0e-7_dbl_kind ! 0.5 cm/d(m/s) Lavoie 2005 1.5 cm/day R_dFe2dust = 0.035_dbl_kind ! g/g (3.5% content) Tagliabue 2009 dustFe_sol = 0.005_dbl_kind ! solubility fraction 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) + alpha2max_low_diatoms = 0.30_dbl_kind ! light limitation (1/(W/m^2)) + alpha2max_low_sp = 0.20_dbl_kind + alpha2max_low_phaeo = 0.17_dbl_kind + beta2max_diatoms = 0.001_dbl_kind ! light inhibition (1/(W/m^2)) + beta2max_sp = 0.001_dbl_kind + beta2max_phaeo = 0.04_dbl_kind + mu_max_diatoms = 1.44_dbl_kind ! maximum growth rate (1/day) + mu_max_sp = 0.41_dbl_kind + mu_max_phaeo = 0.63_dbl_kind + grow_Tdep_diatoms = 0.063_dbl_kind ! Temperature dependence of growth (1/C) + grow_Tdep_sp = 0.063_dbl_kind + grow_Tdep_phaeo = 0.063_dbl_kind + fr_graze_diatoms = 0.19_dbl_kind ! Fraction grazed + fr_graze_sp = 0.19_dbl_kind + fr_graze_phaeo = 0.19_dbl_kind + 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_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_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_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_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_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_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 + K_Fe_phaeo = 0.1_dbl_kind + f_don_protein = 0.6_dbl_kind ! fraction of spilled grazing to proteins + kn_bac_protein = 0.2_dbl_kind ! Bacterial degredation of DON (1/d) + f_don_Am_protein = c1 ! fraction of remineralized DON to ammonium + f_doc_s = 0.5_dbl_kind ! fraction of mortality to DOC + f_doc_l = 0.5_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_s = 0.03_dbl_kind ! Bacterial degredation of DOC (1/d) k_bac_l = 0.03_dbl_kind - T_max = c0 ! maximum temperature (C) - fsal = c1 ! Salinity limitation (ppt) - op_dep_min = p1 ! Light attenuates for optical depths exceeding min - fr_graze_s = p5 ! fraction of grazing spilled or slopped - fr_graze_e = p5 ! fraction of assimilation excreted - fr_mort2min = p5 ! fractionation of mortality to Am - fr_dFe = 0.3_dbl_kind ! fraction of remineralized nitrogen - ! (in units of algal iron) - k_nitrif = c0 ! nitrification rate (1/day) + T_max = c0 ! maximum temperature (C) + fsal = c1 ! Salinity limitation (ppt) + op_dep_min = 0.1_dbl_kind ! Light attenuates for optical depths exceeding min + fr_graze_s = 0.5_dbl_kind ! fraction of grazing spilled or slopped + fr_graze_e = 0.5_dbl_kind ! fraction of assimilation excreted + fr_mort2min = 0.9_dbl_kind ! fractionation of mortality to Am + fr_dFe = c1 ! fraction of remineralized nitrogen + ! (in units of algal iron) + k_nitrif = 0.046_dbl_kind ! nitrification rate (1/day) t_iron_conv = 3065.0_dbl_kind ! desorption loss pFe to dFe (day) - max_loss = 0.9_dbl_kind ! restrict uptake to % of remaining value - max_dfe_doc1 = 0.2_dbl_kind ! max ratio of dFe to saccharides in the ice - !(nM Fe/muM C) - fr_resp_s = 0.75_dbl_kind ! DMSPd fraction of respiration loss as DMSPd - y_sk_DMS = p5 ! fraction conversion given high yield - t_sk_conv = 3.0_dbl_kind ! Stefels conversion time (d) - t_sk_ox = 10.0_dbl_kind ! DMS oxidation time (d) - 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) + max_loss = 0.9_dbl_kind ! restrict uptake to % of remaining value + max_dfe_doc1 = 0.2_dbl_kind ! max ratio of dFe to saccharides in the ice + !(nM Fe/muM C) + fr_resp_s = 0.9_dbl_kind ! DMSPd fraction of respiration loss as DMSPd + y_sk_DMS = 0.7_dbl_kind ! fraction conversion given high yield + t_sk_conv = 5.0_dbl_kind ! Stefels conversion time (d) + t_sk_ox = 12.0_dbl_kind ! DMS oxidation time (d) + algaltype_diatoms = c0 ! ------------------ + algaltype_sp = c0 ! + algaltype_phaeo = c0 ! + nitratetype = -c1 ! mobility type between + ammoniumtype = c0 ! stationary <--> mobile + silicatetype = -c1 ! + dmspptype = 0.5_dbl_kind ! + dmspdtype = c0 ! + humtype = c0 ! + dictype_1 = -c1 ! + doctype_s = c0 ! + doctype_l = c0 ! + dontype_protein = c0 ! + fedtype_1 = c0 ! + feptype_1 = 0.5_dbl_kind ! + 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_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_diatoms = 2.0_dbl_kind ! scales absorbed radiation for dEdd F_abs_chl_sp = 4.0_dbl_kind F_abs_chl_phaeo = 5.0 - ratio_C2N_proteins = 7.0_dbl_kind ! ratio of C to N in proteins (mol/mol) + ratio_C2N_proteins = 5.0_dbl_kind ! ratio of C to N in proteins (mol/mol) - ! z salinity parameters - grid_oS = c5 ! for bottom flux - l_skS = 7.0_dbl_kind ! characteristic diffusive scale (m) + ! z salinity parameters + grid_oS = c0 ! for bottom flux + l_skS = 0.028_dbl_kind ! characteristic diffusive scale (m) !----------------------------------------------------------------- ! read from input file @@ -1372,6 +1346,7 @@ subroutine input_zbgc call broadcast_scalar(dmspptype , master_task) call broadcast_scalar(dmspdtype , master_task) call broadcast_scalar(humtype , master_task) + call broadcast_scalar(dictype_1 , master_task) call broadcast_scalar(doctype_s , master_task) call broadcast_scalar(doctype_l , master_task) call broadcast_scalar(dontype_protein , master_task) @@ -1423,6 +1398,16 @@ subroutine input_zbgc ! biogeochemistry !----------------------------------------------------------------- + ! deprecate skl bgc (Aug 2024) + ! no skl code removed yet + if (skl_bgc) then + if (my_task == master_task) then + write(nu_diag,*) 'ERROR: skl_bgc is not validate and temporarily DEPRECATED' + write(nu_diag,*) 'ERROR: if you would like to use skl_bgc, please contact the Consortium' + abort_flag = 102 + endif + endif + if (.not. tr_brine) then if (solve_zbgc) then if (my_task == master_task) then @@ -1659,16 +1644,113 @@ subroutine input_zbgc ! set values in icepack !----------------------------------------------------------------- - call icepack_init_parameters( & - ktherm_in=ktherm, shortwave_in=shortwave, & - skl_bgc_in=skl_bgc, z_tracers_in=z_tracers, scale_bgc_in=scale_bgc, & - 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, & - grid_oS_in=grid_oS, l_skS_in=l_skS, & - phi_snow_in=phi_snow, frazil_scav_in = frazil_scav, & - modal_aero_in=modal_aero) + 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 abort_ice(error_message=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 abort_ice(error_message=subname, & file=__FILE__, line=__LINE__) @@ -2237,7 +2319,7 @@ subroutine init_zbgc use ice_state, only: trcr_base, trcr_depend, n_trcr_strata, & nt_strata - use ice_arrays_column, only: R_C2N, R_chl2N, R_C2N_DON, R_Si2N, trcrn_sw + use ice_arrays_column, only: R_C2N, R_chl2N, trcrn_sw integer (kind=int_kind) :: & nbtrcr, nbtrcr_sw, nt_fbri, & @@ -2306,6 +2388,27 @@ subroutine init_zbgc tr_bgc_DON, tr_bgc_Fe, tr_zaero, & tr_bgc_hum + 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) :: & initbio_frac, & frazil_scav @@ -2325,46 +2428,6 @@ subroutine init_zbgc logical (kind=log_kind) :: & skl_bgc, z_tracers, dEdd_algae - real (kind=dbl_kind), dimension(icepack_max_algae) :: & - F_abs_chl ! to scale absorption in Dedd - - real (kind=dbl_kind), dimension(icepack_max_algae) :: & - 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_doc , & ! fraction of mort_N that goes to each doc pool - f_exude , & ! fraction of exuded carbon to each DOC pool - k_bac ! Bacterial degredation of DOC (1/d) - integer (kind=int_kind) :: & k, mm , & ! loop index nk , & ! layer index @@ -2443,126 +2506,28 @@ subroutine init_zbgc !----------------------------------------------------------------- allocate( & - R_C2N_DON(icepack_max_don), & ! carbon to nitrogen mole ratio of DON pool - R_C2N(icepack_max_algae), & ! algal C to N (mole/mole) + R_C2N (icepack_max_algae), & ! algal C to N (mole/mole) R_chl2N(icepack_max_algae), & ! 3 algal chlorophyll to N (mg/mmol) - R_Si2N(icepack_max_algae), & ! silica to nitrogen mole ratio for algal groups stat=ierr) if (ierr/=0) call abort_ice(subname//' Out of Memory') - 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 + R_C2N(1) = ratio_C2N_diatoms + R_C2N(2) = ratio_C2N_sp + R_C2N(3) = ratio_C2N_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_doc(1) = f_doc_s - f_doc(2) = f_doc_l - - 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 + R_chl2N(1) = ratio_chl2N_diatoms + R_chl2N(2) = ratio_chl2N_sp + R_chl2N(3) = ratio_chl2N_phaeo 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 - + dictype(:) = -c1 + 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 @@ -2570,24 +2535,6 @@ subroutine init_zbgc zaerotype(5) = zaerotype_dust3 zaerotype(6) = zaerotype_dust4 - call icepack_init_zbgc ( & - 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_Fe2DOC_in=R_Fe2DOC, & - 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, & - mu_max_in=mu_max, R_Si2N_in=R_Si2N, R_C2N_DON_in=R_C2N_DON, chlabs_in=chlabs, & - alpha2max_low_in=alpha2max_low, beta2max_in=beta2max, grow_Tdep_in=grow_Tdep, & - fr_graze_in=fr_graze, mort_pre_in=mort_pre, f_doc_in=f_doc,fsal_in=fsal) - call icepack_warnings_flush(nu_diag) - if (icepack_warnings_aborted()) call abort_ice(error_message=subname, & - file=__FILE__, line=__LINE__) - !----------------------------------------------------------------- ! assign tracer dependencies ! bgc_tracer_type: < 0 purely mobile , >= 0 stationary @@ -2874,6 +2821,10 @@ subroutine init_zbgc call icepack_init_zbgc( & zbgc_init_frac_in=zbgc_init_frac, tau_ret_in=tau_ret, tau_rel_in=tau_rel, & zbgc_frac_init_in=zbgc_frac_init, bgc_tracer_type_in=bgc_tracer_type) + call icepack_warnings_flush(nu_diag) + if (icepack_warnings_aborted()) call abort_ice(error_message=subname, & + file=__FILE__, line=__LINE__) + call icepack_init_tracer_indices( & bio_index_o_in=bio_index_o, bio_index_in=bio_index) call icepack_warnings_flush(nu_diag) @@ -2912,6 +2863,7 @@ subroutine init_zbgc write(nu_diag,1000) ' frazil_scav = ', frazil_scav endif ! skl_bgc or solve_bgc + call flush_fileunit(nu_diag) endif ! master_task 1000 format (a30,2x,f9.2) ! a30 to align formatted, unformatted statements @@ -2972,6 +2924,10 @@ subroutine init_bgc_trcr(nk, nt_fbri, & bgc_tracer_type(nlt_bgc) = bgctype + if (my_task == master_task) then + write(nu_diag,*) subname,'bgc_tracer_type',nlt_bgc,bgc_tracer_type(nlt_bgc) + endif + if (nk > 1) then ! include vertical bgc in snow do k = nk, nk+1 trcr_depend (nt_bgc + k ) = 2 ! snow volume diff --git a/configuration/scripts/ice_in b/configuration/scripts/ice_in index d9215de60..d97671021 100644 --- a/configuration/scripts/ice_in +++ b/configuration/scripts/ice_in @@ -337,23 +337,23 @@ scale_bgc = .false. solve_zsal = .false. restart_zsal = .false. - tr_bgc_Nit = .true. - tr_bgc_C = .true. + tr_bgc_Nit = .false. + tr_bgc_C = .false. tr_bgc_chl = .false. - tr_bgc_Am = .true. - tr_bgc_Sil = .true. + tr_bgc_Am = .false. + tr_bgc_Sil = .false. tr_bgc_DMS = .false. - tr_bgc_PON = .true. - tr_bgc_hum = .true. + tr_bgc_PON = .false. + tr_bgc_hum = .false. tr_bgc_DON = .false. - tr_bgc_Fe = .true. + tr_bgc_Fe = .false. grid_o = 0.006 grid_o_t = 0.006 - l_sk = 0.024 + l_sk = 2.0 grid_oS = 0.0 l_skS = 0.028 - phi_snow = -0.3 - initbio_frac = 0.8 + phi_snow = -1.0 + initbio_frac = 1.0 frazil_scav = 0.8 ratio_Si2N_diatoms = 1.8 ratio_Si2N_sp = 0.0 @@ -371,29 +371,29 @@ ratio_Fe2DOC_s = 0.1 ratio_Fe2DOC_l = 0.033 fr_resp = 0.05 - tau_min = 5200.0 - tau_max = 173000.0 - algal_vel = 0.0000000111 + tau_min = 3600.0 + tau_max = 604800.0 + algal_vel = 0.0000001 R_dFe2dust = 0.035 dustFe_sol = 0.005 chlabs_diatoms = 0.03 chlabs_sp = 0.01 chlabs_phaeo = 0.05 - alpha2max_low_diatoms = 0.8 - alpha2max_low_sp = 0.67 - alpha2max_low_phaeo = 0.67 - beta2max_diatoms = 0.018 - beta2max_sp = 0.0025 - beta2max_phaeo = 0.01 + alpha2max_low_diatoms = 0.3 + alpha2max_low_sp = 0.2 + alpha2max_low_phaeo = 0.17 + beta2max_diatoms = 0.001 + beta2max_sp = 0.001 + beta2max_phaeo = 0.04 mu_max_diatoms = 1.44 - mu_max_sp = 0.851 - mu_max_phaeo = 0.851 - grow_Tdep_diatoms = 0.06 - grow_Tdep_sp = 0.06 - grow_Tdep_phaeo = 0.06 - fr_graze_diatoms = 0.0 - fr_graze_sp = 0.1 - fr_graze_phaeo = 0.1 + mu_max_sp = 0.41 + mu_max_phaeo = 0.63 + grow_Tdep_diatoms = 0.063 + grow_Tdep_sp = 0.063 + grow_Tdep_phaeo = 0.063 + fr_graze_diatoms = 0.19 + fr_graze_sp = 0.19 + fr_graze_phaeo = 0.19 mort_pre_diatoms = 0.007 mort_pre_sp = 0.007 mort_pre_phaeo = 0.007 @@ -416,10 +416,10 @@ K_Fe_sp = 0.2 K_Fe_phaeo = 0.1 f_don_protein = 0.6 - kn_bac_protein = 0.03 - f_don_Am_protein = 0.25 - f_doc_s = 0.4 - f_doc_l = 0.4 + kn_bac_protein = 0.2 + f_don_Am_protein = 1.0 + f_doc_s = 0.5 + f_doc_l = 0.5 f_exude_s = 1.0 f_exude_l = 1.0 k_bac_s = 0.03 @@ -429,36 +429,36 @@ op_dep_min = 0.1 fr_graze_s = 0.5 fr_graze_e = 0.5 - fr_mort2min = 0.5 - fr_dFe = 0.3 - k_nitrif = 0.0 + fr_mort2min = 0.9 + fr_dFe = 1.0 + k_nitrif = 0.046 t_iron_conv = 3065.0 max_loss = 0.9 max_dfe_doc1 = 0.2 - fr_resp_s = 0.75 - y_sk_DMS = 0.5 - t_sk_conv = 3.0 - t_sk_ox = 10.0 + fr_resp_s = 0.9 + y_sk_DMS = 0.7 + t_sk_conv = 5.0 + t_sk_ox = 12.0 algaltype_diatoms = 0.0 - algaltype_sp = 0.5 - algaltype_phaeo = 0.5 + algaltype_sp = 0.0 + algaltype_phaeo = 0.0 nitratetype = -1.0 - ammoniumtype = 1.0 + ammoniumtype = 0.0 silicatetype = -1.0 dmspptype = 0.5 - dmspdtype = -1.0 - humtype = 1.0 - doctype_s = 0.5 - doctype_l = 0.5 - dontype_protein = 0.5 - fedtype_1 = 0.5 + dmspdtype = 0.0 + humtype = 0.0 + doctype_s = 0.0 + doctype_l = 0.0 + dontype_protein = 0.0 + fedtype_1 = 0.0 feptype_1 = 0.5 - zaerotype_bc1 = 1.0 - zaerotype_bc2 = 1.0 - zaerotype_dust1 = 1.0 - zaerotype_dust2 = 1.0 - zaerotype_dust3 = 1.0 - zaerotype_dust4 = 1.0 + zaerotype_bc1 = -1.0 + zaerotype_bc2 = -1.0 + zaerotype_dust1 = -1.0 + zaerotype_dust2 = -1.0 + zaerotype_dust3 = -1.0 + zaerotype_dust4 = -1.0 ratio_C2N_diatoms = 7.0 ratio_C2N_sp = 7.0 ratio_C2N_phaeo = 7.0 @@ -468,7 +468,7 @@ F_abs_chl_diatoms = 2.0 F_abs_chl_sp = 4.0 F_abs_chl_phaeo = 5.0 - ratio_C2N_proteins = 7.0 + ratio_C2N_proteins = 5.0 / &icefields_nml diff --git a/configuration/scripts/options/set_nml.bgcz b/configuration/scripts/options/set_nml.bgcz index 46e4dee74..091ca6f6d 100644 --- a/configuration/scripts/options/set_nml.bgcz +++ b/configuration/scripts/options/set_nml.bgcz @@ -1,22 +1,19 @@ -nilyr = 7 -nslyr = 1 -ncat = 5 nblyr = 7 n_aero = 0 n_zaero = 3 n_algae = 3 n_doc = 2 -n_dic = 0 +n_dic = 1 n_don = 1 n_fed = 1 n_fep = 1 ice_ic = 'none' tr_brine = .true. +tr_aero = .false. tr_zaero = .true. z_tracers = .true. solve_zbgc = .true. scale_bgc = .true. -bgc_data_type = 'default' tr_bgc_Nit = .true. tr_bgc_C = .true. tr_bgc_Am = .true. @@ -29,3 +26,18 @@ tr_bgc_Fe = .true. # modal_aero = .true. # dEdd_algae = .true. tfrz_option = 'mushy' +# +nslyr = 5 +tr_snow = .true. +snwgrain = .true. +use_smliq_pnd = .true. +rsnw_fall = 54.526 +rsnw_tmax = 1500.0 +snw_aging_table = 'file' +snw_filename = 'ICE_MACHINE_INPUTDATA/CICE_data/forcing/snicar_drdt_bst_fit_60_c04262019.nc' +snw_tau_fname = 'snowEmpiricalGrowthParameterTau' +snw_kappa_fname = 'snowEmpiricalGrowthParameterKappa' +snw_drdt0_fname = 'snowPropertyRate' +snw_rhos_fname = 'nGrainAgingSnowDensity' +snw_Tgrd_fname = 'nGrainAgingTempGradient' +snw_T_fname = 'nGrainAgingTemperature' diff --git a/configuration/scripts/options/set_nml.bgczclim b/configuration/scripts/options/set_nml.bgczclim index feb900ede..8fa4abd36 100644 --- a/configuration/scripts/options/set_nml.bgczclim +++ b/configuration/scripts/options/set_nml.bgczclim @@ -1,25 +1,23 @@ -nilyr = 7 -nslyr = 1 -ncat = 5 +year_init = 2005 +istep0 = 0 +npt_unit = '1' +npt = 168 nblyr = 7 n_aero = 0 n_zaero = 3 n_algae = 3 n_doc = 2 -n_dic = 0 +n_dic = 1 n_don = 1 n_fed = 1 n_fep = 1 -year_init = 2005 -istep0 = 0 -npt = 168 ice_ic = 'none' tr_brine = .true. +tr_aero = .false. tr_zaero = .true. z_tracers = .true. solve_zbgc = .true. scale_bgc = .true. -bgc_data_type = 'clim' tr_bgc_Nit = .true. tr_bgc_C = .true. tr_bgc_Am = .true. @@ -29,6 +27,22 @@ tr_bgc_PON = .true. tr_bgc_hum = .true. tr_bgc_DON = .true. tr_bgc_Fe = .true. -tfrz_option = "mushy" - - +# modal_aero = .true. +# dEdd_algae = .true. +tfrz_option = 'mushy' +bgc_data_type = 'clim' +# +nslyr = 5 +tr_snow = .true. +snwgrain = .true. +use_smliq_pnd = .true. +rsnw_fall = 54.526 +rsnw_tmax = 1500.0 +snw_aging_table = 'file' +snw_filename = 'ICE_MACHINE_INPUTDATA/CICE_data/forcing/snicar_drdt_bst_fit_60_c04262019.nc' +snw_tau_fname = 'snowEmpiricalGrowthParameterTau' +snw_kappa_fname = 'snowEmpiricalGrowthParameterKappa' +snw_drdt0_fname = 'snowPropertyRate' +snw_rhos_fname = 'nGrainAgingSnowDensity' +snw_Tgrd_fname = 'nGrainAgingTempGradient' +snw_T_fname = 'nGrainAgingTemperature' diff --git a/configuration/scripts/options/set_nml.bgczm b/configuration/scripts/options/set_nml.bgczm index 53513ca87..fb963f06c 100644 --- a/configuration/scripts/options/set_nml.bgczm +++ b/configuration/scripts/options/set_nml.bgczm @@ -1,22 +1,19 @@ -nilyr = 7 -nslyr = 1 -ncat = 5 nblyr = 7 n_aero = 0 n_zaero = 3 n_algae = 3 n_doc = 2 -n_dic = 0 +n_dic = 1 n_don = 1 n_fed = 1 n_fep = 1 ice_ic = 'none' tr_brine = .true. +tr_aero = .false. tr_zaero = .true. z_tracers = .true. solve_zbgc = .true. scale_bgc = .true. -bgc_data_type = 'default' tr_bgc_Nit = .true. tr_bgc_C = .true. tr_bgc_Am = .true. @@ -29,3 +26,18 @@ tr_bgc_Fe = .true. modal_aero = .true. # dEdd_algae = .true. tfrz_option = 'mushy' +# +nslyr = 5 +tr_snow = .true. +snwgrain = .true. +use_smliq_pnd = .true. +rsnw_fall = 54.526 +rsnw_tmax = 1500.0 +snw_aging_table = 'file' +snw_filename = 'ICE_MACHINE_INPUTDATA/CICE_data/forcing/snicar_drdt_bst_fit_60_c04262019.nc' +snw_tau_fname = 'snowEmpiricalGrowthParameterTau' +snw_kappa_fname = 'snowEmpiricalGrowthParameterKappa' +snw_drdt0_fname = 'snowPropertyRate' +snw_rhos_fname = 'nGrainAgingSnowDensity' +snw_Tgrd_fname = 'nGrainAgingTempGradient' +snw_T_fname = 'nGrainAgingTemperature' diff --git a/configuration/scripts/options/set_nml.e3smbgc b/configuration/scripts/options/set_nml.e3smbgc index 1be753486..7b0520dab 100644 --- a/configuration/scripts/options/set_nml.e3smbgc +++ b/configuration/scripts/options/set_nml.e3smbgc @@ -50,7 +50,7 @@ f_don_Am_protein = 1.0 f_doc_s = 0.5 f_doc_l = 0.5 fr_mort2min = 0.9 -fr_dFe = 0.9 +fr_dFe = 1.0 k_nitrif = 0.046 fr_resp_s = 0.9 y_sk_DMS = 0.7 @@ -64,11 +64,11 @@ doctype_s = 0.0 doctype_l = 0.0 dontype_protein = 0.0 fedtype_1 = 0.0 -zaerotype_bc1 = 0.0 -zaerotype_bc2 = 0.0 -zaerotype_dust1 = 0.0 -zaerotype_dust2 = 0.0 -zaerotype_dust3 = 0.0 -zaerotype_dust4 = 0.0 +zaerotype_bc1 = -1.0 +zaerotype_bc2 = -1.0 +zaerotype_dust1 = -1.0 +zaerotype_dust2 = -1.0 +zaerotype_dust3 = -1.0 +zaerotype_dust4 = -1.0 ratio_C2N_proteins = 5.0 diff --git a/configuration/scripts/options/set_nml.zaero b/configuration/scripts/options/set_nml.zaero new file mode 100644 index 000000000..f35f2dce4 --- /dev/null +++ b/configuration/scripts/options/set_nml.zaero @@ -0,0 +1,7 @@ +nblyr = 7 +n_aero = 0 +n_zaero = 3 +tr_brine = .true. +tr_zaero = .true. +z_tracers = .true. + diff --git a/configuration/scripts/tests/base_suite.ts b/configuration/scripts/tests/base_suite.ts index 3f34da8a2..2ac855a24 100644 --- a/configuration/scripts/tests/base_suite.ts +++ b/configuration/scripts/tests/base_suite.ts @@ -54,13 +54,15 @@ restart gbox80 1x1 box2001 smoke gbox80 1x1 boxslotcyl smoke gbox12 1x1x12x12x1 boxchan,diag1,debug restart gx3 8x2 modal -smoke gx3 8x2 bgcz +smoke gx3 8x2 bgcz,diag1,run5day smoke gx3 8x2 jra55do -smoke gx3 8x2 bgczm,debug -smoke gx3 8x1 bgcskl,debug +smoke gx3 8x2 bgczm,diag1,debug +smoke gx3 12x2 zaero,diag1,debug +#smoke gx3 8x1 bgcskl,diag1,debug #smoke gx3 4x1 bgcz,thread smoke_gx3_8x2_bgcz -restart gx1 4x2 bgcsklclim,medium +#restart gx1 4x2 bgcsklclim,medium restart gx1 8x1 bgczclim,medium +restart gx3 16x1 zaero,icdefault,snwitdrdg,snwgrain smoke gx1 24x1 medium,run90day,yi2008 smoke gx1 24x1 medium,run90day,yi2008,jra55do smoke gx3 8x1 medium,run90day,yi2008 diff --git a/configuration/scripts/tests/io_suite.ts b/configuration/scripts/tests/io_suite.ts index e5e7feee6..0f8bedc1a 100644 --- a/configuration/scripts/tests/io_suite.ts +++ b/configuration/scripts/tests/io_suite.ts @@ -9,8 +9,9 @@ restart gx3 8x4 gx3ncarbulk,alt04,histall,iobinary,precision8 restart gx3 4x4 gx3ncarbulk,alt05,histall,iobinary restart gx3 14x2 gx3ncarbulk,alt06,histall,iobinary,precision8 restart gx3 14x2 gx3ncarbulk,alt07,histall,iobinary,precision8 -restart gx3 32x1 gx3ncarbulk,bgcz,histall,iobinary,precision8 -restart gx3 16x2 gx3ncarbulk,bgcskl,histall,iobinary +#restart gx3 32x1 gx3ncarbulk,bgcz,histall,iobinary,precision8 +#restart gx3 16x2 gx3ncarbulk,bgczm,histall,iobinary +restart gx3 16x2 gx3ncarbulk,zaero,histall,iobinary restart gx3 14x2 gx3ncarbulk,isotope,histall,iobinary,precision8 restart gx3 16x2 gx3ncarbulk,fsd12,histall,iobinary restart gx3 8x4 gx3ncarbulk,debug,histall,iobinary,precision8,histinst @@ -24,7 +25,7 @@ restart gx3 8x4 alt05,histall,ionetcdf,iocdf2 restart gx3 16x2 alt06,histall,ionetcdf,iocdf5,precision8 restart gx3 16x2 alt07,histall,ionetcdf,iohdf5,precision8 restart gx3 30x1 bgczm,histall,ionetcdf,iocdf1 -restart gx3 15x2 bgcskl,histall,ionetcdf,iocdf2,precision8 +restart gx3 15x2 bgcz,histall,ionetcdf,iocdf2,precision8 restart gx3 31x1 isotope,histall,ionetcdf,iocdf5,precision8 restart gx3 14x2 fsd12,histall,ionetcdf,iohdf5 restart gx3 32x1 debug,histall,ionetcdf,iohdf5,histinst @@ -39,7 +40,7 @@ restart gx3 8x4 alt05,histall,iopio1,iopnetcdf5,precision8 restart gx3 32x1 alt06,histall,iopio1,iocdf1 restart gx3 32x1 alt07,histall,iopio1,iocdf2,precision8 restart gx3 16x2 bgczm,histall,iopio1,iocdf5,precision8 -restart gx3 30x1 bgcskl,histall,iopio1,iohdf5,precision8 +restart gx3 30x1 bgcz,histall,iopio1,iohdf5,precision8 restart gx3 8x4 isotope,histall,iopio1,iopnetcdf1 restart gx3 12x2 fsd12,histall,iopio1,iopnetcdf2 restart gx3 16x2 debug,histall,iopio1,iopnetcdf5,histinst @@ -54,7 +55,7 @@ restart gx3 8x4 alt05,histall,iopio2,iocdf5 restart gx3 16x2 alt06,histall,iopio2,iohdf5,iohdf5opts restart gx3 16x2 alt07,histall,iopio2,iopnetcdf1 restart gx3 16x2 bgczm,histall,iopio2,iopnetcdf2 -restart gx3 30x1 bgcskl,histall,iopio2,iopnetcdf5 +restart gx3 30x1 bgcz,histall,iopio2,iopnetcdf5 restart gx3 8x4 isotope,histall,iopio2,iohdf5,precision8 restart gx3 12x2 fsd12,histall,iopio2,iocdf1,precision8 restart gx3 16x2 debug,histall,iopio2,iocdf2,histinst,precision8 diff --git a/configuration/scripts/tests/nothread_suite.ts b/configuration/scripts/tests/nothread_suite.ts index a262ec135..17bb80885 100644 --- a/configuration/scripts/tests/nothread_suite.ts +++ b/configuration/scripts/tests/nothread_suite.ts @@ -55,7 +55,8 @@ restart gx3 12x1 short smoke gx3 16x1 bgcz smoke gx3 16x1 bgczm,debug -smoke gx3 24x1 bgcskl,debug +smoke gx3 16x1 zaero,debug +#smoke gx3 24x1 bgcskl,debug #tcraig, hangs nodes intermittently on izumi #restart gx1 128x1 bgcsklclim,medium #restart gx1 256x1 bgczclim,medium diff --git a/doc/source/user_guide/ug_case_settings.rst b/doc/source/user_guide/ug_case_settings.rst index a2740932c..21726f295 100644 --- a/doc/source/user_guide/ug_case_settings.rst +++ b/doc/source/user_guide/ug_case_settings.rst @@ -757,57 +757,57 @@ zbgc_nml "", "", "", "" "``algaltype_diatoms``", "real", "mobility type between stationary and mobile algal diatoms", "0.0" - "``algaltype_phaeo``", "real", "mobility type between stationary and mobile algal phaeocystis", "0.5" - "``algaltype_sp``", "real", "mobility type between stationary and mobile small plankton", "0.5" - "``algal_vel``", "real", ":cite:`Lavoie05`", "1.11e-8" - "``alpha2max_low_diatoms``", "real", "light limitation diatoms 1/(W/m^2)", "0.8" - "``alpha2max_low_phaeo``", "real", "light limitation phaeocystis 1/(W/m^2)", "0.67" - "``alpha2max_low_sp``", "real", "light limitation small plankton 1/(W/m^2)", "0.67" - "``ammoniumtype``", "real", "mobility type between stationary and mobile ammonium", "1.0" - "``beta2max_diatoms``", "real", "light inhibition diatoms 1/(W/m^2)", "0.18" - "``beta2max_phaeo``", "real", "light inhibition phaeocystis 1/(W/m^2)", "0.01" - "``beta2max_sp``", "real", "light inhibition small plankton 1/(W/m^2)", "0.0025" + "``algaltype_phaeo``", "real", "mobility type between stationary and mobile algal phaeocystis", "0.0" + "``algaltype_sp``", "real", "mobility type between stationary and mobile small plankton", "0.0" + "``algal_vel``", "real", ":cite:`Lavoie05`", "1.0e-7" + "``alpha2max_low_diatoms``", "real", "light limitation diatoms 1/(W/m^2)", "0.3" + "``alpha2max_low_phaeo``", "real", "light limitation phaeocystis 1/(W/m^2)", "0.17" + "``alpha2max_low_sp``", "real", "light limitation small plankton 1/(W/m^2)", "0.2" + "``ammoniumtype``", "real", "mobility type between stationary and mobile ammonium", "0.0" + "``beta2max_diatoms``", "real", "light inhibition diatoms 1/(W/m^2)", "0.001" + "``beta2max_phaeo``", "real", "light inhibition phaeocystis 1/(W/m^2)", "0.04" + "``beta2max_sp``", "real", "light inhibition small plankton 1/(W/m^2)", "0.001" "``bgc_flux_type``", "``constant``", "constant ice–ocean flux velocity", "``Jin2006``" "", "``Jin2006``", "ice–ocean flux velocity of :cite:`Jin06`", "" "``chlabs_diatoms``", "real", "chl absorbtion diatoms 1/m/(mg/m^3)", "0.03" "``chlabs_phaeo``", "real", "chl absorbtion phaeocystis 1/m/(mg/m^3)", "0.05" "``chlabs_sp``", "real", "chl absorbtion small plankton 1/m/(mg/m^3)", "0.01" "``dEdd_algae``", "logical", "", "``.false.``" - "``dmspdtype``", "real", "mobility type between stationary and mobile dmspd", "-1.0" + "``dmspdtype``", "real", "mobility type between stationary and mobile dmspd", "0.0" "``dmspptype``", "real", "mobility type between stationary and mobile dmspp", "0.5" - "``doctype_l``", "real", "mobility type between stationary and mobile doc lipids", "0.5" - "``doctype_s``", "real", "mobility type between stationary and mobile doc saccharids", "0.5" - "``dontype_protein``", "real", "mobility type between stationary and mobile don proteins", "0.5" + "``doctype_l``", "real", "mobility type between stationary and mobile doc lipids", "0.0" + "``doctype_s``", "real", "mobility type between stationary and mobile doc saccharids", "0.0" + "``dontype_protein``", "real", "mobility type between stationary and mobile don proteins", "0.0" "``dustFe_sol``", "real", "solubility fraction", "0.005" - "``fedtype_1``", "real", "mobility type between stationary and mobile fed lipids", "0.5" + "``fedtype_1``", "real", "mobility type between stationary and mobile fed lipids", "0.0" "``feptype_1``", "real", "mobility type between stationary and mobile fep lipids", "0.5" - "``frazil_scav``", "real", "increase in initial bio bracer from ocean scavenging", "1.0" - "``fr_dFe``", "real", "fraction of remineralized nitrogen in units of algal iron", "0.3" - "``fr_graze_diatoms``", "real", "fraction grazed diatoms", "0.01" + "``frazil_scav``", "real", "increase in initial bio bracer from ocean scavenging", "0.8" + "``fr_dFe``", "real", "fraction of remineralized nitrogen in units of algal iron", "1.0" + "``fr_graze_diatoms``", "real", "fraction grazed diatoms", "0.19" "``fr_graze_e``", "real", "fraction of assimilation excreted", "0.5" - "``fr_graze_phaeo``", "real", "fraction grazed phaeocystis", "0.1" + "``fr_graze_phaeo``", "real", "fraction grazed phaeocystis", "0.19" "``fr_graze_s``", "real", "fraction of grazing spilled or slopped", "0.5" - "``fr_graze_sp``", "real", "fraction grazed small plankton", "0.1" - "``fr_mort2min``", "real", "fractionation of mortality to Am", "0.5" + "``fr_graze_sp``", "real", "fraction grazed small plankton", "0.19" + "``fr_mort2min``", "real", "fractionation of mortality to Am", "0.9" "``fr_resp``", "real", "frac of algal growth lost due to respiration", "0.05" - "``fr_resp_s``", "real", "DMSPd fraction of respiration loss as DMSPd", "0.75" + "``fr_resp_s``", "real", "DMSPd fraction of respiration loss as DMSPd", "0.9" "``fsal``", "real", "salinity limitation ppt", "1.0" "``F_abs_chl_diatoms``", "real", "scales absorbed radiation for dEdd chl diatoms", "2.0" "``F_abs_chl_phaeo``", "real", "scales absorbed radiation for dEdd chl phaeocystis", "5.0" "``F_abs_chl_sp``", "real", "scales absorbed radiation for dEdd small plankton", "4.0" - "``f_doc_l``", "real", "fraction of mortality to DOC lipids", "0.4" - "``f_doc_s``", "real", "fraction of mortality to DOC saccharides", "0.4" - "``f_don_Am_protein``", "real", "fraction of remineralized DON to ammonium", "0.25" + "``f_doc_l``", "real", "fraction of mortality to DOC lipids", "0.5" + "``f_doc_s``", "real", "fraction of mortality to DOC saccharides", "0.5" + "``f_don_Am_protein``", "real", "fraction of remineralized DON to ammonium", "1.0" "``f_don_protein``", "real", "fraction of spilled grazing to proteins", "0.6" "``f_exude_l``", "real", "fraction of exudation to DOC lipids", "1.0" "``f_exude_s``", "real", "fraction of exudation to DOC saccharids", "1.0" - "``grid_o``", "real", "z biology for bottom flux", "5.0" - "``grid_o_t``", "real", "z biology for top flux", "5.0" + "``grid_o``", "real", "z biology for bottom flux", "0.006" + "``grid_o_t``", "real", "z biology for top flux", "0.006" "``grid_oS``", "real", "zsalinity DEPRECATED", "" - "``grow_Tdep_diatoms``", "real", "temperature dependence growth diatoms per degC", "0.06" - "``grow_Tdep_phaeo``", "real", "temperature dependence growth phaeocystis per degC", "0.06" - "``grow_Tdep_sp``", "real", "temperature dependence growth small plankton per degC", "0.06" - "``humtype``", "real", "mobility type between stationary and mobile hum", "1.0" + "``grow_Tdep_diatoms``", "real", "temperature dependence growth diatoms per degC", "0.063" + "``grow_Tdep_phaeo``", "real", "temperature dependence growth phaeocystis per degC", "0.063" + "``grow_Tdep_sp``", "real", "temperature dependence growth small plankton per degC", "0.063" + "``humtype``", "real", "mobility type between stationary and mobile hum", "0.0" "``initbio_frac``", "real", "fraction of ocean trcr concentration in bio tracers", "1.0" "``K_Am_diatoms``", "real", "ammonium half saturation diatoms mmol/m^3", "0.3" "``K_Am_phaeo``", "real", "ammonium half saturation phaeocystis mmol/m^3", "0.3" @@ -820,15 +820,15 @@ zbgc_nml "``K_Fe_diatoms``", "real", "iron half saturation diatoms nM", "1.0" "``K_Fe_phaeo``", "real", "iron half saturation phaeocystis nM", "0.1" "``K_Fe_sp``", "real", "iron half saturation small plankton nM", "0.2" - "``k_nitrif``", "real", "nitrification rate per day", "0.0" + "``k_nitrif``", "real", "nitrification rate per day", "0.046" "``K_Nit_diatoms``", "real", "nitrate half saturation diatoms mmol/m^3", "1.0" "``K_Nit_phaeo``", "real", "nitrate half saturation phaeocystis mmol/m^3", "1.0" "``K_Nit_sp``", "real", "nitrate half saturation small plankton mmol/m^3", "1.0" "``K_Sil_diatoms``", "real", "silicate half saturation diatoms mmol/m^3", "4.0" "``K_Sil_phaeo``", "real", "silicate half saturation phaeocystis mmol/m^3", "0.0" "``K_Sil_sp``", "real", "silicate half saturation small plankton mmol/m^3", "0.0" - "``kn_bac_protein``", "real", "bacterial degradation of DON per day", "0.03" - "``l_sk``", "real", "characteristic diffusive scale in m", "7.0" + "``kn_bac_protein``", "real", "bacterial degradation of DON per day", "0.2" + "``l_sk``", "real", "characteristic diffusive scale in m", "2.0" "``l_skS``", "real", "zsalinity DEPRECATED", "" "``max_dfe_doc1``", "real", "max ratio of dFe to saccharides in the ice in nm Fe / muM C", "0.2" "``max_loss``", "real", "restrict uptake to percent of remaining value", "0.9" @@ -839,27 +839,27 @@ zbgc_nml "``mort_Tdep_diatoms``", "real", "temperature dependence of mortality diatoms per degC", "0.03" "``mort_Tdep_phaeo``", "real", "temperature dependence of mortality phaeocystis per degC", "0.03" "``mort_Tdep_sp``", "real", "temperature dependence of mortality small plankton per degC", "0.03" - "``mu_max_diatoms``", "real", "maximum growth rate diatoms per day", "1.2" - "``mu_max_phaeo``", "real", "maximum growth rate phaeocystis per day", "0.851" - "``mu_max_sp``", "real", "maximum growth rate small plankton per day", "0.851" + "``mu_max_diatoms``", "real", "maximum growth rate diatoms per day", "1.44" + "``mu_max_phaeo``", "real", "maximum growth rate phaeocystis per day", "0.63" + "``mu_max_sp``", "real", "maximum growth rate small plankton per day", "0.41" "``nitratetype``", "real", "mobility type between stationary and mobile nitrate", "-1.0" "``op_dep_min``", "real", "light attenuates for optical depths exceeding min", "0.1" - "``phi_snow``", "real", "snow porosity for brine height tracer", "0.5" + "``phi_snow``", "real", "snow porosity for brine height tracer", "-1.0" "``ratio_chl2N_diatoms``", "real", "algal chl to N in mg/mmol diatoms", "2.1" "``ratio_chl2N_phaeo``", "real", "algal chl to N in mg/mmol phaeocystis", "0.84" "``ratio_chl2N_sp``", "real", "algal chl to N in mg/mmol small plankton", "1.1" "``ratio_C2N_diatoms``", "real", "algal C to N in mol/mol diatoms", "7.0" "``ratio_C2N_phaeo``", "real", "algal C to N in mol/mol phaeocystis", "7.0" - "``ratio_C2N_proteins``", "real", "algal C to N in mol/mol proteins", "7.0" + "``ratio_C2N_proteins``", "real", "algal C to N in mol/mol proteins", "5.0" "``ratio_C2N_sp``", "real", "algal C to N in mol/mol small plankton", "7.0" "``ratio_Fe2C_diatoms``", "real", "algal Fe to C in umol/mol diatoms", "0.0033" - "``ratio_Fe2C_phaeo``", "real", "algal Fe to C in umol/mol phaeocystis", "1.0" + "``ratio_Fe2C_phaeo``", "real", "algal Fe to C in umol/mol phaeocystis", "0.1" "``ratio_Fe2C_sp``", "real", "algal Fe to C in umol/mol small plankton", "0.0033" - "``ratio_Fe2N_diatoms``", "real", "algal Fe to N in umol/mol diatoms", "0.23" + "``ratio_Fe2N_diatoms``", "real", "algal Fe to N in umol/mol diatoms", "0.023" "``ratio_Fe2N_phaeo``", "real", "algal Fe to N in umol/mol phaeocystis", "0.7" - "``ratio_Fe2N_sp``", "real", "algal Fe to N in umol/mol small plankton", "0.23" - "``ratio_Fe2DOC_s``", "real", "Fe to C of DON saccharids nmol/umol", "1.0" + "``ratio_Fe2N_sp``", "real", "algal Fe to N in umol/mol small plankton", "0.023" "``ratio_Fe2DOC_l``", "real", "Fe to C of DOC lipids nmol/umol", "0.033" + "``ratio_Fe2DOC_s``", "real", "Fe to C of DON saccharids nmol/umol", "1.0" "``ratio_Fe2DON``", "real", "Fe to C of DON nmol/umol", "0.023" "``ratio_Si2N_diatoms``", "real", "algal Si to N in mol/mol diatoms", "1.8" "``ratio_Si2N_phaeo``", "real", "algal Si to N in mol/mol phaeocystis", "0.0" @@ -874,11 +874,11 @@ zbgc_nml "``R_dFe2dust``", "real", "g/g :cite:`Tagliabue09`", "0.035" "``scale_bgc``", "logical", "", "``.false.``" "``silicatetype``", "real", "mobility type between stationary and mobile silicate", "-1.0" - "``skl_bgc``", "logical", "biogeochemistry", "``.false.``" + "``skl_bgc``", "logical", "skeletal biogeochemistry DEPRECATED", "``.false.``" "``solve_zbgc``", "logical", "", "``.false.``" "``solve_zsal``", "logical", "zsalinity DEPRECATED, update salinity tracer profile", "``.false.``" - "``tau_max``", "real", "long time mobile to stationary exchanges", "1.73e-5" - "``tau_min``", "real", "rapid module to stationary exchanges", "5200." + "``tau_max``", "real", "long time mobile to stationary exchanges", "604800." + "``tau_min``", "real", "rapid module to stationary exchanges", "3600." "``tr_bgc_Am``", "logical", "ammonium tracer", "``.false.``" "``tr_bgc_C``", "logical", "algal carbon tracer", "``.false.``" "``tr_bgc_chl``", "logical", "algal chlorophyll tracer", "``.false.``" @@ -892,16 +892,16 @@ zbgc_nml "``tr_brine``", "logical", "brine height tracer", "``.false.``" "``tr_zaero``", "logical", "vertical aerosol tracers", "``.false.``" "``t_iron_conv``", "real", "desorption loss pFe to dFe in days", "3065." - "``t_sk_conv``", "real", "Stefels conversion time in days", "3.0" - "``t_sk_ox``", "real", "DMS oxidation time in days", "10.0" + "``t_sk_conv``", "real", "Stefels conversion time in days", "5.0" + "``t_sk_ox``", "real", "DMS oxidation time in days", "12.0" "``T_max``", "real", "maximum temperature degC", "0.0" - "``y_sk_DMS``", "real", "fraction conversion given high yield", "0.5" - "``zaerotype_bc1``", "real", "mobility type between stationary and mobile zaero bc1", "1.0" - "``zaerotype_bc2``", "real", "mobility type between stationary and mobile zaero bc2", "1.0" - "``zaerotype_dust1``", "real", "mobility type between stationary and mobile zaero dust1", "1.0" - "``zaerotype_dust2``", "real", "mobility type between stationary and mobile zaero dust2", "1.0" - "``zaerotype_dust3``", "real", "mobility type between stationary and mobile zaero dust3", "1.0" - "``zaerotype_dust4``", "real", "mobility type between stationary and mobile zaero dust4", "1.0" + "``y_sk_DMS``", "real", "fraction conversion given high yield", "0.7" + "``zaerotype_bc1``", "real", "mobility type between stationary and mobile zaero bc1", "-1.0" + "``zaerotype_bc2``", "real", "mobility type between stationary and mobile zaero bc2", "-1.0" + "``zaerotype_dust1``", "real", "mobility type between stationary and mobile zaero dust1", "-1.0" + "``zaerotype_dust2``", "real", "mobility type between stationary and mobile zaero dust2", "-1.0" + "``zaerotype_dust3``", "real", "mobility type between stationary and mobile zaero dust3", "-1.0" + "``zaerotype_dust4``", "real", "mobility type between stationary and mobile zaero dust4", "-1.0" "``z_tracers``", "logical", "", "``.false.``" "", "", "", "" diff --git a/icepack b/icepack index 4c8709525..05ac0ec3e 160000 --- a/icepack +++ b/icepack @@ -1 +1 @@ -Subproject commit 4c87095256c1c599c3ccaa857a95744158751a60 +Subproject commit 05ac0ec3ea666080eed36e67f6cf8ce1255b243f