diff --git a/components/mpas-seaice/driver/ice_comp_mct.F b/components/mpas-seaice/driver/ice_comp_mct.F index 4350034168b4..214fca9caeb8 100644 --- a/components/mpas-seaice/driver/ice_comp_mct.F +++ b/components/mpas-seaice/driver/ice_comp_mct.F @@ -46,9 +46,20 @@ module ice_comp_mct ! MPASSI modules use seaice_analysis_driver - use seaice_column, only: seaice_column_reinitialize_fluxes, & + use seaice_column, only: seaice_column_reinitialize_fluxes, & !colpkg seaice_column_coupling_prep - use seaice_constants + use seaice_constants, only: coupleAlarmID, & + seaiceFreshWaterFreezingPoint, & + seaiceDensityIce, & + seaiceDensitySnow, & + seaiceDensitySeaWater, & + seaiceGravity, & + seaiceLatentHeatMelting, & + seaiceReferenceSalinity, & + seaiceFrazilSalinityReduction, & + seaiceFrazilIcePorosity, & + pii + use seaice_core use seaice_core_interface use seaice_forcing @@ -57,8 +68,6 @@ module ice_comp_mct use seaice_time_integration use seaice_error, only: seaice_check_critical_error - use ice_constants_colpkg, only: Tffresh, ice_ref_salinity, p001 - use ice_colpkg, only: colpkg_sea_freezing_temperature ! @@ -2571,7 +2580,7 @@ subroutine ice_export_mct(i2x_i, errorCode) !{{{ i2x_i % rAttr(index_i2x_Fioi_melth,n) = oceanHeatFlux(i) i2x_i % rAttr(index_i2x_Fioi_swpen,n) = oceanShortwaveFlux(i) i2x_i % rAttr(index_i2x_Fioi_meltw,n) = oceanFreshWaterFlux(i) + frazilMassAdjust(i)/ailohi - i2x_i % rAttr(index_i2x_Fioi_salt ,n) = oceanSaltFlux(i) + ice_ref_salinity*p001*frazilMassAdjust(i)/ailohi + i2x_i % rAttr(index_i2x_Fioi_salt ,n) = oceanSaltFlux(i) + seaiceReferenceSalinity*0.001_RKIND*frazilMassAdjust(i)/ailohi i2x_i % rAttr(index_i2x_Fioi_taux ,n) = tauxo i2x_i % rAttr(index_i2x_Fioi_tauy ,n) = tauyo @@ -2760,10 +2769,6 @@ subroutine frazil_mass(freezingPotential, frazilMassFlux, seaSurfaceSalinity, & liquidus_temperature_mush, & enthalpy_mush - use ice_colpkg_shared, only: & - dSin0_frazil, & - phi_init - ! !INPUT PARAMETERS: real (kind=RKIND), intent(in) :: freezingPotential real (kind=RKIND), intent(in) :: seaSurfaceSalinity @@ -2789,12 +2794,12 @@ subroutine frazil_mass(freezingPotential, frazilMassFlux, seaSurfaceSalinity, & if (freezingPotential > 0.0_RKIND) then if (trim(config_thermodynamics_type) == "mushy") then ! mushy - if (seaSurfaceSalinity > 2.0_RKIND * dSin0_frazil) then - Si0new = seaSurfaceSalinity - dSin0_frazil + if (seaSurfaceSalinity > 2.0_RKIND * seaiceFrazilSalinityReduction) then + Si0new = seaSurfaceSalinity - seaiceFrazilSalinityReduction else - Si0new = seaSurfaceSalinity**2 / (4.0_RKIND*dSin0_frazil) + Si0new = seaSurfaceSalinity**2 / (4.0_RKIND*seaiceFrazilSalinityReduction) endif - Ti = liquidus_temperature_mush(Si0new/phi_init) + Ti = liquidus_temperature_mush(Si0new/seaiceFrazilIcePorosity) qi0new = enthalpy_mush(Ti, Si0new) else qi0new = -seaiceDensityIce*seaiceLatentHeatMelting diff --git a/components/mpas-seaice/src/analysis_members/mpas_seaice_high_frequency_output.F b/components/mpas-seaice/src/analysis_members/mpas_seaice_high_frequency_output.F index b116060633ad..5e26dd7bb23f 100644 --- a/components/mpas-seaice/src/analysis_members/mpas_seaice_high_frequency_output.F +++ b/components/mpas-seaice/src/analysis_members/mpas_seaice_high_frequency_output.F @@ -17,7 +17,6 @@ module seaice_high_frequency_output use mpas_dmpar use mpas_timekeeping use mpas_stream_manager - use ice_constants_colpkg implicit none private diff --git a/components/mpas-seaice/src/analysis_members/mpas_seaice_miscellaneous.F b/components/mpas-seaice/src/analysis_members/mpas_seaice_miscellaneous.F index 9575834577f4..37fb666dbe8a 100644 --- a/components/mpas-seaice/src/analysis_members/mpas_seaice_miscellaneous.F +++ b/components/mpas-seaice/src/analysis_members/mpas_seaice_miscellaneous.F @@ -215,11 +215,11 @@ end subroutine seaice_precompute_miscellaneous!}}} subroutine seaice_compute_miscellaneous(domain, instance, timeLevel, err)!{{{ - use ice_constants_colpkg, only: & - awtvdr, & - awtidr, & - awtvdf, & - awtidf + use seaice_constants, only: & + seaiceAlbedoWtVisibleDirect, & + seaiceAlbedoWtNearIRDirect, & + seaiceAlbedoWtVisibleDiffuse, & + seaiceAlbedoWtNearIRDiffuse !----------------------------------------------------------------- ! @@ -345,10 +345,10 @@ subroutine seaice_compute_miscellaneous(domain, instance, timeLevel, err)!{{{ do iCell = 1, nCellsSolve broadbandAlbedo(iCell) = & - (awtvdr * albedoVisibleDirectCell(iCell) + & - awtidr * albedoIRDirectCell(iCell) + & - awtvdf * albedoVisibleDiffuseCell(iCell) + & - awtidf * albedoIRDiffuseCell(iCell)) * & + (seaiceAlbedoWtVisibleDirect * albedoVisibleDirectCell(iCell) + & + seaiceAlbedoWtNearIRDirect * albedoIRDirectCell(iCell) + & + seaiceAlbedoWtVisibleDiffuse * albedoVisibleDiffuseCell(iCell) + & + seaiceAlbedoWtNearIRDiffuse * albedoIRDiffuseCell(iCell)) * & iceAreaCellInitial(iCell) enddo ! iCell diff --git a/components/mpas-seaice/src/analysis_members/mpas_seaice_regional_statistics.F b/components/mpas-seaice/src/analysis_members/mpas_seaice_regional_statistics.F index 118b78c83c22..e1e3de02716d 100644 --- a/components/mpas-seaice/src/analysis_members/mpas_seaice_regional_statistics.F +++ b/components/mpas-seaice/src/analysis_members/mpas_seaice_regional_statistics.F @@ -963,13 +963,13 @@ subroutine fixed_regional_statistics(domain) use seaice_mesh, only: & seaice_interpolate_vertex_to_cell - use ice_constants_colpkg, only: & - awtvdr, & - awtidr, & - awtvdf, & - awtidf, & - rhoi, & - rhos + use seaice_constants, only: & + seaiceAlbedoWtVisibleDirect, & + seaiceAlbedoWtNearIRDirect, & + seaiceAlbedoWtVisibleDiffuse, & + seaiceAlbedoWtNearIRDiffuse, & + seaiceDensityIce, & + seaiceDensitySnow type(domain_type), intent(inout) :: & domain @@ -1138,13 +1138,13 @@ subroutine fixed_regional_statistics(domain) ! kinetic energy iSum = (iRegion-1) * nSums + 5 globalSumsIn(iSum) = globalSumsIn(iSum) + 0.5_RKIND * areaCell(iCell) * & - (snowVolumeCell(iCell) * rhos + iceVolumeCell(iCell) * rhoi) * & + (snowVolumeCell(iCell) * seaiceDensitySnow + iceVolumeCell(iCell) * seaiceDensityIce) * & (uVelocityCell(iCell)**2 + vVelocityCell(iCell)**2) ! total mass (for RMS ice speed) iSum = (iRegion-1) * nSums + 6 globalSumsIn(iSum) = globalSumsIn(iSum) + areaCell(iCell) * & - (snowVolumeCell(iCell) * rhos + iceVolumeCell(iCell) * rhoi) + (snowVolumeCell(iCell) * seaiceDensitySnow + iceVolumeCell(iCell) * seaiceDensityIce) ! average albedo if (solarZenithAngleCosine(iCell) > 0.0_RKIND) then @@ -1152,10 +1152,10 @@ subroutine fixed_regional_statistics(domain) iSum = (iRegion-1) * nSums + 7 globalSumsIn(iSum) = globalSumsIn(iSum) + & areaCell(iCell) * & - (awtvdr * albedoVisibleDirectCell(iCell) + & - awtidr * albedoIRDirectCell(iCell) + & - awtvdf * albedoVisibleDiffuseCell(iCell) + & - awtidf * albedoIRDiffuseCell(iCell)) + (seaiceAlbedoWtVisibleDirect * albedoVisibleDirectCell(iCell) + & + seaiceAlbedoWtNearIRDirect * albedoIRDirectCell(iCell) + & + seaiceAlbedoWtVisibleDiffuse * albedoVisibleDiffuseCell(iCell) + & + seaiceAlbedoWtNearIRDiffuse * albedoIRDiffuseCell(iCell)) iSum = (iRegion-1) * nSums + 8 globalSumsIn(iSum) = globalSumsIn(iSum) + & diff --git a/components/mpas-seaice/src/shared/mpas_seaice_constants.F b/components/mpas-seaice/src/shared/mpas_seaice_constants.F index 340752a35534..4060e8fe6939 100644 --- a/components/mpas-seaice/src/shared/mpas_seaice_constants.F +++ b/components/mpas-seaice/src/shared/mpas_seaice_constants.F @@ -6,77 +6,146 @@ !> \author Adrian K. Turner, LANL !> \date 2013-2014 !> \details -!> -! +!> Values in this module have been copied from the two ice_constants_colpkg.F90 +! modules in the column physics package (colpkg, in column/). They will remain +! duplicates until the column physic package is deprecated. !----------------------------------------------------------------------- module seaice_constants use mpas_derived_types + use shr_const_mod private save +#ifdef CCSMCOUPLED + real (kind=RKIND), parameter, public :: & + ! fundamental constants + pi = SHR_CONST_PI ,&! pi + seaiceSecondsPerDay = SHR_CONST_CDAY ! seconds in calendar day + + real (kind=RKIND), public :: & + seaiceGravity = SHR_CONST_G ,&! gravitational acceleration (m/s^2) + + ! physical constants + seaiceDensityIce = SHR_CONST_RHOICE ,&! density of ice (kg/m^3) + seaiceDensitySeaWater = SHR_CONST_RHOSW ,&! density of seawater (kg/m^3) + seaiceDensityFreshwater = SHR_CONST_RHOFW ,&! density of fresh water (kg/m^3) + + ! thermodynamic constants + seaiceStefanBoltzmann = SHR_CONST_STEBOL ,&! W/m^2/K^4 + seaiceIceSnowEmissivity = 1.0_RKIND ,&! emissivity of snow and ice + seaiceFreshWaterFreezingPoint = SHR_CONST_TKFRZ ,&! freezing temp of fresh ice (K) + seaiceFreshIceSpecificHeat = SHR_CONST_CPICE ,&! specific heat of fresh ice (J/kg/K) + seaiceAirSpecificHeat = SHR_CONST_CPDAIR ,&! specific heat of air (J/kg/K) + seaiceWaterVaporSpecificHeat = SHR_CONST_CPWV ,&! specific heat of water vapor (J/kg/K) + seaiceZvir = SHR_CONST_ZVIR ,&! rh2o/rair - 1.0 + seaiceLatentHeatSublimation = SHR_CONST_LATSUB ,&! latent heat, sublimation freshwater (J/kg) + seaiceIceSurfaceMeltingTemperature= SHR_CONST_TKFRZ-SHR_CONST_TKFRZ ,&! melting temp. ice top surface (C) + seaiceSnowSurfaceMeltingTemperature= SHR_CONST_TKFRZ-SHR_CONST_TKFRZ ,&! melting temp. snow top surface (C) + seaiceVonKarmanConstant = SHR_CONST_KARMAN ,&! von Karman constant + seaiceSeaWaterSpecificHeat = SHR_CONST_CPSW ,&! specific heat of ocn (J/kg/K) + ! freshwater value needed for enthalpy + seaiceLatentHeatVaporization = SHR_CONST_LATVAP ,&! latent heat, vaporization freshwater (J/kg) + seaiceLatentHeatMelting = SHR_CONST_LATICE ,&! latent heat of melting of fresh ice (J/kg) + seaiceReferenceSalinity = SHR_CONST_ICE_REF_SAL,&! ice reference salinity (ppt) + seaiceSnowPatchiness = 0.005_RKIND ,&! parameter for fractional snow area (m) + +#ifdef RASM_MODS + seaiceIceOceanDragCoefficient = 0.00962_RKIND ! ice-ocn drag coefficient for RASM as temporary measure +#else + seaiceIceOceanDragCoefficient = 0.00536_RKIND ! ice-ocn drag coefficient +#endif + +! R_gC2molC = SHR_CONST_MWC ,&! molar mass of carbon + +#else + real (kind=RKIND), parameter, public :: & + ! fundamental constants + pi = 3.14159265358979323846_RKIND + seaiceSecondsPerDay = 24.0_RKIND * 3600.0_RKIND + + real (kind=RKIND), public :: & + seaiceGravity = 9.80616_RKIND ,&! gravitational acceleration (m/s^2) + + ! physical constants + seaiceDensityIce = 917.0_RKIND ,&! density of ice (kg/m^3) + seaiceDensitySeaWater = 1026.0_RKIND ,&! density of seawater (kg/m^3) + seaiceDensityFreshwater = 1000.0_RKIND ,&! density of fresh water (kg/m^3) + + ! thermodynamic constants + seaiceStefanBoltzmann = 567.0e-10_RKIND,&! W/m^2/K^4 + seaiceIceSnowEmissivity = 0.95_RKIND ,&! emissivity of snow and ice ! 0.985_RKIND in Icepack + seaiceFreshWaterFreezingPoint = 273.15_RKIND ,&! freezing temp of fresh ice (K) + seaiceFreshIceSpecificHeat = 2106._RKIND ,&! specific heat of fresh ice (J/kg/K) + seaiceAirSpecificHeat = 1005.0_RKIND ,&! specific heat of air (J/kg/K) + seaiceWaterVaporSpecificHeat = 1.81e3_RKIND ,&! specific heat of water vapor (J/kg/K) + seaiceZvir = 0.606_RKIND ,&! rh2o/rair - 1.0 + seaiceLatentHeatSublimation = 2.835e6_RKIND ,&! latent heat, sublimation freshwater (J/kg) + seaiceIceSurfaceMeltingTemperature = 0.0_RKIND ,&! melting temperature, ice top surface (C) + seaiceSnowSurfaceMeltingTemperature = 0.0_RKIND ,&! melting temperature, snow top surface (C) + seaiceVonKarmanConstant = 0.4_RKIND ,&! von Karman constant + seaiceSeaWaterSpecificHeat = 4218._RKIND ,&! specific heat of ocn (J/kg/K) + ! freshwater value needed for enthalpy + seaiceLatentHeatVaporization = 2.501e6_RKIND ,&! latent heat, vaporization freshwater (J/kg) + seaiceLatentHeatMelting = seaiceLatentHeatSublimation & ! latent heat of melting of fresh ice (J/kg) + - seaiceLatentHeatVaporization, & + seaiceReferenceSalinity = 4._RKIND ,&! ice reference salinity (ppt) + seaiceSnowPatchiness = 0.02_RKIND ,&! parameter for fractional snow area (m) + + seaiceIceOceanDragCoefficient = 0.00536_RKIND ! ice-ocn drag coefficient + +! R_gC2molC = 12.0107_RKIND, & ! molar mass of carbon +#endif + ! fundamental constants real (kind=RKIND), parameter, public :: & - pii = 3.141592653589793_RKIND, & ! CESM uses SHR_CONST_PI + pii = 3.141592653589793_RKIND, & ! echmod - why is this different from pi above? seaiceDegreesToRadians = pii / 180.0_RKIND, & seaiceRadiansToDegrees = 180.0_RKIND / pii, & - seaiceSecondsPerYear = 24.0_RKIND * 3600.0_RKIND * 365.0_RKIND, & - seaiceSecondsPerDay = 24.0_RKIND * 3600.0_RKIND, & +!echmod - BFB but slower??? +! pii = pi, & +! seaiceDegreesToRadians = pi / 180.0_RKIND, & +! seaiceRadiansToDegrees = 180.0_RKIND / pi, & + seaiceSecondsPerYear = 24.0_RKIND * 3600.0_RKIND * 365.0_RKIND, & !echmod - incorrect for leap years seaiceDaysPerSecond = 1.0_RKIND/seaiceSecondsPerDay real (kind=RKIND), public :: & - seaicePi ! pi - - ! Earth constants - real (kind=RKIND), public :: & - seaiceGravity ! gravitational acceleration (m/s^2) - real (kind=RKIND), parameter, public :: & - omega = 7.29212e-5_RKIND ! angular rotation rate of the Earth [s-1] + seaicePi +!echmod - BFB but slower??? +! seaicePi = pi ! pi character (len=*), public, parameter :: & coupleAlarmID = 'coupling' real(kind=RKIND), public :: & - seaicePuny + seaicePuny = 1.0e-11_RKIND ! a small value ! physical constants + real (kind=RKIND), parameter, public :: & + omega = 7.29212e-5_RKIND ! angular rotation rate of the Earth [s-1] + real(kind=RKIND), public :: & - seaiceDensityIce, & ! density of ice (kg/m^3) - seaiceDensitySnow, & ! density of snow (kg/m^3) - seaiceDensitySeaWater, & ! density of seawater (kg/m^3) - seaiceDensityFreshwater ! density of freshwater (kg/m^3) + seaiceDensitySnow = 330.0_RKIND ! density of snow (kg/m^3) ! thermodynamic constants real(kind=RKIND), public :: & - seaiceStefanBoltzmann, & ! J m-2 K-4 s-1 - seaiceIceSnowEmissivity, & ! emissivity of snow and ice - seaiceFreshWaterFreezingPoint, & ! freezing temp of fresh ice (K) - seaiceFreshIceSpecificHeat, & ! specific heat of fresh ice (J/kg/K) - seaiceAirSpecificHeat, & ! specific heat of air (J/kg/K) - seaiceWaterVaporSpecificHeat, & ! specific heat of water vapor (J/kg/K) - seaiceZvir, & ! rh2o/rair - 1.0 - seaiceLatentHeatSublimation, & ! latent heat, sublimation freshwater (J/kg) - seaiceLatentHeatMelting, & ! latent heat of melting of fresh ice (J/kg) - seaiceIceSurfaceMeltingTemperature, & ! melting temp. ice top surface (C) - seaiceSnowSurfaceMeltingTemperature, & ! melting temp. snow top surface (C) - seaiceMeltingTemperatureDepression, & ! melting temp. depression factor (C/ppt) - seaiceOceanAlbedo, & ! Ocean albedo - seaiceVonKarmanConstant, & ! Von Karman constant - seaiceIceSurfaceRoughness, & ! ice surface roughness (m) - seaiceSeaWaterSpecificHeat, & ! specific heat of ocn (J/kg/K) - seaiceLatentHeatVaporization, & ! latent heat, vaporization freshwater (J/kg) - seaiceReferenceSalinity, & ! ice reference salinity (ppt) - seaiceMaximumSalinity, & ! ice maximum salinity (ppt) - seaiceStabilityReferenceHeight, &! stability reference height (m) - seaiceSnowPatchiness ! snow patchiness parameter + seaiceStabilityReferenceHeight = 10._RKIND , & ! reference height for stability (m) + seaiceSnowSurfaceScatteringLayer = 0.040_RKIND , & ! snow surface scattering layer thickness (m) + seaiceMeltingTemperatureDepression = 0.054_RKIND , & ! melting temp. depression factor (C/ppt) + seaiceOceanAlbedo = 0.06_RKIND , & ! ocean albedo + seaiceIceSurfaceRoughness = 0.0005_RKIND, & ! ice surface roughness (m) + seaiceMaximumSalinity = 3.2_RKIND , & ! max salinity at ice base for BL99 (ppt) + ! for mushy thermo: + seaiceFrazilSalinityReduction = 3.0_RKIND , & ! bulk salinity reduction of newly formed frazil (ppt) + seaiceFrazilIcePorosity = 0.75_RKIND , & ! initial liquid fraction of frazil + seaiceFrazilMinimumThickness = 0.05_RKIND ! min thickness of new frazil i ! dynamics constants real(kind=RKIND), public :: & - seaiceIceStrengthConstantHiblerP, & ! P* constant in Hibler strength formulation - seaiceIceStrengthConstantHiblerC, & ! C* constant in Hibler strength formulation - seaiceIceOceanDragCoefficient ! ice ocean drag coefficient + seaiceIceStrengthConstantHiblerP = 2.75e4_RKIND ,&! P* constant in Hibler strength formula + seaiceIceStrengthConstantHiblerC = 20._RKIND ! C* constant in Hibler strength formula ! minimum sea ice area real(kind=RKIND), public :: & @@ -84,26 +153,68 @@ module seaice_constants iceThicknessMinimum, & snowThicknessMinimum - ! biogeochemistry constants - real(kind=RKIND), public :: & - skeletalLayerThickness, & - gramsCarbonPerMolCarbon ! g carbon per mol carbon - - ! ocean biogeochemistry ISPOL values - real(kind=RKIND), parameter, public :: & - oceanAmmoniumISPOL = 1.0_RKIND, & ! mmol N m-3 - oceanDMSISPOL = 0.1_RKIND, & ! mmol S m-3 - oceanDMSPISPOL = 0.1_RKIND, & ! mmol S m-3 - oceanDiatomsISPOL = 1.0_RKIND, & ! mmol N m-3 - oceanSmallAlgaeISPOL = 0.0057_RKIND, & ! mmol N m-3 - oceanPhaeocystisISPOL = 0.0027_RKIND, & ! mmol N m-3 - oceanPolysaccharidsISPOL = 16.2_RKIND, & ! mmol C m-3 - oceanLipidsISPOL = 9.0_RKIND, & ! mmol C m-3 - oceanProteinsCarbonISPOL = 9.0_RKIND, & ! mmol C m-3 - oceanDICISPOL = 1.0_RKIND, & ! mmol C m-3 - oceanProteinsISPOL = 12.9_RKIND, & ! mmol N m-3 - oceanDissolvedIronISPOL = 0.4_RKIND, & ! mmol Fe m-3 - oceanParticulateIronISPOL = 2.0_RKIND,& ! mmol Fe m-3 - oceanHumicsISPOL = 1.0_RKIND ! mmol C m-3 +!echmod - declare and define these constants explicitly in case Icepack changes its defaults + real(kind=RKIND), public :: & + seaiceBigNumber = 1.0e+30_RKIND, & ! a large number + seaiceSnowMinimumDensity = 100.0_RKIND , & ! minimum snow density (kg/m^3) + seaiceBrineDynamicViscosity = 1.79e-3_RKIND, & ! dynamic viscosity of brine (kg/m/s) + seaiceFreezingTemperatureConstant = -1.8_RKIND , & ! freezing temp of seawater (C), used + ! as Tsfcn for open water only when + ! tfrz_option is 'minus1p8' or null + seaiceExtinctionCoef = 1.4_RKIND , & ! vis extnctn coef in ice, wvlngth<700nm (1/m) + seaiceFreshIceConductivity = 2.03_RKIND , & ! thermal conductivity of fresh ice(W/m/deg) + ! (kice) is not used for mushy thermo + seaiceSnowConductivity = 0.30_RKIND , & ! thermal conductivity of snow (W/m/deg) + seaiceSnowMinimumThickness = 1.e-4_RKIND , & ! min snow thickness for computing zTsn (m) + ! weights for albedos for history and diagnostics + ! 4 Jan 2007 BPB Following are appropriate for complete cloud + ! in a summer polar atmosphere with 1.5m bare sea ice surface: + ! .636/.364 vis/nir with only 0.5% direct for each band. + seaiceAlbedoWtVisibleDirect = 0.00318_RKIND, & ! visible, direct + seaiceAlbedoWtNearIRDirect = 0.00182_RKIND, & ! near IR, direct + seaiceAlbedoWtVisibleDiffuse = 0.63282_RKIND, & ! visible, diffuse + seaiceAlbedoWtNearIRDiffuse = 0.36218_RKIND, & ! near IR, diffuse + ! constants for saturation humidity over ice and ocean + seaiceQsatQiceConstant = 11637800._RKIND ,& + seaiceQsatTiceConstant = 5897.8_RKIND ,& + seaiceQsatQocnConstant = 627572.4_RKIND ,& + seaiceQsatTocnConstant = 5107.4_RKIND + +!echmod - Are these needed for standalone runs? +! ! orbital parameters +! integer, public :: iyear_AD ! Year to calculate orbit for +! real(kind=RKIND),public :: eccen ! Earth's orbital eccentricity +! real(kind=RKIND),public :: obliqr ! Earth's obliquity in radians +! real(kind=RKIND),public :: lambm0 ! Mean longitude of perihelion at the +! ! vernal equinox (radians) +! real(kind=RKIND),public :: mvelpp ! Earth's moving vernal equinox longitude +! ! of perihelion + pi (radians) +! real(kind=RKIND),public :: obliq ! obliquity in degrees +! real(kind=RKIND),public :: mvelp ! moving vernal equinox long +! real(kind=RKIND),public :: decln ! solar declination angle in radians +! real(kind=RKIND),public :: eccf ! earth orbit eccentricity factor +! logical,public :: log_print ! Flags print of status/error + + ! biogeochemistry constants + real(kind=RKIND), public :: & + skeletalLayerThickness = 0.03_RKIND ,&! (m) skeletal layer thickness + gramsCarbonPerMolCarbon ! g carbon per mol carbon + + ! ocean biogeochemistry ISPOL values + real(kind=RKIND), parameter, public :: & + oceanAmmoniumISPOL = 1.0_RKIND , & ! mmol N m-3 + oceanDMSISPOL = 0.1_RKIND , & ! mmol S m-3 + oceanDMSPISPOL = 0.1_RKIND , & ! mmol S m-3 + oceanDiatomsISPOL = 1.0_RKIND , & ! mmol N m-3 + oceanSmallAlgaeISPOL = 0.0057_RKIND, & ! mmol N m-3 + oceanPhaeocystisISPOL = 0.0027_RKIND, & ! mmol N m-3 + oceanPolysaccharidsISPOL = 16.2_RKIND , & ! mmol C m-3 + oceanLipidsISPOL = 9.0_RKIND , & ! mmol C m-3 + oceanProteinsCarbonISPOL = 9.0_RKIND , & ! mmol C m-3 + oceanDICISPOL = 1.0_RKIND , & ! mmol C m-3 + oceanProteinsISPOL = 12.9_RKIND , & ! mmol N m-3 + oceanDissolvedIronISPOL = 0.4_RKIND , & ! mmol Fe m-3 + oceanParticulateIronISPOL = 2.0_RKIND , & ! mmol Fe m-3 + oceanHumicsISPOL = 1.0_RKIND ! mmol C m-3 end module seaice_constants diff --git a/components/mpas-seaice/src/shared/mpas_seaice_icepack.F b/components/mpas-seaice/src/shared/mpas_seaice_icepack.F index dfc3856dc14f..2ba7e93222cf 100644 --- a/components/mpas-seaice/src/shared/mpas_seaice_icepack.F +++ b/components/mpas-seaice/src/shared/mpas_seaice_icepack.F @@ -23,8 +23,8 @@ module seaice_icepack use seaice_error - use ice_kinds_mod, only: & - char_len_long +! use ice_kinds_mod, only: & !colpkg +! char_len_long implicit none @@ -196,7 +196,8 @@ module seaice_icepack tracerArrayCell ! warnings string kind - integer, parameter :: strKINDWarnings = char_len_long +! integer, parameter :: strKINDWarnings = char_len_long + integer, parameter :: strKINDWarnings = strKIND contains @@ -621,7 +622,7 @@ end subroutine init_icepack_snow_tracers !||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ! -! init_column_shortwave +! init_icepack_shortwave ! !> \brief !> \author Adrian K. Turner, LANL @@ -5770,6 +5771,7 @@ end function seaice_icepack_enthalpy_snow function seaice_icepack_enthalpy_ice(iceTemperature, iceSalinity) result(iceEnthalpy) !echmod - this function will be needed for the prescribed ice configuration - not tested +!echmod - call enthalpy_mush from icepack_mushy_physics via icepack_intfc (not yet available) use ice_mushy_physics, only: enthalpy_mush @@ -5877,86 +5879,16 @@ subroutine seaice_init_icepack_constants() iceAreaMinimum, & iceThicknessMinimum, & snowThicknessMinimum + !gramsCarbonPerMolCarbon = R_gC2molC -!echmod: These constants will need to be defined in the MPAS-SI driver (or a shared E3SM constants file) -!echmod: eventually, rather than in the old column package. For now, use the column package's values. -!echmod: If E3SM/MPAS-SI wants to use icepack's default values (not recommended), then they should be -!echmod: obtained using icepack_query_parameters instead of 'using' them. In that case, initializing -!echmod: them with the icepack_init_parameters call is unnecessary. use ice_constants_colpkg, only: & ! for E3SM runs this is currently in src/column/constants/cesm/ - pi, & - gravit, & - rhoi, & - rhos, & - rhow, & - puny, & - stefan_boltzmann, & - emissivity, & - Tffresh, & - cp_ice, & - cp_air, & - cp_ocn, & - cp_wv, & - Lvap, & - Lsub, & - Lfresh, & - Timelt, & - Tsmelt, & - zvir, & - ice_ref_salinity, & - depressT, & - Pstar, & - Cstar, & - dragio, & - albocn, & - rhofresh, & - vonkar, & - iceruf, & - zref, & - snowpatch, & - sk_l!, & - !R_gC2molC - -!echmod - move this somewhere else! - real (kind=RKIND) :: & - saltmax = 3.2_RKIND ! max salinity at ice base for BL99 (ppt) + pi call icepack_configure() call seaice_icepack_write_warnings(icepack_warnings_aborted()) +!echmod - BFB but 20% slower when this is set in seaice_constants instead??? seaicePi = pi - seaiceGravity = gravit - seaicePuny = puny - seaiceDensityIce = rhoi - seaiceDensitySnow = rhos - seaiceDensitySeaWater = rhow - seaiceDensityFreshwater = rhofresh - seaiceStefanBoltzmann = stefan_boltzmann - seaiceIceSnowEmissivity = emissivity - seaiceFreshWaterFreezingPoint = Tffresh - seaiceSeaWaterSpecificHeat = cp_ocn - seaiceFreshIceSpecificHeat = cp_ice - seaiceAirSpecificHeat = cp_air - seaiceWaterVaporSpecificHeat = cp_wv - seaiceLatentHeatVaporization = Lvap - seaiceLatentHeatSublimation = Lsub - seaiceLatentHeatMelting = Lfresh - seaiceIceSurfaceMeltingTemperature = Timelt - seaiceSnowSurfaceMeltingTemperature = Tsmelt - seaiceZvir = zvir - seaiceReferenceSalinity = ice_ref_salinity - seaiceMaximumSalinity = saltmax - seaiceMeltingTemperatureDepression = depressT - seaiceOceanAlbedo = albocn - seaiceVonKarmanConstant = vonkar - seaiceIceSurfaceRoughness = iceruf - seaiceStabilityReferenceHeight = zref - seaiceSnowPatchiness = snowpatch - seaiceIceStrengthConstantHiblerP = Pstar - seaiceIceStrengthConstantHiblerC = Cstar - seaiceIceOceanDragCoefficient = dragio - skeletalLayerThickness = sk_l - !gramsCarbonPerMolCarbon = R_gC2molC iceAreaMinimum = seaicePuny iceThicknessMinimum = seaicePuny @@ -10095,65 +10027,6 @@ end subroutine init_icepack_package_tracer_sizes subroutine init_icepack_package_tracer_indices(tracerObject) - !use ice_colpkg_tracers, only: & - ! nt_Tsfc, & ! ice/snow temperature - ! nt_qice, & ! volume-weighted ice enthalpy (in layers) - ! nt_qsno, & ! volume-weighted snow enthalpy (in layers) - ! nt_sice, & ! volume-weighted ice bulk salinity (CICE grid layers) - ! nt_fbri, & ! volume fraction of ice with dynamic salt (hinS/vicen*aicen) - ! nt_iage, & ! volume-weighted ice age - ! nt_FY, & ! area-weighted first-year ice area - ! nt_alvl, & ! level ice area fraction - ! nt_vlvl, & ! level ice volume fraction - ! nt_apnd, & ! melt pond area fraction - ! nt_hpnd, & ! melt pond depth - ! nt_ipnd, & ! melt pond refrozen lid thickness - ! nt_aero, & ! starting index for aerosols in ice - ! nt_smice, & ! snow ice mass - ! nt_smliq, & ! snow liquid mass - ! nt_rsnw, & ! snow grain radius - ! nt_rhos, & ! snow density tracer - ! nt_fbri, & ! volume fraction of ice with dynamic salt (hinS/vicen*aicen) - ! nt_bgc_Nit, & ! nutrients - ! nt_bgc_Am, & ! - ! nt_bgc_Sil, & ! - ! nt_bgc_DMSPp, & ! trace gases (skeletal layer) - ! nt_bgc_DMSPd, & ! - ! nt_bgc_DMS, & ! - ! nt_bgc_PON, & ! zooplankton and detritus - ! nt_bgc_hum, & ! humic material - ! ! bio layer indicess - ! nlt_bgc_Nit, & ! nutrients - ! nlt_bgc_Am, & ! - ! nlt_bgc_Sil, & ! - ! nlt_bgc_DMSPp, & ! trace gases (skeletal layer) - ! nlt_bgc_DMSPd, & ! - ! nlt_bgc_DMS, & ! - ! nlt_bgc_PON, & ! zooplankton and detritus - ! nlt_bgc_hum, & ! humic material - ! nlt_chl_sw, & ! points to total chla in trcrn_sw - ! nt_zbgc_frac, & ! fraction of tracer in the mobile phase - ! nt_bgc_S, & ! Bulk salinity in fraction ice with dynamic salinity (Bio grid) - ! nt_bgc_N, & ! diatoms, phaeocystis, pico/small - ! nt_bgc_C, & ! diatoms, phaeocystis, pico/small - ! nt_bgc_chl, & ! diatoms, phaeocystis, pico/small - ! nlt_bgc_N, & ! diatoms, phaeocystis, pico/small - ! nlt_bgc_C, & ! diatoms, phaeocystis, pico/small - ! nlt_bgc_chl, & ! diatoms, phaeocystis, pico/small - ! nt_bgc_DOC, & ! dissolved organic carbon - ! nlt_bgc_DOC, & ! dissolved organic carbon - ! nt_bgc_DON, & ! dissolved organic nitrogen - ! nlt_bgc_DON, & ! dissolved organic nitrogen - ! nt_bgc_DIC, & ! dissolved inorganic carbon - ! nlt_bgc_DIC, & ! dissolved inorganic carbon - ! nt_bgc_Fed, & ! dissolved iron - ! nt_bgc_Fep, & ! particulate iron - ! nlt_bgc_Fed, & ! dissolved iron - ! nlt_bgc_Fep, & ! particulate iron - ! nt_zaero, & ! black carbon and other aerosols - ! nlt_zaero, & ! black carbon and other aerosols - ! nlt_zaero_sw ! black carbon and other aerosols - use icepack_intfc, only: & icepack_init_tracer_indices @@ -11836,16 +11709,10 @@ subroutine init_icepack_package_configs(domain) icepack_configure, & icepack_query_parameters ! debugging -!echmod: These constants will need to be defined in the MPAS-SI driver (or a shared E3SM constants file) -!echmod: eventually, rather than in the old column package. For now, use the column package's values. - use ice_colpkg_shared, only: & - dSin0_frazil, & - phi_init, & - hs_ssl - use seaice_constants, only: & pii, & ! pi !echmod: use SHR value instead? seaicePuny, & ! a small number + seaiceBigNumber, & ! a large number seaiceSecondsPerDay, & ! number of seconds in 1 day seaiceDensityIce, & ! density of ice (kg/m^3) seaiceDensitySnow, & ! density of snow (kg/m^3) @@ -11863,6 +11730,7 @@ subroutine init_icepack_package_configs(domain) seaiceSnowSurfaceMeltingTemperature, & ! melting temp. snow top surface (C) seaiceStefanBoltzmann, & ! J m-2 K-4 s-1 seaiceIceSnowEmissivity, & ! emissivity of snow and ice + seaiceSnowSurfaceScatteringLayer, & ! snow surface scattering layer thickness (m) seaiceStabilityReferenceHeight, & ! stability reference height (m) seaiceFreshWaterFreezingPoint, & ! freezing temp of fresh ice (K) seaiceIceOceanDragCoefficient, & ! ice ocean drag coefficient @@ -11872,12 +11740,30 @@ subroutine init_icepack_package_configs(domain) seaiceReferenceSalinity, & ! ice reference salinity (ppt) seaiceMaximumSalinity, & ! ice maximum salinity (ppt) seaiceMeltingTemperatureDepression, & ! melting temperature depression factor (C/ppt) + seaiceFrazilSalinityReduction, & ! bulk salinity reduction of newly formed frazil (ppt) + seaiceFrazilIcePorosity, & ! initial liquid fraction of frazil seaicePi, & ! pi seaiceGravity, & ! gravitational acceleration (m/s^2) seaiceSnowPatchiness, & ! snow patchiness parameter seaiceIceStrengthConstantHiblerP, & ! P* constant in Hibler strength formulation seaiceIceStrengthConstantHiblerC, & ! C* constant in Hibler strength formulation - skeletalLayerThickness ! skeletal layer thickness + skeletalLayerThickness, & ! skeletal layer thickness + seaiceSnowMinimumDensity, & ! minimum snow density (kg/m^3) + seaiceBrineDynamicViscosity, & ! dynamic viscosity of brine (kg/m/s) + seaiceFreezingTemperatureConstant, &! constant freezing temp of seawater (C) + seaiceExtinctionCoef, & ! vis extnctn coef in ice, wvlngth<700nm (1/m) + seaiceFreshIceConductivity, & ! thermal conductivity of fresh ice(W/m/deg) + seaiceSnowConductivity, & ! thermal conductivity of snow (W/m/deg) + seaiceSnowMinimumThickness, & ! min snow thickness for computing zTsn (m) + seaiceFrazilMinimumThickness, & ! min thickness of new frazil ice + seaiceAlbedoWtVisibleDirect, & ! visible, direct + seaiceAlbedoWtNearIRDirect, & ! near IR, direct + seaiceAlbedoWtVisibleDiffuse, & ! visible, diffuse + seaiceAlbedoWtNearIRDiffuse, & ! near IR, diffuse + seaiceQsatQiceConstant, & ! constant for saturation humidity over ice + seaiceQsatTiceConstant, & ! constant for saturation humidity over ice + seaiceQsatQocnConstant, & ! constant for saturation humidity over ocean + seaiceQsatTocnConstant ! constant for saturation humidity over ocean type(domain_type), intent(inout) :: & domain @@ -12487,7 +12373,7 @@ subroutine init_icepack_package_configs(domain) call icepack_init_parameters(& !argcheck_in = , & ! may not be needed in the driver puny_in = seaicePuny, & - !bignum_in = , & + bignum_in = seaiceBigNumber, & ! pi_in = pii, & ! use SHR value instead pi_in = seaicePi, & secday_in = seaiceSecondsPerDay, & @@ -12498,7 +12384,7 @@ subroutine init_icepack_package_configs(domain) emissivity_in = seaiceIceSnowEmissivity, & ! cp_ice_in = seaiceFreshIceSpecificHeat, & ! cp_ocn_in = seaiceSeaWaterSpecificHeat, & - !hfrazilmin_in = , & + hfrazilmin_in = seaiceFrazilMinimumThickness, & !floediam_in = , & depressT_in = seaiceMeltingTemperatureDepression, & dragio_in = seaiceIceOceanDragCoefficient, & ! note calc_dragio not implemented @@ -12506,8 +12392,8 @@ subroutine init_icepack_package_configs(domain) !iceruf_ocn_in = , & ! under-ice roughness, not yet implemented albocn_in = seaiceOceanAlbedo, & gravit_in = seaiceGravity, & - !viscosity_dyn_in = , & - !Tocnfrz_in = , & + viscosity_dyn_in = seaiceBrineDynamicViscosity, & + Tocnfrz_in = seaiceFreezingTemperatureConstant, & rhofresh_in = seaiceDensityFreshwater, & zvir_in = seaiceZvir, & vonkar_in = seaiceVonKarmanConstant, & @@ -12523,30 +12409,29 @@ subroutine init_icepack_package_configs(domain) Cf_in = config_ratio_ridging_work_to_PE, & Pstar_in = seaiceIceStrengthConstantHiblerP, & Cstar_in = seaiceIceStrengthConstantHiblerC, & - !kappav_in = , & - !kice_in = , & - !ksno_in = , & + kappav_in = seaiceExtinctionCoef, & + kice_in = seaiceFreshIceConductivity, & + ksno_in = seaiceSnowConductivity, & zref_in = seaiceStabilityReferenceHeight, & - !hs_min_in = , & + hs_min_in = seaiceSnowMinimumThickness, & snowpatch_in = seaiceSnowPatchiness, & ! ccsm3 radiation scheme !rhosi_in = , & ! brine, zbgc, zsalinity sk_l_in = skeletalLayerThickness, & ! saltmax_in = seaiceMaximumSalinity, & - phi_init_in = phi_init, & ! therm_itd config_frazil_ice_porosity + phi_init_in = seaiceFrazilIcePorosity, & !min_salin_in = , & ! ktherm=1, brine, zsalinity !salt_loss_in = , & ! brine, zsalinity !min_bgc_in = , & ! shortwave - dSin0_frazil_in = dSin0_frazil, & !config_frazil_salinity_reduction, & ! therm_itd - !hi_ssl_in = , & ! shortwave, aerosol - hs_ssl_in = hs_ssl, & !config_snow_surface_scattering_layer_depth, & ! shortwave, aerosol, itd, therm_itd, bgc - !awtvdr_in = , & ! shortwave - !awtidr_in = , & ! shortwave - !awtvdf_in = , & ! shortwave - !awtidf_in = , & ! shortwave - !qqqice_in = , & ! atmo, therm_shared - !TTTice_in = , & ! atmo, therm_shared - !qqqocn_in = , & ! atmo - !TTTocn_in = , & ! atmo + dSin0_frazil_in = seaiceFrazilSalinityReduction, & + hs_ssl_in = seaiceSnowSurfaceScatteringLayer, & + awtvdr_in = seaiceAlbedoWtVisibleDirect, & + awtidr_in = seaiceAlbedoWtNearIRDirect, & + awtvdf_in = seaiceAlbedoWtVisibleDiffuse, & + awtidf_in = seaiceAlbedoWtNearIRDiffuse, & + qqqice_in = seaiceQsatQiceConstant, & + TTTice_in = seaiceQsatTiceConstant, & + qqqocn_in = seaiceQsatQocnConstant, & + TTTocn_in = seaiceQsatTocnConstant, & ktherm_in = config_thermodynamics_type_int, & conduct_in = config_heat_conductivity_type, & fbot_xfer_type_in = config_ocean_heat_transfer_type, & @@ -12892,15 +12777,13 @@ subroutine init_icepack_package_configs(domain) ! liquid fraction of congelation ice !phi_i_mushy = config_congelation_ice_porosity -!echmod - fix as needed -! ! phi_init: -! ! initial liquid fraction of frazil ice -! !phi_init = config_frazil_ice_porosity + ! phi_init: + ! initial liquid fraction of frazil ice + !phi_init = seaiceFrazilIcePorosity -!echmod - fix as needed -! ! dSin0_frazil: -! ! initial frazil salinity reduction -! !dSin0_frazil = config_frazil_salinity_reduction + ! dSin0_frazil: + ! initial frazil salinity reduction + !dSin0_frazil = seaiceFrazilSalinityReduction !----------------------------------------------------------------------- ! Parameters for radiation @@ -12939,10 +12822,9 @@ subroutine init_icepack_package_configs(domain) ! dEdd tuning parameters, set in namelist -!echmod - fix as needed -! ! hs_ssl: -! ! snow surface scattering layer depth -! !hs_ssl = config_snow_surface_scattering_layer_depth + ! hs_ssl: + ! snow surface scattering layer depth + !hs_ssl = seaiceSnowSurfaceScatteringLayer ! R_ice: ! sea ice tuning parameter; +1 > 1sig increase in albedo