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