diff --git a/cicecore/cicedyn/analysis/ice_history_shared.F90 b/cicecore/cicedyn/analysis/ice_history_shared.F90 index 97e0e563f..d6fa78542 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 8249e3068..cc85d8ab6 100644 --- a/cicecore/cicedyn/dynamics/ice_dyn_eap.F90 +++ b/cicecore/cicedyn/dynamics/ice_dyn_eap.F90 @@ -353,7 +353,8 @@ subroutine eap (dt) do ij = 1, icellT(iblk) i = indxTi(ij, iblk) j = indxTj(ij, iblk) - call icepack_ice_strength(aice = aice (i,j, iblk), & + call icepack_ice_strength(ncat=ncat, & + 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 c858de1c8..68101f579 100644 --- a/cicecore/cicedyn/dynamics/ice_dyn_evp.F90 +++ b/cicecore/cicedyn/dynamics/ice_dyn_evp.F90 @@ -537,7 +537,8 @@ subroutine evp (dt) do ij = 1, icellT(iblk) i = indxTi(ij, iblk) j = indxTj(ij, iblk) - call icepack_ice_strength(aice = aice (i,j, iblk), & + call icepack_ice_strength(ncat = ncat, & + aice = aice (i,j, iblk), & vice = vice (i,j, iblk), & aice0 = aice0 (i,j, iblk), & aicen = aicen (i,j,:,iblk), & @@ -594,7 +595,8 @@ subroutine evp (dt) do ij = 1, icellT(iblk) i = indxTi(ij, iblk) j = indxTj(ij, iblk) - call icepack_ice_strength(aice = aice (i,j, iblk), & + call icepack_ice_strength(ncat = ncat, & + 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 22a53bc59..0d04bf974 100644 --- a/cicecore/cicedyn/dynamics/ice_dyn_vp.F90 +++ b/cicecore/cicedyn/dynamics/ice_dyn_vp.F90 @@ -386,12 +386,13 @@ subroutine implicit_solver (dt) do ij = 1, icellT(iblk) i = indxTi(ij, iblk) j = indxTj(ij, 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)) + 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)) enddo ! ij enddo ! iblk diff --git a/cicecore/cicedyn/dynamics/ice_transport_driver.F90 b/cicecore/cicedyn/dynamics/ice_transport_driver.F90 index 7d19a7974..fca964593 100644 --- a/cicecore/cicedyn/dynamics/ice_transport_driver.F90 +++ b/cicecore/cicedyn/dynamics/ice_transport_driver.F90 @@ -1739,7 +1739,8 @@ subroutine work_to_state (nx_block, ny_block, & i = indxi(ij) j = indxj(ij) - call icepack_compute_tracers(trcr_depend = trcr_depend(:), & + call icepack_compute_tracers(ntrcr = ntrcr, & + 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 26aef9f9c..241bf8b5d 100755 --- a/cicecore/cicedyn/general/ice_forcing.F90 +++ b/cicecore/cicedyn/general/ice_forcing.F90 @@ -5396,10 +5396,9 @@ 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 = nfreq, & - wave_spectrum_profile = wave_spectrum_profile, & - wavefreq = wavefreq, & - dwavefreq = dwavefreq) + call icepack_init_wave(nfreq, & + wave_spectrum_profile, & + wavefreq, dwavefreq) ! read more realistic data from a file if ((trim(wave_spec_type) == 'constant').OR.(trim(wave_spec_type) == 'random')) then @@ -5482,10 +5481,10 @@ subroutine wave_spec_data if (icepack_warnings_aborted()) call abort_ice(error_message=subname, & file=__FILE__, line=__LINE__) - call icepack_init_wave(nfreq = nfreq, & - wave_spectrum_profile = wave_spectrum_profile, & - wavefreq = wavefreq, & - dwavefreq = dwavefreq) + call icepack_init_wave(nfreq, & + wave_spectrum_profile, & + wavefreq, 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 e966043fb..0796efd2d 100644 --- a/cicecore/cicedyn/general/ice_init.F90 +++ b/cicecore/cicedyn/general/ice_init.F90 @@ -3024,7 +3024,8 @@ subroutine init_state enddo if (tmask(i,j,iblk)) & - call icepack_aggregate(aicen = aicen(i,j,:,iblk), & + call icepack_aggregate(ncat = ncat, & + aicen = aicen(i,j,:,iblk), & trcrn = trcrn(i,j,:,:,iblk), & vicen = vicen(i,j,:,iblk), & vsnon = vsnon(i,j,:,iblk), & @@ -3033,6 +3034,7 @@ 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(:), & @@ -3511,6 +3513,7 @@ 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 56805b625..2726a6101 100644 --- a/cicecore/cicedyn/general/ice_step_mod.F90 +++ b/cicecore/cicedyn/general/ice_step_mod.F90 @@ -389,7 +389,8 @@ subroutine step_therm1 (dt, iblk) if (tmask(i,j,iblk)) then - call icepack_step_therm1(dt=dt, & + call icepack_step_therm1(dt=dt, ncat=ncat, & + nilyr=nilyr, nslyr=nslyr, & aicen_init = aicen_init (i,j,:,iblk), & vicen_init = vicen_init (i,j,:,iblk), & vsnon_init = vsnon_init (i,j,:,iblk), & @@ -678,7 +679,8 @@ 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, & + call icepack_step_therm2(dt=dt, ncat=ncat, & + nltrcr=nltrcr, nilyr=nilyr, nslyr=nslyr, nblyr=nblyr, & hin_max = hin_max (:), & aicen = aicen (i,j,:,iblk), & vicen = vicen (i,j,:,iblk), & @@ -706,6 +708,9 @@ 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), & @@ -717,6 +722,7 @@ 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(:), & @@ -805,7 +811,8 @@ subroutine update_state (dt, daidt, dvidt, dvsdt, dagedt, offset) !----------------------------------------------------------------- ! if (tmask(i,j,iblk)) & - call icepack_aggregate(aicen = aicen(i,j,:,iblk), & + call icepack_aggregate(ncat = ncat, & + aicen = aicen(i,j,:,iblk), & trcrn = trcrn(i,j,:,:,iblk), & vicen = vicen(i,j,:,iblk), & vsnon = vsnon(i,j,:,iblk), & @@ -814,6 +821,7 @@ 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(:), & @@ -906,18 +914,16 @@ 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 = 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)) + 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)) end do ! i end do ! j end do ! iblk @@ -1094,12 +1100,13 @@ subroutine step_dyn_ridge (dt, ndtd, iblk) if (tmask(i,j,iblk)) then - 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 (:,:),& + 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 (:,:), & trcrn = trcrn (i,j,:,:,iblk), & rdg_conv = rdg_conv (i,j, iblk), & rdg_shear = rdg_shear(i,j, iblk), & @@ -1216,26 +1223,27 @@ subroutine step_snow (dt, iblk) do j = jlo, jhi do i = ilo, ihi - 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)) + 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)) enddo enddo @@ -1375,6 +1383,7 @@ 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), & @@ -1607,7 +1616,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, Tf, fsnow, meltsn + sst, sss, 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, & @@ -1668,7 +1677,10 @@ subroutine biogeochemistry (dt, iblk) do j = jlo, jhi do i = ilo, ihi - call icepack_load_ocean_bio_array( & + 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, & 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), & @@ -1687,7 +1699,10 @@ subroutine biogeochemistry (dt, iblk) enddo ! mm endif - call icepack_biogeochemistry(dt=dt, & + 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, & upNO = upNO (i,j, iblk), & upNH = upNH (i,j, iblk), & iDi = iDi (i,j,:,:, iblk), & @@ -1710,13 +1725,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), & @@ -1729,7 +1744,8 @@ 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)) + vsnon_init = vsnon_init (i,j,:, iblk), & + skl_bgc = skl_bgc) enddo ! i enddo ! j diff --git a/cicecore/cicedyn/infrastructure/ice_restart_driver.F90 b/cicecore/cicedyn/infrastructure/ice_restart_driver.F90 index dd9d77807..bde40dd14 100644 --- a/cicecore/cicedyn/infrastructure/ice_restart_driver.F90 +++ b/cicecore/cicedyn/infrastructure/ice_restart_driver.F90 @@ -686,7 +686,8 @@ subroutine restartfile (ice_ic) do j = 1, ny_block do i = 1, nx_block if (tmask(i,j,iblk)) & - call icepack_aggregate(aicen = aicen(i,j,:,iblk), & + call icepack_aggregate(ncat = ncat, & + aicen = aicen(i,j,:,iblk), & trcrn = trcrn(i,j,:,:,iblk), & vicen = vicen(i,j,:,iblk), & vsnon = vsnon(i,j,:,iblk), & @@ -695,6 +696,7 @@ 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, & @@ -1053,7 +1055,8 @@ subroutine restartfile_v4 (ice_ic) do j = 1, ny_block do i = 1, nx_block if (tmask(i,j,iblk)) & - call icepack_aggregate(aicen = aicen(i,j,:,iblk), & + call icepack_aggregate(ncat = ncat, & + aicen = aicen(i,j,:,iblk), & trcrn = trcrn(i,j,:,:,iblk), & vicen = vicen(i,j,:,iblk), & vsnon = vsnon(i,j,:,iblk), & @@ -1062,6 +1065,7 @@ 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 b7f1b3971..27328d9dd 100644 --- a/cicecore/cicedyn/infrastructure/ice_restoring.F90 +++ b/cicecore/cicedyn/infrastructure/ice_restoring.F90 @@ -521,6 +521,7 @@ 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/cicedyn/infrastructure/io/io_pio2/ice_restart.F90 b/cicecore/cicedyn/infrastructure/io/io_pio2/ice_restart.F90 index 2d98716b2..b487c243d 100644 --- a/cicecore/cicedyn/infrastructure/io/io_pio2/ice_restart.F90 +++ b/cicecore/cicedyn/infrastructure/io/io_pio2/ice_restart.F90 @@ -741,8 +741,6 @@ subroutine read_restart_field(nu,nrec,work,atype,vname,ndim3,diag, & call ice_pio_check(pio_inq_varndims(File, vardesc, ndims), & subname// " ERROR: missing varndims "//trim(vname),file=__FILE__,line=__LINE__) - call pio_seterrorhandling(File, PIO_INTERNAL_ERROR) - if (ndim3 == ncat .and. ndims == 3) then call pio_read_darray(File, vardesc, iodesc3d_ncat, work, status) #ifdef CESMCOUPLED @@ -770,6 +768,8 @@ subroutine read_restart_field(nu,nrec,work,atype,vname,ndim3,diag, & call ice_pio_check(status, & subname//" ERROR: reading var "//trim(vname),file=__FILE__,line=__LINE__) + call pio_seterrorhandling(File, PIO_INTERNAL_ERROR) + if (diag) then if (ndim3 > 1) then do n=1,ndim3 diff --git a/cicecore/drivers/direct/hadgem3/CICE_InitMod.F90 b/cicecore/drivers/direct/hadgem3/CICE_InitMod.F90 index c64bd463c..3f87f2ca8 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(hin_max=hin_max) ! ice thickness distribution + call icepack_init_itd(ncat=ncat, hin_max=hin_max) ! ice thickness distribution if (my_task == master_task) then - call icepack_init_itd_hist(hin_max=hin_max, c_hi_range=c_hi_range) ! output + call icepack_init_itd_hist(ncat=ncat, hin_max=hin_max, c_hi_range=c_hi_range) ! output endif call icepack_query_tracer_flags(tr_fsd_out=tr_fsd) @@ -143,12 +143,13 @@ subroutine cice_init if (icepack_warnings_aborted()) call abort_ice(trim(subname), & file=__FILE__,line= __LINE__) - 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 + 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 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__) @@ -411,7 +412,8 @@ subroutine init_restart do j = 1, ny_block do i = 1, nx_block if (tmask(i,j,iblk)) then - call icepack_aggregate(aicen = aicen(i,j,:,iblk), & + call icepack_aggregate(ncat = ncat, & + aicen = aicen(i,j,:,iblk), & trcrn = trcrn(i,j,:,:,iblk), & vicen = vicen(i,j,:,iblk), & vsnon = vsnon(i,j,:,iblk), & @@ -420,6 +422,7 @@ 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 47b158842..7e2308f20 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(hin_max=hin_max) ! ice thickness distribution + call icepack_init_itd(ncat=ncat, hin_max=hin_max) ! ice thickness distribution if (my_task == master_task) then - call icepack_init_itd_hist(hin_max=hin_max, c_hi_range=c_hi_range) ! output + call icepack_init_itd_hist(ncat=ncat, hin_max=hin_max, c_hi_range=c_hi_range) ! output endif call icepack_query_tracer_flags(tr_fsd_out=tr_fsd) @@ -143,12 +143,13 @@ subroutine cice_init if (icepack_warnings_aborted()) call abort_ice(trim(subname), & file=__FILE__,line= __LINE__) - 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 + 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 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__) @@ -411,7 +412,8 @@ subroutine init_restart do j = 1, ny_block do i = 1, nx_block if (tmask(i,j,iblk)) then - call icepack_aggregate(aicen = aicen(i,j,:,iblk), & + call icepack_aggregate(ncat = ncat, & + aicen = aicen(i,j,:,iblk), & trcrn = trcrn(i,j,:,:,iblk), & vicen = vicen(i,j,:,iblk), & vsnon = vsnon(i,j,:,iblk), & @@ -420,6 +422,7 @@ 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 b9ab6a39d..419dbacc9 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(hin_max=hin_max) ! ice thickness distribution + call icepack_init_itd(ncat=ncat, hin_max=hin_max) ! ice thickness distribution if (my_task == master_task) then - call icepack_init_itd_hist(hin_max=hin_max, c_hi_range=c_hi_range) ! output + call icepack_init_itd_hist(ncat=ncat, hin_max=hin_max, c_hi_range=c_hi_range) ! output endif call icepack_query_tracer_flags(tr_fsd_out=tr_fsd) @@ -157,12 +157,13 @@ 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 ( & - 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 + 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 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__) @@ -477,7 +478,8 @@ subroutine init_restart do j = 1, ny_block do i = 1, nx_block if (tmask(i,j,iblk)) then - call icepack_aggregate(aicen = aicen(i,j,:,iblk), & + call icepack_aggregate(ncat = ncat, & + aicen = aicen(i,j,:,iblk), & trcrn = trcrn(i,j,:,:,iblk), & vicen = vicen(i,j,:,iblk), & vsnon = vsnon(i,j,:,iblk), & @@ -486,6 +488,7 @@ 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 ac2268824..b235ebf0e 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(hin_max=hin_max) ! ice thickness distribution + call icepack_init_itd(ncat=ncat, hin_max=hin_max) ! ice thickness distribution if (my_task == master_task) then - call icepack_init_itd_hist(hin_max=hin_max, c_hi_range=c_hi_range) ! output + call icepack_init_itd_hist(ncat=ncat, hin_max=hin_max, c_hi_range=c_hi_range) ! output endif call icepack_query_tracer_flags(tr_fsd_out=tr_fsd) @@ -128,12 +128,13 @@ subroutine cice_init2() if (icepack_warnings_aborted()) call abort_ice(trim(subname), & file=__FILE__,line= __LINE__) - 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 + 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 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__) @@ -431,7 +432,7 @@ subroutine init_restart() do j = 1, ny_block do i = 1, nx_block if (tmask(i,j,iblk)) then - call icepack_aggregate( & + call icepack_aggregate(ncat = ncat, & aicen = aicen(i,j,:,iblk), & trcrn = trcrn(i,j,:,:,iblk), & vicen = vicen(i,j,:,iblk), & @@ -441,6 +442,7 @@ 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 edf5d289a..4c4be8308 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 25c126201..4577113f1 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(hin_max=hin_max) ! ice thickness distribution + call icepack_init_itd(ncat=ncat, hin_max=hin_max) ! ice thickness distribution if (my_task == master_task) then - call icepack_init_itd_hist(hin_max=hin_max, c_hi_range=c_hi_range) ! output + call icepack_init_itd_hist(ncat=ncat, 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 ( & - 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 + 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 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,7 +494,8 @@ subroutine init_restart do j = 1, ny_block do i = 1, nx_block if (tmask(i,j,iblk)) then - call icepack_aggregate(aicen = aicen(i,j,:,iblk), & + call icepack_aggregate(ncat = ncat, & + aicen = aicen(i,j,:,iblk), & trcrn = trcrn(i,j,:,:,iblk), & vicen = vicen(i,j,:,iblk), & vsnon = vsnon(i,j,:,iblk), & @@ -503,6 +504,7 @@ 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 edb091941..194293118 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(hin_max=hin_max) ! ice thickness distribution + call icepack_init_itd(ncat=ncat, hin_max=hin_max) ! ice thickness distribution if (my_task == master_task) then - call icepack_init_itd_hist(hin_max=hin_max, c_hi_range=c_hi_range) ! output + call icepack_init_itd_hist(ncat=ncat, hin_max=hin_max, c_hi_range=c_hi_range) ! output endif call icepack_query_tracer_flags(tr_fsd_out=tr_fsd) @@ -154,12 +154,13 @@ subroutine cice_init if (icepack_warnings_aborted()) call abort_ice(trim(subname), & file=__FILE__,line= __LINE__) - 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 + 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 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,7 +479,8 @@ subroutine init_restart do j = 1, ny_block do i = 1, nx_block if (tmask(i,j,iblk)) then - call icepack_aggregate(aicen = aicen(i,j,:,iblk), & + call icepack_aggregate(ncat = ncat, & + aicen = aicen(i,j,:,iblk), & trcrn = trcrn(i,j,:,:,iblk), & vicen = vicen(i,j,:,iblk), & vsnon = vsnon(i,j,:,iblk), & @@ -487,6 +489,7 @@ 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 edb091941..cb1241a5e 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, write_ic, & + use ice_calendar, only: dt, dt_dyn, 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(hin_max=hin_max) ! ice thickness distribution + call icepack_init_itd(ncat=ncat, hin_max=hin_max) ! ice thickness distribution if (my_task == master_task) then - call icepack_init_itd_hist(hin_max=hin_max, c_hi_range=c_hi_range) ! output + call icepack_init_itd_hist(ncat=ncat, hin_max=hin_max, c_hi_range=c_hi_range) ! output endif call icepack_query_tracer_flags(tr_fsd_out=tr_fsd) @@ -154,12 +154,13 @@ subroutine cice_init if (icepack_warnings_aborted()) call abort_ice(trim(subname), & file=__FILE__,line= __LINE__) - 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 + 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 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__) @@ -243,7 +244,6 @@ 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,7 +478,8 @@ subroutine init_restart do j = 1, ny_block do i = 1, nx_block if (tmask(i,j,iblk)) then - call icepack_aggregate(aicen = aicen(i,j,:,iblk), & + call icepack_aggregate(ncat = ncat, & + aicen = aicen(i,j,:,iblk), & trcrn = trcrn(i,j,:,:,iblk), & vicen = vicen(i,j,:,iblk), & vsnon = vsnon(i,j,:,iblk), & @@ -487,6 +488,7 @@ 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 edb091941..cb1241a5e 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, write_ic, & + use ice_calendar, only: dt, dt_dyn, 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(hin_max=hin_max) ! ice thickness distribution + call icepack_init_itd(ncat=ncat, hin_max=hin_max) ! ice thickness distribution if (my_task == master_task) then - call icepack_init_itd_hist(hin_max=hin_max, c_hi_range=c_hi_range) ! output + call icepack_init_itd_hist(ncat=ncat, hin_max=hin_max, c_hi_range=c_hi_range) ! output endif call icepack_query_tracer_flags(tr_fsd_out=tr_fsd) @@ -154,12 +154,13 @@ subroutine cice_init if (icepack_warnings_aborted()) call abort_ice(trim(subname), & file=__FILE__,line= __LINE__) - 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 + 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 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__) @@ -243,7 +244,6 @@ 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,7 +478,8 @@ subroutine init_restart do j = 1, ny_block do i = 1, nx_block if (tmask(i,j,iblk)) then - call icepack_aggregate(aicen = aicen(i,j,:,iblk), & + call icepack_aggregate(ncat = ncat, & + aicen = aicen(i,j,:,iblk), & trcrn = trcrn(i,j,:,:,iblk), & vicen = vicen(i,j,:,iblk), & vsnon = vsnon(i,j,:,iblk), & @@ -487,6 +488,7 @@ 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 edb091941..194293118 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(hin_max=hin_max) ! ice thickness distribution + call icepack_init_itd(ncat=ncat, hin_max=hin_max) ! ice thickness distribution if (my_task == master_task) then - call icepack_init_itd_hist(hin_max=hin_max, c_hi_range=c_hi_range) ! output + call icepack_init_itd_hist(ncat=ncat, hin_max=hin_max, c_hi_range=c_hi_range) ! output endif call icepack_query_tracer_flags(tr_fsd_out=tr_fsd) @@ -154,12 +154,13 @@ subroutine cice_init if (icepack_warnings_aborted()) call abort_ice(trim(subname), & file=__FILE__,line= __LINE__) - 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 + 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 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,7 +479,8 @@ subroutine init_restart do j = 1, ny_block do i = 1, nx_block if (tmask(i,j,iblk)) then - call icepack_aggregate(aicen = aicen(i,j,:,iblk), & + call icepack_aggregate(ncat = ncat, & + aicen = aicen(i,j,:,iblk), & trcrn = trcrn(i,j,:,:,iblk), & vicen = vicen(i,j,:,iblk), & vsnon = vsnon(i,j,:,iblk), & @@ -487,6 +489,7 @@ 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 0b45a78af..a55338556 100644 --- a/cicecore/drivers/unittest/opticep/ice_init_column.F90 +++ b/cicecore/drivers/unittest/opticep/ice_init_column.F90 @@ -55,6 +55,27 @@ 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, & @@ -88,7 +109,6 @@ 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 , & @@ -129,7 +149,7 @@ subroutine init_thermo_vertical !----------------------------------------------------------------- call icepack_query_parameters(depressT_out=depressT) - call icepack_init_thermo(sprofile=sprofile) + call icepack_init_thermo(nilyr=nilyr, sprofile=sprofile) call icepack_warnings_flush(nu_diag) if (icepack_warnings_aborted()) call abort_ice(error_message=subname, & file=__FILE__, line=__LINE__) @@ -325,6 +345,7 @@ 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), & @@ -635,10 +656,10 @@ subroutine init_fsd(floesize) if (tr_fsd) then ! initialize floe size distribution the same in every column and category - 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 + 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 do iblk = 1, max_blocks do j = 1, ny_block @@ -649,7 +670,7 @@ subroutine init_fsd(floesize) enddo ! k enddo ! n - call icepack_cleanup_fsd (afsdn = afsdn) ! renormalize + call icepack_cleanup_fsd (ncat, nfsd, afsdn) ! renormalize do n = 1, ncat do k = 1, nfsd @@ -790,7 +811,9 @@ 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)) + 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) enddo ! i enddo ! j @@ -818,7 +841,10 @@ subroutine init_bgc() do j = jlo, jhi do i = ilo, ihi - call icepack_load_ocean_bio_array( & + 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, & 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), & @@ -855,7 +881,8 @@ subroutine init_bgc() trcrn_bgc(k-ntrcr_o,n) = trcrn(i,j,k,n,iblk) enddo enddo - call icepack_init_bgc( & + call icepack_init_bgc(ncat=ncat, nblyr=nblyr, nilyr=nilyr, ntrcr_o=ntrcr_o, & + cgrid=cgrid, igrid=igrid, ntrcr=ntrcr, nbtrcr=nbtrcr, & sicen=sicen(:,:), trcrn=trcrn_bgc(:,:), sss=sss(i,j, iblk), & ocean_bio_all=ocean_bio_all(i,j,:,iblk)) enddo ! i @@ -899,7 +926,8 @@ subroutine init_hbrine() if (icepack_warnings_aborted()) call abort_ice(error_message=subname, & file=__FILE__,line= __LINE__) - call icepack_init_hbrine(phi_snow=phi_snow) + call icepack_init_hbrine(bgrid=bgrid, igrid=igrid, cgrid=cgrid, icgrid=icgrid, & + swgrid=swgrid, nblyr=nblyr, nilyr=nilyr, phi_snow=phi_snow) call icepack_warnings_flush(nu_diag) if (icepack_warnings_aborted()) call abort_ice(error_message=subname, & file=__FILE__, line=__LINE__) @@ -1004,7 +1032,6 @@ 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 , & @@ -1053,17 +1080,17 @@ subroutine input_zbgc tr_bgc_N = .true. ! ! brine height parameter - phi_snow = -1.0_dbl_kind ! snow porosity + phi_snow = p5 ! snow porosity ! skl biology parameters bgc_flux_type = 'Jin2006'! type of ocean-ice poston velocity ('constant') ! z biology parameters - 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 + 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 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 @@ -1072,119 +1099,118 @@ 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 = 0.1_dbl_kind + ratio_Fe2C_phaeo = p1 ratio_Fe2N_diatoms = 0.023_dbl_kind ! algal Fe to N (umol/mol) ratio_Fe2N_sp = 0.023_dbl_kind ratio_Fe2N_phaeo = 0.7_dbl_kind ratio_Fe2DON = 0.023_dbl_kind ! Fe to N of DON (nmol/umol) - ratio_Fe2DOC_s = 0.1_dbl_kind ! Fe to C of DOC (nmol/umol) saccharids + ratio_Fe2DOC_s = p1 ! Fe to C of DOC (nmol/umol) saccharids ratio_Fe2DOC_l = 0.033_dbl_kind ! Fe to C of DOC (nmol/umol) lipids fr_resp = 0.05_dbl_kind ! frac of algal growth lost due to respiration - 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 + 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 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.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) + alpha2max_low_diatoms = 0.8_dbl_kind ! light limitation (1/(W/m^2)) + alpha2max_low_sp = 0.67_dbl_kind + alpha2max_low_phaeo = 0.67_dbl_kind + beta2max_diatoms = 0.018_dbl_kind ! light inhibition (1/(W/m^2)) + beta2max_sp = 0.0025_dbl_kind + beta2max_phaeo = 0.01_dbl_kind + mu_max_diatoms = 1.2_dbl_kind ! maximum growth rate (1/day) + mu_max_sp = 0.851_dbl_kind + mu_max_phaeo = 0.851_dbl_kind + grow_Tdep_diatoms = 0.06_dbl_kind ! Temperature dependence of growth (1/C) + grow_Tdep_sp = 0.06_dbl_kind + grow_Tdep_phaeo = 0.06_dbl_kind + fr_graze_diatoms = 0.01_dbl_kind ! Fraction grazed + fr_graze_sp = p1 + fr_graze_phaeo = p1 + mort_pre_diatoms = 0.007_dbl_kind! Mortality (1/day) mort_pre_sp = 0.007_dbl_kind mort_pre_phaeo = 0.007_dbl_kind - mort_Tdep_diatoms = 0.03_dbl_kind ! T dependence of mortality (1/C) + mort_Tdep_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 = 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 + K_Fe_phaeo = p1 + f_don_protein = 0.6_dbl_kind ! fraction of spilled grazing to proteins + kn_bac_protein = 0.03_dbl_kind ! Bacterial degredation of DON (1/d) + f_don_Am_protein = 0.25_dbl_kind ! fraction of remineralized DON to ammonium + f_doc_s = 0.4_dbl_kind ! fraction of mortality to DOC + f_doc_l = 0.4_dbl_kind + f_exude_s = c1 ! fraction of exudation to DOC f_exude_l = c1 - k_bac_s = 0.03_dbl_kind ! Bacterial degredation of DOC (1/d) + k_bac_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 = 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_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_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.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) + 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) 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 = 5.0_dbl_kind ! ratio of C to N in proteins (mol/mol) + ratio_C2N_proteins = 7.0_dbl_kind ! ratio of C to N in proteins (mol/mol) - ! z salinity parameters - grid_oS = c0 ! for bottom flux - l_skS = 0.028_dbl_kind ! characteristic diffusive scale (m) + ! z salinity parameters + grid_oS = c5 ! for bottom flux + l_skS = 7.0_dbl_kind ! characteristic diffusive scale (m) !----------------------------------------------------------------- ! read from input file @@ -1346,7 +1372,6 @@ 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) @@ -1398,16 +1423,6 @@ 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 @@ -1644,113 +1659,16 @@ subroutine input_zbgc ! set values in icepack !----------------------------------------------------------------- - 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_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_warnings_flush(nu_diag) if (icepack_warnings_aborted()) call abort_ice(error_message=subname, & file=__FILE__, line=__LINE__) @@ -2319,7 +2237,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, trcrn_sw + use ice_arrays_column, only: R_C2N, R_chl2N, R_C2N_DON, R_Si2N, trcrn_sw integer (kind=int_kind) :: & nbtrcr, nbtrcr_sw, nt_fbri, & @@ -2388,27 +2306,6 @@ 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 @@ -2428,6 +2325,46 @@ 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 @@ -2506,28 +2443,126 @@ subroutine init_zbgc !----------------------------------------------------------------- allocate( & - R_C2N (icepack_max_algae), & ! algal C to N (mole/mole) + 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_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_C2N(1) = ratio_C2N_diatoms - R_C2N(2) = ratio_C2N_sp - R_C2N(3) = ratio_C2N_phaeo + 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_chl2N(1) = ratio_chl2N_diatoms - R_chl2N(2) = ratio_chl2N_sp - R_chl2N(3) = ratio_chl2N_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 algaltype(1) = algaltype_diatoms algaltype(2) = algaltype_sp algaltype(3) = algaltype_phaeo - dictype(:) = -c1 - doctype(1) = doctype_s - doctype(2) = doctype_l - dontype(1) = dontype_protein - fedtype(1) = fedtype_1 - feptype(1) = feptype_1 + + 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 @@ -2535,6 +2570,25 @@ 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 @@ -2821,11 +2875,7 @@ 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) @@ -2864,7 +2914,6 @@ 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 @@ -2925,10 +2974,6 @@ 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 6e46ec51f..64320e601 100644 --- a/cicecore/drivers/unittest/opticep/ice_step_mod.F90 +++ b/cicecore/drivers/unittest/opticep/ice_step_mod.F90 @@ -389,7 +389,8 @@ subroutine step_therm1 (dt, iblk) if (tmask(i,j,iblk)) then - call icepack_step_therm1(dt=dt, & + call icepack_step_therm1(dt=dt, ncat=ncat, & + nilyr=nilyr, nslyr=nslyr, & aicen_init = aicen_init (i,j,:,iblk), & vicen_init = vicen_init (i,j,:,iblk), & vsnon_init = vsnon_init (i,j,:,iblk), & @@ -679,7 +680,8 @@ 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, & + call icepack_step_therm2(dt=dt, ncat=ncat, & + nltrcr=nltrcr, nilyr=nilyr, nslyr=nslyr, nblyr=nblyr, & hin_max = hin_max (:), & aicen = aicen (i,j,:,iblk), & vicen = vicen (i,j,:,iblk), & @@ -707,6 +709,9 @@ 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), & @@ -808,7 +813,8 @@ subroutine update_state (dt, daidt, dvidt, dvsdt, dagedt, offset) !----------------------------------------------------------------- ! if (tmask(i,j,iblk)) & - call icepack_aggregate(aicen = aicen(i,j,:,iblk), & + call icepack_aggregate(ncat = ncat, & + aicen = aicen(i,j,:,iblk), & trcrn = trcrn(i,j,:,:,iblk), & vicen = vicen(i,j,:,iblk), & vsnon = vsnon(i,j,:,iblk), & @@ -817,6 +823,7 @@ 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(:), & @@ -832,7 +839,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 (present(dagedt) .and. tr_iage) then + if (tr_iage .and. present(dagedt)) then if (offset > c0) then ! thermo if (trcr(i,j,nt_iage,iblk) > c0) & dagedt(i,j,iblk) = (trcr(i,j,nt_iage,iblk) & @@ -909,18 +916,16 @@ 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 = 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)) + 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)) end do ! i end do ! j end do ! iblk @@ -1097,12 +1102,13 @@ subroutine step_dyn_ridge (dt, ndtd, iblk) if (tmask(i,j,iblk)) then - 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 (:,:),& + 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 (:,:), & trcrn = trcrn (i,j,:,:,iblk), & rdg_conv = rdg_conv (i,j, iblk), & rdg_shear = rdg_shear(i,j, iblk), & @@ -1219,26 +1225,27 @@ subroutine step_snow (dt, iblk) do j = jlo, jhi do i = ilo, ihi - 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)) + 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)) enddo enddo @@ -1378,6 +1385,7 @@ 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), & @@ -1611,7 +1619,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, Tf, fsnow, meltsn + sst, sss, 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, & @@ -1672,7 +1680,10 @@ subroutine biogeochemistry (dt, iblk) do j = jlo, jhi do i = ilo, ihi - call icepack_load_ocean_bio_array( & + 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, & 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), & @@ -1691,7 +1702,10 @@ subroutine biogeochemistry (dt, iblk) enddo ! mm endif - call icepack_biogeochemistry(dt=dt, & + 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, & upNO = upNO (i,j, iblk), & upNH = upNH (i,j, iblk), & iDi = iDi (i,j,:,:, iblk), & @@ -1714,13 +1728,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), & @@ -1733,7 +1747,8 @@ 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)) + vsnon_init = vsnon_init (i,j,:, iblk), & + skl_bgc = skl_bgc) enddo ! i enddo ! j diff --git a/cicecore/drivers/unittest/sumchk/CICE_InitMod.F90 b/cicecore/drivers/unittest/sumchk/CICE_InitMod.F90 index edb091941..cb1241a5e 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, write_ic, & + use ice_calendar, only: dt, dt_dyn, 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(hin_max=hin_max) ! ice thickness distribution + call icepack_init_itd(ncat=ncat, hin_max=hin_max) ! ice thickness distribution if (my_task == master_task) then - call icepack_init_itd_hist(hin_max=hin_max, c_hi_range=c_hi_range) ! output + call icepack_init_itd_hist(ncat=ncat, hin_max=hin_max, c_hi_range=c_hi_range) ! output endif call icepack_query_tracer_flags(tr_fsd_out=tr_fsd) @@ -154,12 +154,13 @@ subroutine cice_init if (icepack_warnings_aborted()) call abort_ice(trim(subname), & file=__FILE__,line= __LINE__) - 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 + 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 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__) @@ -243,7 +244,6 @@ 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,7 +478,8 @@ subroutine init_restart do j = 1, ny_block do i = 1, nx_block if (tmask(i,j,iblk)) then - call icepack_aggregate(aicen = aicen(i,j,:,iblk), & + call icepack_aggregate(ncat = ncat, & + aicen = aicen(i,j,:,iblk), & trcrn = trcrn(i,j,:,:,iblk), & vicen = vicen(i,j,:,iblk), & vsnon = vsnon(i,j,:,iblk), & @@ -487,6 +488,7 @@ 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 337828d60..9480d79bc 100644 --- a/cicecore/shared/ice_arrays_column.F90 +++ b/cicecore/shared/ice_arrays_column.F90 @@ -229,8 +229,12 @@ module ice_arrays_column bgc_data_dir ! directory for biogeochemistry data real (kind=dbl_kind), dimension(:), allocatable, public :: & - R_chl2N, & ! 3 algal chlorophyll to N (mg/mmol) - R_C2N ! algal C to N (mole/mole) + 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 ! 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 bc2f72f00..d0768fc5a 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 10936fa7e..22cd3184a 100644 --- a/cicecore/shared/ice_init_column.F90 +++ b/cicecore/shared/ice_init_column.F90 @@ -55,6 +55,27 @@ 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, & @@ -88,7 +109,6 @@ 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 , & @@ -129,7 +149,7 @@ subroutine init_thermo_vertical !----------------------------------------------------------------- call icepack_query_parameters(depressT_out=depressT) - call icepack_init_thermo(sprofile=sprofile) + call icepack_init_thermo(nilyr=nilyr, sprofile=sprofile) call icepack_warnings_flush(nu_diag) if (icepack_warnings_aborted()) call abort_ice(error_message=subname, & file=__FILE__, line=__LINE__) @@ -325,6 +345,7 @@ 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), & @@ -635,10 +656,10 @@ subroutine init_fsd(floesize) if (tr_fsd) then ! initialize floe size distribution the same in every column and category - 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 + 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 do iblk = 1, max_blocks do j = 1, ny_block @@ -649,7 +670,7 @@ subroutine init_fsd(floesize) enddo ! k enddo ! n - call icepack_cleanup_fsd (afsdn = afsdn) ! renormalize + call icepack_cleanup_fsd (ncat, nfsd, afsdn) ! renormalize do n = 1, ncat do k = 1, nfsd @@ -790,7 +811,9 @@ 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)) + 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) enddo ! i enddo ! j @@ -818,7 +841,10 @@ subroutine init_bgc() do j = jlo, jhi do i = ilo, ihi - call icepack_load_ocean_bio_array( & + 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, & 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), & @@ -855,7 +881,8 @@ subroutine init_bgc() trcrn_bgc(k-ntrcr_o,n) = trcrn(i,j,k,n,iblk) enddo enddo - call icepack_init_bgc( & + call icepack_init_bgc(ncat=ncat, nblyr=nblyr, nilyr=nilyr, ntrcr_o=ntrcr_o, & + cgrid=cgrid, igrid=igrid, ntrcr=ntrcr, nbtrcr=nbtrcr, & sicen=sicen(:,:), trcrn=trcrn_bgc(:,:), sss=sss(i,j, iblk), & ocean_bio_all=ocean_bio_all(i,j,:,iblk)) enddo ! i @@ -899,7 +926,8 @@ subroutine init_hbrine() if (icepack_warnings_aborted()) call abort_ice(error_message=subname, & file=__FILE__,line= __LINE__) - call icepack_init_hbrine(phi_snow=phi_snow) + call icepack_init_hbrine(bgrid=bgrid, igrid=igrid, cgrid=cgrid, icgrid=icgrid, & + swgrid=swgrid, nblyr=nblyr, nilyr=nilyr, phi_snow=phi_snow) call icepack_warnings_flush(nu_diag) if (icepack_warnings_aborted()) call abort_ice(error_message=subname, & file=__FILE__, line=__LINE__) @@ -1004,7 +1032,6 @@ 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 , & @@ -1053,17 +1080,17 @@ subroutine input_zbgc tr_bgc_N = .true. ! ! brine height parameter - phi_snow = -1.0_dbl_kind ! snow porosity + phi_snow = p5 ! snow porosity ! skl biology parameters bgc_flux_type = 'Jin2006'! type of ocean-ice poston velocity ('constant') ! z biology parameters - 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 + 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 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 @@ -1072,119 +1099,118 @@ 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 = 0.1_dbl_kind + ratio_Fe2C_phaeo = p1 ratio_Fe2N_diatoms = 0.023_dbl_kind ! algal Fe to N (umol/mol) ratio_Fe2N_sp = 0.023_dbl_kind ratio_Fe2N_phaeo = 0.7_dbl_kind ratio_Fe2DON = 0.023_dbl_kind ! Fe to N of DON (nmol/umol) - ratio_Fe2DOC_s = 0.1_dbl_kind ! Fe to C of DOC (nmol/umol) saccharids + ratio_Fe2DOC_s = p1 ! Fe to C of DOC (nmol/umol) saccharids ratio_Fe2DOC_l = 0.033_dbl_kind ! Fe to C of DOC (nmol/umol) lipids fr_resp = 0.05_dbl_kind ! frac of algal growth lost due to respiration - 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 + 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 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.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) + alpha2max_low_diatoms = 0.8_dbl_kind ! light limitation (1/(W/m^2)) + alpha2max_low_sp = 0.67_dbl_kind + alpha2max_low_phaeo = 0.67_dbl_kind + beta2max_diatoms = 0.018_dbl_kind ! light inhibition (1/(W/m^2)) + beta2max_sp = 0.0025_dbl_kind + beta2max_phaeo = 0.01_dbl_kind + mu_max_diatoms = 1.2_dbl_kind ! maximum growth rate (1/day) + mu_max_sp = 0.851_dbl_kind + mu_max_phaeo = 0.851_dbl_kind + grow_Tdep_diatoms = 0.06_dbl_kind ! Temperature dependence of growth (1/C) + grow_Tdep_sp = 0.06_dbl_kind + grow_Tdep_phaeo = 0.06_dbl_kind + fr_graze_diatoms = 0.01_dbl_kind ! Fraction grazed + fr_graze_sp = p1 + fr_graze_phaeo = p1 + mort_pre_diatoms = 0.007_dbl_kind! Mortality (1/day) mort_pre_sp = 0.007_dbl_kind mort_pre_phaeo = 0.007_dbl_kind - mort_Tdep_diatoms = 0.03_dbl_kind ! T dependence of mortality (1/C) + mort_Tdep_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 = 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 + K_Fe_phaeo = p1 + f_don_protein = 0.6_dbl_kind ! fraction of spilled grazing to proteins + kn_bac_protein = 0.03_dbl_kind ! Bacterial degredation of DON (1/d) + f_don_Am_protein = 0.25_dbl_kind ! fraction of remineralized DON to ammonium + f_doc_s = 0.4_dbl_kind ! fraction of mortality to DOC + f_doc_l = 0.4_dbl_kind + f_exude_s = c1 ! fraction of exudation to DOC f_exude_l = c1 - k_bac_s = 0.03_dbl_kind ! Bacterial degredation of DOC (1/d) + k_bac_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 = 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_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_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.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) + 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) 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 = 5.0_dbl_kind ! ratio of C to N in proteins (mol/mol) + ratio_C2N_proteins = 7.0_dbl_kind ! ratio of C to N in proteins (mol/mol) - ! z salinity parameters - grid_oS = c0 ! for bottom flux - l_skS = 0.028_dbl_kind ! characteristic diffusive scale (m) + ! z salinity parameters + grid_oS = c5 ! for bottom flux + l_skS = 7.0_dbl_kind ! characteristic diffusive scale (m) !----------------------------------------------------------------- ! read from input file @@ -1346,7 +1372,6 @@ 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) @@ -1398,16 +1423,6 @@ 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 @@ -1644,113 +1659,16 @@ subroutine input_zbgc ! set values in icepack !----------------------------------------------------------------- - 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_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_warnings_flush(nu_diag) if (icepack_warnings_aborted()) call abort_ice(error_message=subname, & file=__FILE__, line=__LINE__) @@ -2319,7 +2237,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, trcrn_sw + use ice_arrays_column, only: R_C2N, R_chl2N, R_C2N_DON, R_Si2N, trcrn_sw integer (kind=int_kind) :: & nbtrcr, nbtrcr_sw, nt_fbri, & @@ -2388,27 +2306,6 @@ 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 @@ -2428,6 +2325,46 @@ 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 @@ -2506,28 +2443,126 @@ subroutine init_zbgc !----------------------------------------------------------------- allocate( & - R_C2N (icepack_max_algae), & ! algal C to N (mole/mole) + 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_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_C2N(1) = ratio_C2N_diatoms - R_C2N(2) = ratio_C2N_sp - R_C2N(3) = ratio_C2N_phaeo + 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_chl2N(1) = ratio_chl2N_diatoms - R_chl2N(2) = ratio_chl2N_sp - R_chl2N(3) = ratio_chl2N_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 algaltype(1) = algaltype_diatoms algaltype(2) = algaltype_sp algaltype(3) = algaltype_phaeo - dictype(:) = -c1 - doctype(1) = doctype_s - doctype(2) = doctype_l - dontype(1) = dontype_protein - fedtype(1) = fedtype_1 - feptype(1) = feptype_1 + + 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 @@ -2535,6 +2570,24 @@ 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 @@ -2821,10 +2874,6 @@ 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) @@ -2863,7 +2912,6 @@ 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 @@ -2924,10 +2972,6 @@ 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 d97671021..d9215de60 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 = .false. - tr_bgc_C = .false. + tr_bgc_Nit = .true. + tr_bgc_C = .true. tr_bgc_chl = .false. - tr_bgc_Am = .false. - tr_bgc_Sil = .false. + tr_bgc_Am = .true. + tr_bgc_Sil = .true. tr_bgc_DMS = .false. - tr_bgc_PON = .false. - tr_bgc_hum = .false. + tr_bgc_PON = .true. + tr_bgc_hum = .true. tr_bgc_DON = .false. - tr_bgc_Fe = .false. + tr_bgc_Fe = .true. grid_o = 0.006 grid_o_t = 0.006 - l_sk = 2.0 + l_sk = 0.024 grid_oS = 0.0 l_skS = 0.028 - phi_snow = -1.0 - initbio_frac = 1.0 + phi_snow = -0.3 + initbio_frac = 0.8 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 = 3600.0 - tau_max = 604800.0 - algal_vel = 0.0000001 + tau_min = 5200.0 + tau_max = 173000.0 + algal_vel = 0.0000000111 R_dFe2dust = 0.035 dustFe_sol = 0.005 chlabs_diatoms = 0.03 chlabs_sp = 0.01 chlabs_phaeo = 0.05 - 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 + 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 mu_max_diatoms = 1.44 - 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 + 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 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.2 - f_don_Am_protein = 1.0 - f_doc_s = 0.5 - f_doc_l = 0.5 + kn_bac_protein = 0.03 + f_don_Am_protein = 0.25 + f_doc_s = 0.4 + f_doc_l = 0.4 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.9 - fr_dFe = 1.0 - k_nitrif = 0.046 + fr_mort2min = 0.5 + fr_dFe = 0.3 + k_nitrif = 0.0 t_iron_conv = 3065.0 max_loss = 0.9 max_dfe_doc1 = 0.2 - fr_resp_s = 0.9 - y_sk_DMS = 0.7 - t_sk_conv = 5.0 - t_sk_ox = 12.0 + fr_resp_s = 0.75 + y_sk_DMS = 0.5 + t_sk_conv = 3.0 + t_sk_ox = 10.0 algaltype_diatoms = 0.0 - algaltype_sp = 0.0 - algaltype_phaeo = 0.0 + algaltype_sp = 0.5 + algaltype_phaeo = 0.5 nitratetype = -1.0 - ammoniumtype = 0.0 + ammoniumtype = 1.0 silicatetype = -1.0 dmspptype = 0.5 - dmspdtype = 0.0 - humtype = 0.0 - doctype_s = 0.0 - doctype_l = 0.0 - dontype_protein = 0.0 - fedtype_1 = 0.0 + dmspdtype = -1.0 + humtype = 1.0 + doctype_s = 0.5 + doctype_l = 0.5 + dontype_protein = 0.5 + fedtype_1 = 0.5 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 = 5.0 + ratio_C2N_proteins = 7.0 / &icefields_nml diff --git a/configuration/scripts/options/set_nml.bgcz b/configuration/scripts/options/set_nml.bgcz index 091ca6f6d..46e4dee74 100644 --- a/configuration/scripts/options/set_nml.bgcz +++ b/configuration/scripts/options/set_nml.bgcz @@ -1,19 +1,22 @@ +nilyr = 7 +nslyr = 1 +ncat = 5 nblyr = 7 n_aero = 0 n_zaero = 3 n_algae = 3 n_doc = 2 -n_dic = 1 +n_dic = 0 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. @@ -26,18 +29,3 @@ 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 8fa4abd36..feb900ede 100644 --- a/configuration/scripts/options/set_nml.bgczclim +++ b/configuration/scripts/options/set_nml.bgczclim @@ -1,23 +1,25 @@ -year_init = 2005 -istep0 = 0 -npt_unit = '1' -npt = 168 +nilyr = 7 +nslyr = 1 +ncat = 5 nblyr = 7 n_aero = 0 n_zaero = 3 n_algae = 3 n_doc = 2 -n_dic = 1 +n_dic = 0 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. @@ -27,22 +29,6 @@ tr_bgc_PON = .true. tr_bgc_hum = .true. tr_bgc_DON = .true. tr_bgc_Fe = .true. -# 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' +tfrz_option = "mushy" + + diff --git a/configuration/scripts/options/set_nml.bgczm b/configuration/scripts/options/set_nml.bgczm index fb963f06c..53513ca87 100644 --- a/configuration/scripts/options/set_nml.bgczm +++ b/configuration/scripts/options/set_nml.bgczm @@ -1,19 +1,22 @@ +nilyr = 7 +nslyr = 1 +ncat = 5 nblyr = 7 n_aero = 0 n_zaero = 3 n_algae = 3 n_doc = 2 -n_dic = 1 +n_dic = 0 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. @@ -26,18 +29,3 @@ 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 7b0520dab..1be753486 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 = 1.0 +fr_dFe = 0.9 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 = -1.0 -zaerotype_bc2 = -1.0 -zaerotype_dust1 = -1.0 -zaerotype_dust2 = -1.0 -zaerotype_dust3 = -1.0 -zaerotype_dust4 = -1.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 ratio_C2N_proteins = 5.0 diff --git a/configuration/scripts/options/set_nml.zaero b/configuration/scripts/options/set_nml.zaero deleted file mode 100644 index f35f2dce4..000000000 --- a/configuration/scripts/options/set_nml.zaero +++ /dev/null @@ -1,7 +0,0 @@ -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 2ac855a24..3f34da8a2 100644 --- a/configuration/scripts/tests/base_suite.ts +++ b/configuration/scripts/tests/base_suite.ts @@ -54,15 +54,13 @@ restart gbox80 1x1 box2001 smoke gbox80 1x1 boxslotcyl smoke gbox12 1x1x12x12x1 boxchan,diag1,debug restart gx3 8x2 modal -smoke gx3 8x2 bgcz,diag1,run5day +smoke gx3 8x2 bgcz smoke gx3 8x2 jra55do -smoke gx3 8x2 bgczm,diag1,debug -smoke gx3 12x2 zaero,diag1,debug -#smoke gx3 8x1 bgcskl,diag1,debug +smoke gx3 8x2 bgczm,debug +smoke gx3 8x1 bgcskl,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 0f8bedc1a..e5e7feee6 100644 --- a/configuration/scripts/tests/io_suite.ts +++ b/configuration/scripts/tests/io_suite.ts @@ -9,9 +9,8 @@ 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,bgczm,histall,iobinary -restart gx3 16x2 gx3ncarbulk,zaero,histall,iobinary +restart gx3 32x1 gx3ncarbulk,bgcz,histall,iobinary,precision8 +restart gx3 16x2 gx3ncarbulk,bgcskl,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 @@ -25,7 +24,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 bgcz,histall,ionetcdf,iocdf2,precision8 +restart gx3 15x2 bgcskl,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 @@ -40,7 +39,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 bgcz,histall,iopio1,iohdf5,precision8 +restart gx3 30x1 bgcskl,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 @@ -55,7 +54,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 bgcz,histall,iopio2,iopnetcdf5 +restart gx3 30x1 bgcskl,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 17bb80885..a262ec135 100644 --- a/configuration/scripts/tests/nothread_suite.ts +++ b/configuration/scripts/tests/nothread_suite.ts @@ -55,8 +55,7 @@ restart gx3 12x1 short smoke gx3 16x1 bgcz smoke gx3 16x1 bgczm,debug -smoke gx3 16x1 zaero,debug -#smoke gx3 24x1 bgcskl,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 21726f295..a2740932c 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.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" + "``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" "``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", "0.0" + "``dmspdtype``", "real", "mobility type between stationary and mobile dmspd", "-1.0" "``dmspptype``", "real", "mobility type between stationary and mobile dmspp", "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" + "``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" "``dustFe_sol``", "real", "solubility fraction", "0.005" - "``fedtype_1``", "real", "mobility type between stationary and mobile fed lipids", "0.0" + "``fedtype_1``", "real", "mobility type between stationary and mobile fed lipids", "0.5" "``feptype_1``", "real", "mobility type between stationary and mobile fep lipids", "0.5" - "``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" + "``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" "``fr_graze_e``", "real", "fraction of assimilation excreted", "0.5" - "``fr_graze_phaeo``", "real", "fraction grazed phaeocystis", "0.19" + "``fr_graze_phaeo``", "real", "fraction grazed phaeocystis", "0.1" "``fr_graze_s``", "real", "fraction of grazing spilled or slopped", "0.5" - "``fr_graze_sp``", "real", "fraction grazed small plankton", "0.19" - "``fr_mort2min``", "real", "fractionation of mortality to Am", "0.9" + "``fr_graze_sp``", "real", "fraction grazed small plankton", "0.1" + "``fr_mort2min``", "real", "fractionation of mortality to Am", "0.5" "``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.9" + "``fr_resp_s``", "real", "DMSPd fraction of respiration loss as DMSPd", "0.75" "``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.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_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_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", "0.006" - "``grid_o_t``", "real", "z biology for top flux", "0.006" + "``grid_o``", "real", "z biology for bottom flux", "5.0" + "``grid_o_t``", "real", "z biology for top flux", "5.0" "``grid_oS``", "real", "zsalinity DEPRECATED", "" - "``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" + "``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" "``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.046" + "``k_nitrif``", "real", "nitrification rate per day", "0.0" "``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.2" - "``l_sk``", "real", "characteristic diffusive scale in m", "2.0" + "``kn_bac_protein``", "real", "bacterial degradation of DON per day", "0.03" + "``l_sk``", "real", "characteristic diffusive scale in m", "7.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.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" + "``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" "``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", "-1.0" + "``phi_snow``", "real", "snow porosity for brine height tracer", "0.5" "``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", "5.0" + "``ratio_C2N_proteins``", "real", "algal C to N in mol/mol proteins", "7.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", "0.1" + "``ratio_Fe2C_phaeo``", "real", "algal Fe to C in umol/mol phaeocystis", "1.0" "``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.023" + "``ratio_Fe2N_diatoms``", "real", "algal Fe to N in umol/mol diatoms", "0.23" "``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.023" - "``ratio_Fe2DOC_l``", "real", "Fe to C of DOC lipids nmol/umol", "0.033" + "``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_Fe2DOC_l``", "real", "Fe to C of DOC lipids nmol/umol", "0.033" "``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", "skeletal biogeochemistry DEPRECATED", "``.false.``" + "``skl_bgc``", "logical", "biogeochemistry", "``.false.``" "``solve_zbgc``", "logical", "", "``.false.``" "``solve_zsal``", "logical", "zsalinity DEPRECATED, update salinity tracer profile", "``.false.``" - "``tau_max``", "real", "long time mobile to stationary exchanges", "604800." - "``tau_min``", "real", "rapid module to stationary exchanges", "3600." + "``tau_max``", "real", "long time mobile to stationary exchanges", "1.73e-5" + "``tau_min``", "real", "rapid module to stationary exchanges", "5200." "``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", "5.0" - "``t_sk_ox``", "real", "DMS oxidation time in days", "12.0" + "``t_sk_conv``", "real", "Stefels conversion time in days", "3.0" + "``t_sk_ox``", "real", "DMS oxidation time in days", "10.0" "``T_max``", "real", "maximum temperature degC", "0.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" + "``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" "``z_tracers``", "logical", "", "``.false.``" "", "", "", "" diff --git a/icepack b/icepack index 05ac0ec3e..4c8709525 160000 --- a/icepack +++ b/icepack @@ -1 +1 @@ -Subproject commit 05ac0ec3ea666080eed36e67f6cf8ce1255b243f +Subproject commit 4c87095256c1c599c3ccaa857a95744158751a60