diff --git a/bin_run1_20240618/job_albedo b/bin_run1_20240618/job_albedo new file mode 100755 index 000000000..6c2914c56 --- /dev/null +++ b/bin_run1_20240618/job_albedo @@ -0,0 +1,63 @@ +#!/bin/bash +#SBATCH --job-name=test_3zoo_ballast_phaeo_özgür +#SBATCH --account=nwg_hauck.maresys +#SBATCH --partition=mpp +#SBATCH -N 9 +#SBATCH --cpus-per-task=1 +#SBATCH --time=00:30:00 +#SBATCH --qos=12h +#SBATCH --tasks-per-node 96 # using all 128CPus we exceed the maxload limit (>130) of many used nodes when us parallel I/O + +#SBATCH -o slurm-out.out +#SBATCH -e slurm-err.out +#SBATCH --mail-user=sina.mueller@awi.de +#SBATCH --mail-type=END + +# disable hyperthreading +#SBATCH --hint=nomultithread + +module purge +source ../env/albedo/shell +export OMP_NUM_THREADS=1 +ulimit -s unlimited + + +# determine JOBID +JOBID=`echo $SLURM_JOB_ID |cut -d"." -f1` + +ln -s ../bin/fesom.x . # cp -n ../bin/fesom.x +#cp -n ../../config/namelist.config . +#cp -n ../../config/namelist.forcing . +#cp -n ../../config/namelist.oce . +#cp -n ../../config/namelist.ice . +#cp -n ../../config/namelist.io . +#cp -n ../../config/namelist.icepack . + +#___DETERMINE SLURM JOBID+OUTPUTFILE____________________________________________ +jobid=$(echo $SLURM_JOB_ID | cut -d"." -f1) +fname="fesom2.0.out" + +date +srun --mpi=pmi2 ./fesom.x > fesom2.0.out #${fname} +date + +#qstat -f $PBS_JOBID +#export EXITSTATUS=$? +#if [ ${EXITSTATUS} -eq 0 ] || [ ${EXITSTATUS} -eq 127 ] ; then +#sbatch job_albedo +#fi + +Resultpath='/albedo/work/user/simuel001/PHAEO_TEST/' +test -e $Resultpath/fesom.1959.oce.restart.nc && exit + +IsInFile=$( tail -1 fesom2.0.out | grep -c should) +if (( IsInFile > 0 )); then +# submit next #job \ + echo "submitting next job" + cp fesom2.0.out fesom.out.done + sbatch job_albedo +else + echo "something is wrong, last line of fesom.out reads" + echo $( tail -1 fesom2.0.out) + echo "abnormal termination of job script" +fi diff --git a/bin_run1_20240618/namelist.config b/bin_run1_20240618/namelist.config new file mode 100644 index 000000000..6892ccd51 --- /dev/null +++ b/bin_run1_20240618/namelist.config @@ -0,0 +1,63 @@ +! This is the namelist file for model general configuration + +&modelname +runid='fesom' +/ + +×tep +step_per_day=32 !96 !96 !72 !72 !45 !72 !96 +run_length= 1 !62 !62 !62 !28 +run_length_unit='y' ! y, m, d, s +/ + +&clockinit ! the model starts at +timenew=0.0 +daynew=1 +yearnew=1958 +/ + +&paths +MeshPath='/albedo/work/projects/p_recompdaf/frbunsen/FESOM2/meshes/core2/' +ClimateDataPath='/albedo/work/projects/MarESys/ogurses/input/corrected_input/' +ResultPath='/albedo/work/user/simuel001/PHAEO_TEST/' +/ + +&restart_log +restart_length=1 !only required for d,h,s cases, y, m take 1 +restart_length_unit='y' !output period: y, d, h, s +logfile_outfreq=960 !in logfile info. output frequency, # steps +/ + +&ale_def +which_ALE='zstar' ! 'linfs','zlevel', 'zstar' +use_partial_cell=.true. +/ + +&geometry +cartesian=.false. +fplane=.false. +cyclic_length=360 ![degree] +rotated_grid=.true. !option only valid for coupled model case now +force_rotation=.true. +alphaEuler=50. ![degree] Euler angles, convention: +betaEuler=15. ![degree] first around z, then around new x, +gammaEuler=-90. ![degree] then around new z. +/ + +&calendar +include_fleapyear=.false. +/ + +&run_config +use_ice=.true. ! ocean+ice +use_cavity=.false. ! +use_cavity_partial_cell=.false. +use_floatice = .false. +use_sw_pene=.true. +num_fesom_groups = 1 +/ + +&machine +n_levels=2 +n_part= 12, 36 ! 432 number of partitions on each hierarchy level +/ diff --git a/bin_run1_20240618/namelist.forcing b/bin_run1_20240618/namelist.forcing new file mode 100644 index 000000000..1c86571d3 --- /dev/null +++ b/bin_run1_20240618/namelist.forcing @@ -0,0 +1,63 @@ +! This is the namelist file for forcing + +&forcing_exchange_coeff +Ce_atm_oce=0.00175 ! exchange coeff. of latent heat over open water +Ch_atm_oce=0.00175 ! exchange coeff. of sensible heat over open water +Cd_atm_oce=0.001 ! drag coefficient between atmosphere and water +Ce_atm_ice=0.00175 ! exchange coeff. of latent heat over ice +Ch_atm_ice=0.00175 ! exchange coeff. of sensible heat over ice +Cd_atm_ice=0.0012 ! drag coefficient between atmosphere and ice +Swind =0.0 ! parameterization for coupled current feedback +/ + +&forcing_bulk +AOMIP_drag_coeff=.false. +ncar_bulk_formulae=.true. +ncar_bulk_z_wind=10.0 ! height at which wind forcing is located (CORE, JRA-do: 10m, JRA, NCEP:2m) +ncar_bulk_z_tair=10.0 ! height at which temp forcing is located (CORE, JRA-do: 10m, JRA, NCEP:2m) +ncar_bulk_z_shum=10.0 ! height at which humi forcing is located (CORE, JRA-do: 10m, JRA, NCEP:2m) + +/ + +&land_ice +use_landice_water=.false. +landice_start_mon=5 +landice_end_mon=10 +/ + +&nam_sbc + nm_xwind_file = '/albedo/work/projects/MarESys/FROM-OLLIE/forcing_JRA55-do-v1.4.0_clim61/uas.clim61' ! name of file with winds, if nm_sbc=2 + nm_ywind_file = '/albedo/work/projects/MarESys/FROM-OLLIE/forcing_JRA55-do-v1.4.0_clim61/vas.clim61' ! name of file with winds, if nm_sbc=2 + nm_humi_file = '/albedo/work/projects/MarESys/FROM-OLLIE/forcing_JRA55-do-v1.4.0_clim61/huss.clim61' ! name of file with humidity + nm_qsr_file = '/albedo/work/projects/MarESys/FROM-OLLIE/forcing_JRA55-do-v1.4.0_clim61/rsds.clim61' ! name of file with solar heat + nm_qlw_file = '/albedo/work/projects/MarESys/FROM-OLLIE/forcing_JRA55-do-v1.4.0_clim61/rlds.clim61' ! name of file with Long wave + nm_tair_file = '/albedo/work/projects/MarESys/FROM-OLLIE/forcing_JRA55-do-v1.4.0_clim61/tas.clim61' ! name of file with 2m air temperature + nm_prec_file = '/albedo/work/projects/MarESys/FROM-OLLIE/forcing_JRA55-do-v1.4.0_clim61/prra.clim61' ! name of file with total precipitation + nm_snow_file = '/albedo/work/projects/MarESys/FROM-OLLIE/forcing_JRA55-do-v1.4.0_clim61/prsn.clim61' ! name of file with snow precipitation + nm_mslp_file = '/albedo/work/projects/MarESys/FROM-OLLIE/forcing_JRA55-do-v1.4.0_clim61/psl.clim61' ! air_pressure_at_sea_level + nm_xwind_var = 'uas' ! name of variable in file with wind + nm_ywind_var = 'vas' ! name of variable in file with wind + nm_humi_var = 'huss' ! name of variable in file with humidity + nm_qsr_var = 'rsds' ! name of variable in file with solar heat + nm_qlw_var = 'rlds' ! name of variable in file with Long wave + nm_tair_var = 'tas' ! name of variable in file with 2m air temperature + nm_prec_var = 'prra' ! name of variable in file with total precipitation + nm_snow_var = 'prsn' ! name of variable in file with total precipitation + nm_mslp_var = 'psl' ! name of variable in file with air_pressure_at_sea_level + nm_nc_iyear = 1900 + nm_nc_imm = 1 ! initial month of time axis in netCDF + nm_nc_idd = 1 ! initial day of time axis in netCDF + nm_nc_freq = 1 ! data points per day (i.e. 86400 if the time axis is in seconds) + nm_nc_tmid = 0 ! 1 if the time stamps are given at the mid points of the netcdf file, 0 otherwise (i.e. 1 in CORE1, CORE2; 0 in JRA55) + y_perpetual=.true. + l_xwind=.true. l_ywind=.true. l_humi=.true. l_qsr=.true. l_qlw=.true. l_tair=.true. l_prec=.true. l_mslp=.true. l_cloud=.false. l_snow=.true. + !nm_runoff_file ='/work/ollie/clidyn/forcing/JRA55-do-v1.4.0/CORE2_runoff.nc' + nm_runoff_file ='/albedo/pool/FESOM/forcing/CORE2/runoff.nc' + runoff_data_source ='CORE2' !Dai09, CORE2 + !nm_runoff_file ='/work/ollie/qwang/FESOM2_input/mesh/CORE2_finaltopo_mean/forcing_data_on_grid/runoff_clim.nc' + !runoff_data_source ='Dai09' !Dai09, CORE2, JRA55 + !runoff_climatology =.true. + !nm_sss_data_file ='/work/ollie/clidyn/forcing/JRA55-do-v1.4.0/PHC2_salx.nc' + nm_sss_data_file ='/albedo/pool/FESOM/forcing/CORE2/PHC2_salx.nc' + sss_data_source ='CORE2' +/ diff --git a/bin_run1_20240618/namelist.ice b/bin_run1_20240618/namelist.ice new file mode 100644 index 000000000..bcd86f145 --- /dev/null +++ b/bin_run1_20240618/namelist.ice @@ -0,0 +1,31 @@ +! Ice namelist +&ice_dyn +whichEVP=0 ! 0=standart; 1=mEVP; 2=aEVP +Pstar=30000.0 ! [N/m^2] +ellipse=2.0 +c_pressure=20.0 ! ice concentration parameter used in ice strength computation +delta_min=1.0e-11 ! [s^(-1)] +evp_rheol_steps=120 ! number of EVP subcycles +alpha_evp=250 ! constant that control numerical stability of mEVP. Adjust with resolution. +beta_evp=250 ! constant that control numerical stability of mEVP. Adjust with resolution. +c_aevp=0.15 ! a tuning constant in aEVP. Adjust with resolution. +Cd_oce_ice=0.0055 ! drag coef. oce - ice +ice_gamma_fct=0.5 ! smoothing parameter +ice_diff=0.0 ! diffusion to stabilize +theta_io=0.0 ! rotation angle +ice_ave_steps=1 ! ice step=ice_ave_steps*oce_step +/ + +&ice_therm +Sice=4.0 ! Ice salinity 3.2--5.0 ppt. +h0=.5 ! Lead closing parameter [m] +emiss_ice=0.97 ! Emissivity of Snow/Ice, +emiss_wat=0.97 ! Emissivity of open water +albsn=0.81 ! Albedo: frozen snow +albsnm=0.77 ! melting snow +albi=0.7 ! frozen ice +albim=0.68 ! melting ice +albw=0.1 ! open water +con=2.1656 ! Thermal conductivities: ice; W/m/K +consn=0.31 ! snow +/ diff --git a/bin_run1_20240618/namelist.icepack b/bin_run1_20240618/namelist.icepack new file mode 100644 index 000000000..ed0dd4d4c --- /dev/null +++ b/bin_run1_20240618/namelist.icepack @@ -0,0 +1,146 @@ +&env_nml ! In the original release these variables are defined in the icepack.settings + nicecat = 5 ! number of ice thickness categories + nfsdcat = 1 ! number of floe size categories + nicelyr = 4 ! number of vertical layers in the ice + nsnwlyr = 4 ! number of vertical layers in the snow + ntraero = 0 ! number of aerosol tracers (up to max_aero in ice_domain_size.F90) + trzaero = 0 ! number of z aerosol tracers (up to max_aero = 6) + tralg = 0 ! number of algal tracers (up to max_algae = 3) + trdoc = 0 ! number of dissolve organic carbon (up to max_doc = 3) + trdic = 0 ! number of dissolve inorganic carbon (up to max_dic = 1) + trdon = 0 ! number of dissolve organic nitrogen (up to max_don = 1) + trfed = 0 ! number of dissolved iron tracers (up to max_fe = 2) + trfep = 0 ! number of particulate iron tracers (up to max_fe = 2) + nbgclyr = 0 ! number of zbgc layers + trbgcz = 0 ! set to 1 for zbgc tracers (needs TRBGCS = 0 and TRBRI = 1) + trzs = 0 ! set to 1 for zsalinity tracer (needs TRBRI = 1) + trbri = 0 ! set to 1 for brine height tracer + trage = 0 ! set to 1 for ice age tracer + trfy = 0 ! set to 1 for first-year ice area tracer + trlvl = 0 ! set to 1 for level and deformed ice tracers + trpnd = 0 ! set to 1 for melt pond tracers + trbgcs = 0 ! set to 1 for skeletal layer tracers (needs TRBGCZ = 0) + ndtd = 1 ! dynamic time steps per thermodynamic time step +/ + +&grid_nml + kcatbound = 1 +/ + +&tracer_nml + tr_iage = .false. + tr_FY = .false. + tr_lvl = .false. + tr_pond_cesm = .false. + tr_pond_topo = .false. + tr_pond_lvl = .false. + tr_aero = .false. + tr_fsd = .false. +/ + +&thermo_nml + kitd = 1 + ktherm = 1 + conduct = 'bubbly' + a_rapid_mode = 0.5e-3 + Rac_rapid_mode = 10.0 + aspect_rapid_mode = 1.0 + dSdt_slow_mode = -5.0e-8 + phi_c_slow_mode = 0.05 + phi_i_mushy = 0.85 + ksno = 0.3 +/ + +&shortwave_nml + shortwave = 'ccsm3' + albedo_type = 'ccsm3' + albicev = 0.78 + albicei = 0.36 + albsnowv = 0.98 + albsnowi = 0.70 + albocn = 0.1 + ahmax = 0.3 + R_ice = 0. + R_pnd = 0. + R_snw = 1.5 + dT_mlt = 1.5 + rsnw_mlt = 1500. + kalg = 0.6 +/ + +&ponds_nml + hp1 = 0.01 + hs0 = 0. + hs1 = 0.03 + dpscale = 1.e-3 + frzpnd = 'hlid' + rfracmin = 0.15 + rfracmax = 1. + pndaspect = 0.8 +/ + +&forcing_nml + formdrag = .false. + atmbndy = 'default' + calc_strair = .true. + calc_Tsfc = .true. + highfreq = .false. + natmiter = 5 + ustar_min = 0.0005 + emissivity = 0.95 + fbot_xfer_type = 'constant' + update_ocn_f = .false. + l_mpond_fresh = .false. + tfrz_option = 'linear_salt' + oceanmixed_ice = .true. + wave_spec_type = 'none' +/ + +&dynamics_nml + kstrength = 1 + krdg_partic = 1 + krdg_redist = 1 + mu_rdg = 3 + Cf = 17. + P_star = 27000. + C_star = 20. +/ + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +!!!!!!!!!! Icepack output namelist !!!!!!!!!! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +&nml_list_icepack +io_list_icepack = 'aicen ',1, 'm', 4, ! Sea ice concentration + 'vicen ',1, 'm', 4, ! Volume per unit area of ice + 'vsnon ',1, 'm', 4, ! Volume per unit area of snow + !'Tsfcn ',1, 'm', 4, ! Sea ice surf. temperature + !'iagen ',1, 'm', 4, ! Sea ice age + !'FYn ',1, 'm', 4, ! First year ice + !'lvln ',1, 'm', 4, ! Ridged sea ice area and volume + !'pond_cesmn',1, 'm', 4, ! Melt ponds area, volume and refrozen lid thickness + !'pond_topon',1, 'm', 4, ! Melt ponds area, volume and refrozen lid thickness + !'pond_lvln ',1, 'm', 4, ! Melt ponds area, volume and refrozen lid thickness + !'brinen ',1, 'm', 4, ! Volume fraction of ice with dynamic salt + !'qicen ',1, 'm', 4, ! Sea ice enthalpy + !'sicen ',1, 'm', 4, ! Sea ice salinity + !'qsnon ',1, 'm', 4, ! Snow enthalpy + ! Average over thicknes classes + !'aice ',1, 'm', 4, ! Sea ice concentration + !'vice ',1, 'm', 4, ! Volume per unit area of ice + !'vsno ',1, 'm', 4, ! Volume per unit area of snow + !'Tsfc ',1, 'm', 4, ! Sea ice surf. temperature + !'iage ',1, 'm', 4, ! Sea ice age + !'FY ',1, 'm', 4, ! First year ice + !'lvl ',1, 'm', 4, ! Ridged sea ice area and volume + !'pond_cesm ',1, 'm', 4, ! Melt ponds area, volume and refrozen lid thickness + !'pond_topo ',1, 'm', 4, ! Melt ponds area, volume and refrozen lid thickness + !'pond_lvl ',1, 'm', 4, ! Melt ponds area, volume and refrozen lid thickness + !'brine ',1, 'm', 4, ! Volume fraction of ice with dynamic salt + !'qice ',1, 'm', 4, ! Sea ice enthalpy + !'sice ',1, 'm', 4, ! Sea ice salinity + !'qsno ',1, 'm', 4, ! Snow enthalpy + ! Other variables + !'uvel ',1, 'm', 4, ! x-component of sea ice velocity + !'vvel ',1, 'm', 4, ! y-component of sea ice velocity +/ diff --git a/bin_run1_20240618/namelist.io b/bin_run1_20240618/namelist.io new file mode 100644 index 000000000..0a3270c4a --- /dev/null +++ b/bin_run1_20240618/namelist.io @@ -0,0 +1,45 @@ +&diag_list +ldiag_solver =.false. +lcurt_stress_surf=.false. +ldiag_curl_vel3 =.false. +ldiag_energy =.false. +ldiag_salt3D =.false. +ldiag_dMOC =.false. +ldiag_DVD =.false. +ldiag_forc =.false. +/ + +&nml_listsize +io_listsize=100 !number of streams to allocate. shallbe large or equal to the number of streams in &nml_list +/ + +! for sea ice related variables use_ice should be true, otherewise there will be no output +! for 'curl_surf' to work lcurt_stress_surf must be .true. otherwise no output +! for 'fer_C', 'bolus_u', 'bolus_v', 'bolus_w', 'fer_K' to work Fer_GM must be .true. otherwise no output +! 'otracers' - all other tracers if applicable +! for 'dMOC' to work ldiag_dMOC must be .true. otherwise no output +&nml_list +io_list = 'sst ',1, 'm', 4, + 'sss ',1, 'm', 4, + 'ssh ',1, 'm', 4, + 'uice ',1, 'm', 4, + 'vice ',1, 'm', 4, + 'a_ice ',1, 'm', 4, + 'm_ice ',1, 'm', 4, + 'm_snow ',1, 'm', 4, + 'MLD1 ',1, 'm', 4, + 'MLD2 ',1, 'm', 4, + 'tx_sur ',1, 'm', 4, + 'ty_sur ',1, 'm', 4, + 'temp ',1, 'y', 4, + 'salt ',1, 'y', 8, + 'N2 ',1, 'y', 4, + 'Kv ',1, 'y', 4, + 'u ',1, 'y', 4, + 'v ',1, 'y', 4, + 'w ',1, 'y', 4, + 'Av ',1, 'y', 4, + 'bolus_u ',1, 'y', 4, + 'bolus_v ',1, 'y', 4, + 'bolus_w ',1, 'y', 4, +/ diff --git a/bin_run1_20240618/namelist.io.recom b/bin_run1_20240618/namelist.io.recom new file mode 100644 index 000000000..2c205a037 --- /dev/null +++ b/bin_run1_20240618/namelist.io.recom @@ -0,0 +1,124 @@ +&diag_list +ldiag_solver =.false. +lcurt_stress_surf=.false. +ldiag_curl_vel3 =.false. +ldiag_energy =.false. +ldiag_salt3D =.false. +ldiag_dMOC =.true. +ldiag_DVD =.false. +ldiag_forc =.false. +/ + +&nml_listsize +io_listsize=110 !number of streams to allocate. shallbe large or equal to the number of streams in &nml_list +/ + + for sea ice related variables use_ice should be true, otherewise there will be no output +! for 'curl_surf' to work lcurt_stress_surf must be .true. otherwise no output +! for 'fer_C', 'bolus_u', 'bolus_v', 'bolus_w', 'fer_K' to work Fer_GM must be .true. otherwise no output +! 'otracers' - all other tracers if applicable +! for 'dMOC' to work ldiag_dMOC must be .true. otherwise no output +&nml_list +io_list = 'sst ',1, 'm', 4, + 'sss ',1, 'm', 4, + 'ssh ',1, 'm', 4, + 'vve_5 ',1, 'm', 4, + 'uice ',1, 'm', 4, + 'vice ',1, 'm', 4, + 'a_ice ',1, 'm', 4, + 'm_ice ',1, 'm', 4, + 'thdgr ',1, 'm', 4, + 'thdgrsn ',1, 'm', 4, + 'm_snow ',1, 'm', 4, + 'MLD1 ',1, 'm', 4, + 'MLD2 ',1, 'm', 4, + 'fh ',1, 'm', 4, + 'fw ',1, 'm', 4, + 'alpha ',1, 'm', 4, + 'beta ',1, 'm', 4, + 'runoff ',1, 'm', 4, + 'evap ',1, 'm', 4, + 'prec ',1, 'm', 4, + 'tx_sur ',1, 'm', 4, + 'ty_sur ',1, 'm', 4, + 'curl_surf ',1, 'm', 4, + 'fer_C ',1, 'm', 4, + 'temp ',1, 'm', 4, + 'salt ',1, 'm', 8, + 'otracers ',1, 'm', 4, + 'N2 ',1, 'y', 4, + 'Kv ',1, 'y', 4, + 'u ',1, 'y', 4, + 'v ',1, 'y', 4, + 'w ',1, 'y', 4, + 'Av ',1, 'y', 4, + 'bolus_u ',1, 'y', 4, + 'bolus_v ',1, 'y', 4, + 'bolus_w ',1, 'y', 4, + 'dMOC ',1, 'y', 4, + 'dpCO2s ',1, 'm', 4, + 'pCO2s ',1, 'm', 4, + 'CO2f ',1, 'm', 4, + 'Hp ',1, 'm', 4, + 'aFe ',1, 'm', 4, + 'aN ',1, 'm', 4, + 'denb ',1, 'm', 4, + 'benN ',1, 'm', 4, + 'benC ',1, 'm', 4, + 'benSi ',1, 'm', 4, + 'benCalc ',1, 'm', 4, + 'Chldegd ',1, 'm', 4, + 'Chldegn ',1, 'm', 4, + 'NNAd ',1, 'm', 4, + 'NNAn ',1, 'm', 4, + 'GPPd ',1, 'm', 4, + 'GPPn ',1, 'm', 4, + 'NPPd ',1, 'm', 4, + 'NPPn ',1, 'm', 4, + 'NPPc ',1, 'm', 4, + 'GPPc ',1, 'm', 4, + 'NNAc ',1, 'm', 4, + 'Chldegc ',1, 'm', 4, + 'PAR ',1, 'm', 4, + 'CO2 ',1, 'm', 4, + 'pH ',1, 'm', 4, + 'pCO2 ',1, 'm', 4, + 'HCO3 ',1, 'm', 4, + 'CO3 ',1, 'm', 4, + 'OmegaC ',1, 'm', 4, + 'kspc ',1, 'm', 4, + 'rhoSW ',1, 'm', 4, + 'wsink_det1',1, 'm', 8, + 'wsink_det2',1, 'm', 8, + 'rho_det1',1, 'm', 8, + 'rho_det2',1, 'm', 8, + 'scaling_rho_1',1, 'm', 8, + 'scaling_rho_2',1, 'm', 8, + 'scaling_visc',1, 'm', 8, + 'grazmeso_tot',1, 'm', 4, + 'grazmeso_n',1, 'm', 4, + 'grazmeso_d',1, 'm', 4, + 'grazmeso_c',1, 'm', 4, + 'respmeso',1, 'm', 4, + 'respmacro',1, 'm', 4, + 'respmicro',1, 'm', 4, + 'calcdiss',1, 'm', 4, + 'calcif',1, 'm', 4, + 'aggn',1, 'm', 4, + 'aggd',1, 'm', 4, + 'aggc',1, 'm', 4, + 'docexn',1, 'm', 4, + 'docexd',1, 'm', 4, + 'docexc',1, 'm', 4, + 'respn',1, 'm', 4, + 'respd',1, 'm', 4, + 'respc',1, 'm', 4, + 'NPPp ',1, 'm', 4, + 'GPPp ',1, 'm', 4, + 'NNAp ',1, 'm', 4, + 'Chldegp ',1, 'm', 4, + 'grazmeso_p',1, 'm', 4, + 'aggp ',1, 'm', 4, + 'respp ',1, 'm', 4, + 'docexp ',1, 'm', 4, +/ diff --git a/bin_run1_20240618/namelist.oce b/bin_run1_20240618/namelist.oce new file mode 100644 index 000000000..f42184e4c --- /dev/null +++ b/bin_run1_20240618/namelist.oce @@ -0,0 +1,97 @@ +! The namelist file for the finite-volume ocean model + +&oce_dyn +C_d=0.0025 ! Bottom drag, nondimensional +gamma0=0.003 ! [m/s], backgroung viscosity= gamma0*len, it should be as small as possible (keep it < 0.01 m/s). +gamma1=0.1 ! [nodim], for computation of the flow aware viscosity +gamma2=0.285 ! [s/m], is only used in easy backscatter option +Div_c=.5 ! the strength of the modified Leith viscosity, nondimensional, 0.3 -- 1.0 +Leith_c=.05 ! the strength of the Leith viscosity +visc_option=5 ! 1=Harmonic Leith parameterization; + ! 2=Laplacian+Leith+biharmonic background + ! 3=Biharmonic Leith parameterization + ! 4=Biharmonic flow aware + ! 5=Kinematic (easy) Backscatter + ! 6=Biharmonic flow aware (viscosity depends on velocity Laplacian) + ! 7=Biharmonic flow aware (viscosity depends on velocity differences) + ! 8=Dynamic Backscatter +easy_bs_return= 1.5 ! coefficient for returned sub-gridscale energy, to be used with visc_option=5 (easy backscatter) +A_ver= 1.e-4 ! Vertical viscosity, m^2/s +scale_area=5.8e9 ! Visc. and diffus. are for an element with scale_area +mom_adv=2 ! 1=vector CV, p1 vel, 2=sca. CV, 3=vector inv. +free_slip=.false. ! Switch on free slip +i_vert_visc=.true. +w_split=.false. +w_max_cfl=1.0 ! maximum allowed CFL criteria in vertical (0.5 < w_max_cfl < 1.) ! in older FESOM it used to be w_exp_max=1.e-3 +SPP=.false. ! Salt Plume Parameterization +Fer_GM=.true. ! to swith on/off GM after Ferrari et al. 2010 +K_GM_max = 2000.0 ! max. GM thickness diffusivity (m2/s) +K_GM_min = 2.0 ! max. GM thickness diffusivity (m2/s) +K_GM_bvref = 2 ! def of bvref in ferreira scaling 0=srf,1=bot mld,2=mean over mld,3=weighted mean over mld +K_GM_rampmax = -1.0 ! Resol >K_GM_rampmax[km] GM on +K_GM_rampmin = -1.0 ! Resol TB04 mixing +momix_lat = -50.0 ! latitidinal treshhold for TB04, =90 --> global +momix_kv = 0.01 ! PP/KPP, mixing coefficient within MO length +use_instabmix = .true. ! enhance convection in case of instable stratification +instabmix_kv = 0.1 +use_windmix = .false. ! enhance mixing trough wind only for PP mixing (for stability) +windmix_kv = 1.e-3 +windmix_nl = 2 + +smooth_bh_tra =.false. ! use biharmonic diffusion (filter implementation) for tracers +gamma0_tra = 0.0005 ! gammaX_tra are analogous to those in the dynamical part +gamma1_tra = 0.0125 +gamma2_tra = 0. + +diff_sh_limit=5.0e-3 ! for KPP, max diff due to shear instability +Kv0_const=.true. +double_diffusion=.false. ! for KPP,dd switch +K_ver=1.0e-5 +K_hor=3000. +surf_relax_T=0.0 +surf_relax_S=1.929e-06 ! 50m/300days 6.43e-07! m/s 10./(180.*86400.) +balance_salt_water =.true. ! balance virtual-salt or freshwater flux or not +clim_relax=0.0 ! 1/s, geometrical information has to be supplied +ref_sss_local=.true. +ref_sss=34. +i_vert_diff =.true. ! true +tra_adv_hor ='MFCT' !'MUSCL', 'UPW1' +tra_adv_ver ='QR4C' !'QR4C', 'CDIFF', 'UPW1' +tra_adv_lim ='FCT' !'FCT', 'NONE' (default) +tra_adv_ph = 1. ! a parameter to be used in horizontal advection (for MUSCL it is the fraction of fourth-order contribution in the solution) +tra_adv_pv = 1. ! a parameter to be used in horizontal advection (for QR4C it is the fraction of fourth-order contribution in the solution) +! Implemented trassers (3d restoring): +! 301 - Fram strait. +! 302 - Bering Strait +! 303 - BSO +num_tracers=38 ! NEW: changed from 35 to 38 (Phaeo) ! NEW 3Zoo: changed from 33 to 35 +tracer_ID =0,1,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036 ! NEW: added 1032,1033,1034, NEW 3Zoo: added 1035, 1036 +/ + +&oce_init3d ! initial conditions for tracers +!n_ic3d = 2 ! number of tracers to initialize +!idlist = 1, 0 ! their IDs (0 is temperature, 1 is salinity, etc.). The reading order is defined here! +!filelist = 'phc3.0_winter.nc', 'phc3.0_winter.nc' ! list of files in ClimateDataPath to read (one file per tracer), same order as idlist +!varlist = 'salt', 'temp' ! variables to read from specified files +n_ic3d = 8 ! number of tracers to initialize +idlist = 1019, 1022, 1018, 1003, 1002, 1001, 1, 0 +filelist = 'fe_pisces_opa_eq_init_3D_changed_name.nc', 'woa18_all_o00_01_mmol_fesom2.nc', 'woa13_all_i00_01_fesom2.nc', 'GLODAPv2.2016b.TAlk_fesom2_mmol_fix_z_Fillvalue.nc', 'GLODAPv2.2016b.TCO2_fesom2_mmol_fix_z_Fillvalue.nc', 'woa13_all_n00_01_fesom2.nc', 'phc3.0_winter.nc', 'phc3.0_winter.nc' +varlist = 'Fe', 'oxygen_mmol', 'i_an', 'TAlk_mmol', 'TCO2_mmol', 'n_an', 'salt', 'temp' +t_insitu = .true. ! if T is insitu it will be converted to potential after reading it +/ diff --git a/bin_run1_20240618/namelist.recom b/bin_run1_20240618/namelist.recom new file mode 100755 index 000000000..7715bf491 --- /dev/null +++ b/bin_run1_20240618/namelist.recom @@ -0,0 +1,380 @@ +This is the namelist recom + +&precom_diag_list +ldiag_carbon =.false. +ldiag_silicate =.false. +recom_diag_freq = 1 !only required for d,h,s cases, y, m take 1 +recom_diag_freq_unit = 'm' !output period: y, d, h, s +recom_logfile_outfreq = 2700 !in recom logfile info. output frequency, # steps +/ + +&pavariables +use_REcoM =.true. +REcoM_restart =.true. + +bgc_num = 36 !33 !24 !38 !22 +diags3d_num = 31 ! Number of diagnostic 3d tracers to be saved +bgc_base_num = 22 ! standard tracers +VDet = 20.d0 ! Sinking velocity, constant through the water column and positive downwards +VDet_zoo2 = 200.d0 ! Sinking velocity, constant through the water column +VPhy = 0.d0 !!! If the number of sinking velocities are different from 3, code needs to be changed !!! +VDia = 0.d0 +VCocco = 0.d0 +VPhaeo = 0.d0 +allow_var_sinking = .true. +biostep = 1 ! Number of times biology should be stepped forward for each time step +REcoM_Geider_limiter = .false. ! Decides what routine should be used to calculate limiters in sms +REcoM_Grazing_Variable_Preference = .true. ! Decides if grazing should have preference for phyN or DiaN +Grazing_detritus = .true. +het_resp_noredfield = .true. ! Decides respiratation of copepod group +diatom_mucus = .true. ! Decides nutrient limitation effect on aggregation +O2dep_remin = .true. ! O2remin Add option for O2 dependency of organic matter remineralization +use_ballasting = .true. ! BALL +use_density_scaling = .true. ! BALL +use_viscosity_scaling = .true. ! BALL +OmegaC_diss = .true. ! DISS Use OmegaC from Mocsy to compute calcite dissolution (after Aumont et al. 2015 and Gehlen et al. 2007) +CO2lim = .true. ! CO2 dependence of growth and calcification +Diags = .true. +constant_CO2 = .true. +UseFeDust = .true. ! Turns dust input of iron off when set to.false. +UseDustClim = .true. +UseDustClimAlbani = .true. ! Use Albani dustclim field (If it is false Mahowald will be used) +use_photodamage = .true. ! use Alvarez et al (2018) for chlorophyll degradation +HetRespFlux_plus = .true. !MB More stable computation of zooplankton respiration fluxes adding a small number to HetN +REcoMDataPath = '/albedo/work/projects/MarESys/ogurses/input/mesh_CORE2_finaltopo_mean/' !'/work/ollie/projects/MarESys/forcing/CORE2mesh/' +restore_alkalinity = .true. +useRivers = .false. +useRivFe = .false. ! When set to true, riverine Fe source is activated +useErosion = .false. +NitrogenSS = .false. ! When set to true, external sources and sinks of nitrogen are activated (Riverine, aeolian and denitrification) +useAeolianN = .false. ! When set to true, aeolian nitrogen deposition is activated +firstyearoffesomcycle = 1958 ! The first year of the actual physical forcing (e.g. JRA-55) used +lastyearoffesomcycle = 2020 ! Last year of the actual physical forcing used +numofCO2cycles = 1 ! Number of cycles of the forcing planned +currentCO2cycle = 1 ! Which CO2 cycle we are currently running +DIC_PI = .true. +Nmocsy = 1 ! Length of the vector that is passed to mocsy (always one for recom) +recom_debug =.true. +ciso =.false. ! Main switch to enable/disable carbon isotopes (13|14C) +benthos_num = 4 ! number of benthic BGC tracers -> 8 if (ciso == .true.) otherwise -> 4 +use_MEDUSA = .false. ! Main switch for the sediment model MEDUSA +sedflx_num = 0 ! if 0: no file from MEDUSA is read but default sediment +bottflx_num = 4 ! if ciso&ciso_14: =8; if .not.ciso_14: =6; no ciso: =4 +use_atbox = .false. +add_loopback = .false. ! add loopback fluxes through rivers to the surface +lb_tscale = 1.0 ! /year: fraction of loopback fluxes yearly added to the surface +/ + +&pasinking +Vdet_a = 0.0288 ! [1/day] +Vcalc = 0.0144 ! [1/day] +/ + +&painitialization_N +cPhyN = 0.2d0 +cHetN = 0.2d0 +cZoo2N = 0.2d0 +/ + +&paArrhenius +recom_Tref = 288.15d0 ! [K] +C2K = 273.15d0 ! Conversion from degrees C to K +Ae = 4500.d0 ! [K] Slope of the linear part of the Arrhenius function +reminSi = 0.02d0 +k_o2_remin = 15.d0 ! NEW O2remin mmol m-3; Table 1 in Cram 2018 cites DeVries & Weber 2017 for a range of 0-30 mmol m-3 +/ + +&palimiter_function +NMinSlope = 50.d0 +SiMinSlope = 1000.d0 +NCmin = 0.04d0 +NCmin_d = 0.04d0 +NCmin_c = 0.04d0 ! NEW +NCmin_p = 0.04d0 ! NEW for Phaeocystis +SiCmin = 0.04d0 +k_Fe = 0.04d0 +k_Fe_d = 0.12d0 +k_Fe_c = 0.09d0 ! NEW +k_Fe_p = 0.35d0 ! NEW for Phaeocystis (to be tuned) +k_si = 4.d0 +P_cm = 3.0d0 ! [1/day] Rate of C-specific photosynthesis +P_cm_d = 3.5d0 +P_cm_c = 2.8d0 ! NEW +P_cm_p = 3.2d0 ! NEW for Phaeocystis (to be tuned) +/ + +&palight_calculations +k_w = 0.04d0 ! [1/m] Light attenuation coefficient +a_chl = 0.03d0 ! [1/m * 1/(mg Chl)] Chlorophyll specific attenuation coefficients +/ + +&paphotosynthesis +alfa = 0.14d0 ! [(mmol C*m2)/(mg Chl*W*day)] +alfa_d = 0.19d0 ! An initial slope of the P-I curve +alfa_c = 0.10d0 ! NEW +alfa_p = 0.12d0 ! NEW for Phaeocystis (to be tuned) +parFrac = 0.43d0 +/ + +&paassimilation +V_cm_fact = 0.7d0 ! scaling factor for temperature dependent maximum of C-specific N-uptake +V_cm_fact_d = 0.7d0 +V_cm_fact_c = 0.7d0 ! NEW +V_cm_fact_p = 0.7d0 ! NEW for Phaeocystis +NMaxSlope = 1000.d0 ! Max slope for limiting function +SiMaxSlope = 1000.d0 +NCmax = 0.2d0 ! [mmol N/mmol C] Maximum cell quota of nitrogen (N:C) +NCmax_d = 0.2d0 +NCmax_c = 0.15d0 ! NEW +NCmax_p = 0.1d0 ! NEW for Phaeocystis (to be tuned) +SiCmax = 0.8d0 +NCuptakeRatio = 0.2d0 ! [mmol N/mmol C] Maximum uptake ratio of N:C +NCUptakeRatio_d = 0.2d0 +NCUptakeRatio_c = 0.2d0 ! NEW +NCUptakeRatio_p = 0.2d0 ! NEW for Phaeocystis +SiCUptakeRatio = 0.2d0 +k_din = 0.55d0 ! [mmol N/m3] Half-saturation constant for nitrate uptake +k_din_d = 1.0d0 +k_din_c = 0.9d0 ! NEW +k_din_p = 0.55d0 ! NEW for Phaeocystis (to be tuned) +Chl2N_max = 3.15d0 ! [mg CHL/mmol N] Maximum CHL a : N ratio = 0.3 gCHL gN^-1 +Chl2N_max_d = 4.2d0 +Chl2N_max_c = 3.5d0 ! NEW +Chl2N_max_p = 5.0d0 ! NEW for Phaeocystis +res_phy = 0.01d0 ! [1/day] Maintenance respiration rate constant +res_phy_d = 0.01d0 +res_phy_c = 0.01d0 ! NEW +res_phy_p = 0.01d0 ! NEW for phaeocystis +biosynth = 2.33d0 ! [mmol C/mmol N] Cost of biosynthesis +biosynthSi = 0.d0 +/ + +&pairon_chem +totalligand = 1.d0 ! [mumol/m3] order 1. Total free ligand +ligandStabConst = 100.d0 ! [m3/mumol] order 100. Ligand-free iron stability constant +/ + +&pazooplankton +graz_max = 0.31d0 ! [mmol N/(m3 * day)] Maximum grazing loss parameter +epsilonr = 0.09d0 ! [(mmol N)2 /m6] Half saturation constant for grazing loss +res_het = 0.028d0 ! [1/day] Respiration by heterotrophs and mortality (loss to detritus) +Redfield = 6.625 ! [mmol C/mmol N] Redfield ratio of C:N = 106:16 +loss_het = 0.04d0 ! [1/day] Temperature dependent N degradation of extracellular organic N (EON) +pzDia = 1.0d0 ! Maximum diatom preference +sDiaNsq = 0.d0 +pzPhy = 0.5d0 !1.0d0 ! Maximum nano-phytoplankton preference (NEW: 3/12) +sPhyNsq = 0.d0 +pzCocco = 0.666d0 ! NEW (8/12) +sCoccoNsq = 0.d0 ! NEW +pzPhaeo = 0.5d0 ! NEW for Phaeocystis +sPhaeoNsq = 0.d0 ! NEW for Phaeocystis +pzMicZoo = 1.0d0 ! NEW 3Zoo Maximum nano-phytoplankton preference +sMicZooNsq = 0.d0 ! NEW 3Zoo +tiny_het = 1.d-5 ! for more stable computation of HetRespFlux (_plus). Value can be > tiny because HetRespFlux ~ hetC**2. +/ + +&pasecondzooplankton +graz_max2 = 0.1d0 ! [mmol N/(m3 * day)] Maximum grazing loss parameter +epsilon2 = 0.0144d0 ! [(mmol N)2 /m6] Half saturation constant for grazing loss +res_zoo2 = 0.0107d0 ! [1/day] Respiration by heterotrophs and mortality (loss to detritus) +loss_zoo2 = 0.003d0 ! [1/day] Temperature dependent N degradation of extracellular organic N (EON) +fecal_rate_n = 0.104d0 ! [1/day] Temperature dependent N degradation of \ +fecal_rate_c = 0.236d0 +fecal_rate_n_mes = 0.25d0 ! NEW 3Zoo +fecal_rate_c_mes = 0.32d0 ! NEW 3Zoo +pzDia2 = 1.5d0 ! Maximum diatom preference +sDiaNsq2 = 0.d0 +pzPhy2 = 0.5d0 ! Maximum diatom preference +sPhyNsq2 = 0.d0 +pzCocco2 = 0.5d0 ! NEW +sCoccoNsq2 = 0.d0 ! NEW +pzPhaeo2 = 0.5d0 ! NEW for Phaeocystis +sPhaeoNsq2 = 0.d0 ! NEW for Phaeocystis +pzHet = 1.5d0 ! Maximum diatom preference +sHetNsq = 0.d0 +pzMicZoo2 = 1.0d0 ! NEW 3Zoo Maximum nano-phytoplankton preference +sMicZooNsq2 = 0.d0 +t1_zoo2 = 28145.d0 ! Krill temp. function constant1 +t2_zoo2 = 272.5d0 ! Krill temp. function constant2 +t3_zoo2 = 105234.d0 ! Krill temp. function constant3 +t4_zoo2 = 274.15d0 ! Krill temp. function constant3 +/ + +&pathirdzooplankton +graz_max3 = 0.46d0 ! NEW 3Zoo [mmol N/(m3 * day)] Maximum grazing loss parameter +epsilon3 = 0.64d0 ! NEW 3Zoo [(mmol N)2 /m6] Half saturation constant for grazing loss +loss_miczoo = 0.01d0 ! NEW 3Zoo [1/day] Temperature dependent N degradation of extracellular organic N (EON) +res_miczoo = 0.01d0 ! NEW 3Zoo [1/day] Respiration by heterotrophs and mortality (loss to detritus) +pzDia3 = 0.5d0 ! NEW 3Zoo Maximum diatom preference +sDiaNsq3 = 0.d0 ! NEW 3Zoo +pzPhy3 = 1.0d0 ! NEW 3Zoo Maximum nano-phytoplankton preference +sPhyNsq3 = 0.d0 ! NEW 3Zoo +pzCocco3 = 0.d0 ! NEW 3Zoo Maximum coccolithophore preference ! ATTENTION: This value needs to be tuned; I start with zero preference! +sCoccoNsq3 = 0.d0 ! NEW 3Zoo +pzPhaeo3 = 1.0d0 ! NEW for Phaeocystis +sPhaeoNsq3 = 0.d0 ! NEW for Phaeocystis +/ + +&pagrazingdetritus +pzDet = 0.5d0 ! Maximum small detritus prefence by first zooplankton +sDetNsq = 0.d0 +pzDetZ2 = 0.5d0 ! Maximum large detritus preference by first zooplankton +sDetZ2Nsq = 0.d0 +pzDet2 = 0.5d0 ! Maximum small detritus prefence by second zooplankton +sDetNsq2 = 0.d0 +pzDetZ22 = 0.5d0 ! Maximum large detritus preference by second zooplankton +sDetZ2Nsq2 = 0.d0 +/ + +&paaggregation +agg_PD = 0.165d0 ! [m3/(mmol N * day)] Maximum aggregation loss parameter for DetN +agg_PP = 0.015d0 ! [m3/(mmol N * day)] Maximum aggregation loss parameter for PhyN and DiaN (plankton) +/ + +&padin_rho_N +rho_N = 0.11d0 ! [1/day] Temperature dependent N degradation of extracellular organic N (EON) (Remineralization of DON) +/ + +&padic_rho_C1 +rho_C1 = 0.1d0 ! [1/day] Temperature dependent C degradation of extracellular organic C (EOC) +/ + +&paphytoplankton_N +lossN = 0.05d0 ! [1/day] Phytoplankton loss of organic N compounds +lossN_d = 0.05d0 +lossN_c = 0.05d0 ! NEW +lossN_p = 0.05d0 ! NEW for Phaeocystis +/ + +&paphytoplankton_C +lossC = 0.10d0 ! [1/day] Phytoplankton loss of carbon +lossC_d = 0.10d0 +lossC_c = 0.10d0 ! NEW +lossC_p = 0.10d0 ! NEW for Phaeocystis +/ + +&paphytoplankton_ChlA +deg_Chl = 0.25d0 !0.25d0 ! [1/day] +deg_Chl_d = 0.15d0 !0.15d0 +deg_Chl_c = 0.2d0 ! NEW (has been 0.5) +deg_Chl_p = 0.3d0 ! NEW for Phaeocystis + +/ + +&padetritus_N +gfin = 0.3d0 ! NEW 3Zoo [] Grazing efficiency (fraction of grazing flux into zooplankton pool) +grazEff2 = 0.8d0 ! [] Grazing efficiency (fraction of grazing flux into second zooplankton pool) +grazEff3 = 0.8d0 ! NEW 3Zoo [] Grazing efficiency (fraction of grazing flux into microzooplankton pool) +reminN = 0.165d0 ! [1/day] Temperature dependent remineralisation rate of detritus +/ + +&padetritus_C +reminC = 0.15d0 ! [1/day] Temperature dependent remineralisation rate of detritus +rho_c2 = 0.1d0 ! [1/day] Temperature dependent C degradation of TEP-C +/ + +&paheterotrophs +lossN_z = 0.1d0 +lossC_z = 0.1d0 +/ + +&paseczooloss +lossN_z2 = 0.02d0 +lossC_z2 = 0.02d0 +/ + +&pathirdzooloss +lossN_z3 = 0.05d0 ! NEW 3Zoo +lossC_z3 = 0.05d0 ! NEW 3Zoo +/ + +&paco2lim ! NEW +Cunits = 976.5625 ! Conversion factor between [mol/m3] (model) and [umol/kg] (function): (1000 * 1000) / 1024 +a_co2_phy = 1.162e+00 ! [dimensionless] +a_co2_dia = 1.040e+00 ! [dimensionless] +a_co2_cocco = 1.109e+00 ! [dimensionless] +a_co2_phaeo = 1.162e+00 ! [dimensionless] Phaeocystis +a_co2_calc = 1.102e+00 ! [dimensionless] +b_co2_phy = 4.888e+01 ! [mol/kg] +b_co2_dia = 2.890e+01 ! [mol/kg] +b_co2_cocco = 3.767e+01 ! [mol/kg] +b_co2_phaeo = 4.888e+01 ! [mol/kg] Phaeocystis +b_co2_calc = 4.238e+01 ! [mol/kg] +c_co2_phy = 2.255e-01 ! [kg/mol] +c_co2_dia = 8.778e-01 ! [kg/mol] +c_co2_cocco = 3.912e-01 ! [kg/mol] +c_co2_phaeo = 2.255e-01 ! [kg/mol] Phaeocystis +c_co2_calc = 7.079e-01 ! [kg/mol] +d_co2_phy = 1.023e+07 ! [kg/mol] +d_co2_dia = 2.640e+06 ! [kg/mol] +d_co2_cocco = 9.450e+06 ! [kg/mol] +d_co2_phaeo = 1.023e+07 ! [kg/mol] Phaeocystis +d_co2_calc = 1.343e+07 ! [kg/mol] +/ + +&pairon +Fe2N = 0.033d0 ! Fe2C * 6.625 +Fe2N_benthos = 0.15d0 ! test, default was 0.14 Fe2C_benthos * 6.625 - will have to be tuned. [umol/m2/day] +kScavFe = 0.07d0 +dust_sol = 0.02d0 ! Dissolution of Dust for bioavaliable +RiverFeConc = 100 +/ + +&pacalc +calc_prod_ratio = 0.02 +calc_diss_guts = 0.5d0 ! set to zero if OmegaC_diss is set to false +calc_diss_rate = 0.005714d0 ! 20.d0/3500.d0 +calc_diss_rate2 = 0.005714d0 +calc_diss_omegac = 0.197d0 ! NEW DISS Value from Aumont et al. 2015, will be used with OmegaC_diss flag +calc_diss_exp = 1.d0 ! NEW DISS Exponent in the dissolution rate of calcite, will be used with OmegaC_diss flag +/ + +&pabenthos_decay_rate +decayRateBenN = 0.005d0 +decayRateBenC = 0.005d0 +decayRateBenSi = 0.005d0 +q_NC_Denit = 0.86d0 ! N:C quota of the denitrification process +/ + +&paco2_flux_param +permil = 0.000000976 ! 1.e-3/1024.5d0 ! Converting DIC from [mmol/m3] to [mol/kg] +permeg = 1.e-6 ! [atm/uatm] Changes units from uatm to atm +!X1 = exp(-5.d0*log(10.d0)) ! Lowest ph-value = 7.7 (phlo) +!X2 = exp(-9.d0*log(10.d0)) ! Highest ph-value = 9.5 (phhi) +Xacc = 1.e-12 ! Accuracy for ph-iteration (phacc) +CO2_for_spinup = 278.d0 ! [uatm] Atmospheric partial pressure of CO2 +/ + +&paalkalinity_restoring +surf_relax_Alk = 3.2e-07 !10.d0/31536000.d0 +/ + +&paballasting +rho_POC = 1033.d0 ! kg m-3; density of POC (see Table 1 in Cram et al., 2018) +rho_PON = 1033.d0 ! kg m-3; density of PON (see Table 1 in Cram et al., 2018) +rho_CaCO3 = 2830.d0 ! kg m-3; density of CaCO3 (see Table 1 in Cram et al., 2018) +rho_opal = 2090.d0 ! kg m-3; density of Opal (see Table 1 in Cram et al., 2018) +rho_ref_part = 1230.d0 ! kg m-3; reference particle density (see Cram et al., 2018) +rho_ref_water = 1027.d0 ! kg m-3; reference seawater density (see Cram et al., 2018) +visc_ref_water = 0.00158d0 ! kg m-1 s-1; reference seawater viscosity, at Temp=4 degC (see Cram et al., 2018) +w_ref1 = 10.d0 ! m s-1; reference sinking velocity of small detritus +w_ref2 = 200.d0 ! m s-1; reference sinking velocity of large detritus +depth_scaling1 = 0.01d0 ! s-1; factor to increase sinking speed of det1 with depth, set to 0 if not wanted +depth_scaling2 = 0.d0 ! s-1; factor to increase sinking speed of det2 with depth, set to 0 if not wanted +max_sinking_velocity = 250.d0 ! d-1; for numerical stability, set a maximum possible sinking velocity here (applies to both detritus classes) +/ + +&paciso +ciso_init = .false. ! initial fractionation of bulk organic matter +ciso_14 = .true. ! include inorganic radiocarbon +ciso_organic_14 = .false. ! include organic radiocarbon +lambda_14 = 3.8561e-12 ! corresponding to 1 year = 365.00 days +delta_CO2_13 = -6.61 ! atmospheric d13C (permil), global-mean value +big_delta_CO2_14(1) = 0. ! atmospheric D14C (permil), northern hemisphere polewards of 30°N +big_delta_CO2_14(2) = 0. ! atmospheric D14C (permil), (sub) tropical zone 30°N - 30°S +big_delta_CO2_14(3) = 0. ! atmospheric D14C (permil), southern hemisphere polewards of 30°S +atbox_spinup = .true. +cosmic_14_init = 2.0 +/ + + diff --git a/src/int_recom/recom_extra.F90 b/src/int_recom/recom_extra.F90 index 9a759a3e4..5ae315faa 100755 --- a/src/int_recom/recom_extra.F90 +++ b/src/int_recom/recom_extra.F90 @@ -20,14 +20,14 @@ subroutine Depth_calculations(n,Nn,wF,zF,thick,recipthick,mesh) implicit none ! Input type(t_mesh), intent(in) , target :: mesh - Integer, intent(in) :: Nn ! Total number of nodes + Integer, intent(in) :: Nn ! Total number of nodes ! Output real(kind=8),dimension(mesh%nl),intent(out) :: zF ! [m] Depth of vertical fluxes real(kind=8),dimension(mesh%nl-1),intent(out) :: thick ! [m] Distance between two nodes = thickness real(kind=8),dimension(mesh%nl-1),intent(out) :: recipthick ! [1/m] reciprocal of thickness - real(kind=8),dimension(mesh%nl,5),intent(out) :: wF ! [m/day] Velocities of fluxes at the border of the control volumes + real(kind=8),dimension(mesh%nl,6),intent(out) :: wF ! [m/day] Velocities of fluxes at the border of the control volumes Integer :: k, n ! Index for depth #include "../associate_mesh.h" ! ====================================================================================== @@ -52,6 +52,7 @@ subroutine Depth_calculations(n,Nn,wF,zF,thick,recipthick,mesh) wF(2:Nn,ivdet) = VDet wF(2:Nn,ivdetsc) = VDet_zoo2 wF(2:Nn,ivcoc) = VCocco ! NEW + wF(2:Nn,ivpha) = VPhaeo ! Phaeocystis wF(1,:) = 0.d0 wF(Nn+1,:) = 0.d0 @@ -95,7 +96,7 @@ subroutine Cobeta(mesh) use mod_MESH use g_comm_auto Implicit none - + ! Declarations Real(kind=8) :: yearfrac ! The fraction of the year that has passed [0 1] Real(kind=8) :: yDay ! yearfrac in radians [0 2*pi] @@ -104,7 +105,7 @@ subroutine Cobeta(mesh) integer :: n ! Constants - Real(kind=8) :: nWater = 1.33 + Real(kind=8) :: nWater = 1.33 type(t_mesh), intent(in), target :: mesh #include "../associate_mesh.h" ! @@ -113,17 +114,17 @@ subroutine Cobeta(mesh) yearfrac = mod(real(daynew),real(ndpyr))/real(ndpyr) yDay = 2 * pi * yearfrac declination = 0.006918 & - - 0.399912 * cos( yDay) & - + 0.070257 * sin( yDay) & - - 0.006758 * cos(2 * yDay) & - + 0.000907 * sin(2 * yDay) & - - 0.002697 * cos(3 * yDay) & - + 0.001480 * sin(3 * yDay) + - 0.399912 * cos( yDay) & + + 0.070257 * sin( yDay) & + - 0.006758 * cos(2 * yDay) & + + 0.000907 * sin(2 * yDay) & + - 0.002697 * cos(3 * yDay) & + + 0.001480 * sin(3 * yDay) do n=1, myDim_nod2D!+eDim_nod2D cosAngleNoon = sin(geo_coord_nod2D(2,n)) * sin(declination) & - + cos(geo_coord_nod2D(2,n)) * cos(declination) + + cos(geo_coord_nod2D(2,n)) * cos(declination) cosAI(n) = sqrt(1-(1-cosAngleNoon**2)/nWater**2) end do @@ -148,7 +149,7 @@ subroutine Atm_input(mesh) #include "netcdf.inc" real(kind=8), allocatable :: ncdata(:) - integer :: status, ncid, varid + integer :: status, ncid, varid character(300) :: Ironname, CO2filename, DustNfilename character(15) :: Ironvari, CO2vari, Nvari integer, dimension(2) :: istart, icount @@ -277,7 +278,7 @@ subroutine Atm_input(mesh) stop call par_ex endif - + ! ! data allocate(ncdata(12)) status=nf_inq_varid(ncid, CO2vari, varid) @@ -730,7 +731,7 @@ subroutine River_input(mesh) #include "netcdf.inc" real(kind=8), allocatable :: ncdata(:) - integer :: status, ncid, varid + integer :: status, ncid, varid character(300) :: Riverfilename integer, dimension(2) :: istart, icount integer :: CO2start, CO2count @@ -865,7 +866,7 @@ subroutine Erosion_input(mesh) #include "netcdf.inc" real(kind=8), allocatable :: ncdata(:) - integer :: status, ncid, varid + integer :: status, ncid, varid character(300) :: Erosionfilename integer, dimension(2) :: istart, icount integer :: CO2start, CO2count @@ -901,7 +902,7 @@ subroutine Erosion_input(mesh) ! write(*,*) mype, 'ErosionTON2D', maxval(ErosionTON2D(:)), minval(ErosionTON2D(:)) ! No silicates in erosion, we convert from nitrogen with redfieldian ratio - ErosionTSi2D=ErosionTON2D * 16/15 + ErosionTSi2D=ErosionTON2D * 16/15 ! write(*,*) mype, 'ErosionTSi2D', maxval(ErosionTSi2D(:)), minval(ErosionTSi2D(:)) else @@ -923,7 +924,7 @@ subroutine Erosion_input(mesh) ! write(*,*) mype, 'ErosionTON2D', maxval(ErosionTON2D(:)), minval(ErosionTON2D(:)) ! No silicates in erosion, we convert from nitrogen with redfieldian ratio - ErosionTSi2D=ErosionTON2D * 16/15 + ErosionTSi2D=ErosionTON2D * 16/15 ! write(*,*) mype, 'ErosionTSi2D', maxval(ErosionTSi2D(:)), minval(ErosionTSi2D(:)) end if end if diff --git a/src/int_recom/recom_forcing.F90 b/src/int_recom/recom_forcing.F90 index 16a562b6d..ab325ccdc 100755 --- a/src/int_recom/recom_forcing.F90 +++ b/src/int_recom/recom_forcing.F90 @@ -39,8 +39,8 @@ subroutine REcoM_Forcing(zNodes, n, Nn, state, SurfSW, Loc_slp, Temp, Sali, Sali Real(kind=8) :: Latr Integer :: Nn ! Total number of nodes - Real(kind=8),dimension(mesh%nl-1) :: zNodes ! Depth of nodes zr(1:nzmax) = Z_3d_n(1:nzmax,n) - Real(kind=8),dimension(mesh%nl-1,bgc_num) :: state + Real(kind=8),dimension(mesh%nl-1) :: zNodes ! Depth of nodes zr(1:nzmax) = Z_3d_n(1:nzmax,n) + Real(kind=8),dimension(mesh%nl-1,bgc_num) :: state Real(kind=8) :: SurfSW ! [W/m2] ShortWave radiation at surface Real(kind=8) :: Loc_slp ! [Pa] se-level pressure @@ -61,7 +61,7 @@ subroutine REcoM_Forcing(zNodes, n, Nn, state, SurfSW, Loc_slp, Temp, Sali, Sali ! Subroutine Depth Real(kind=8),dimension(mesh%nl) :: zF ! [m] Depth of fluxes - Real(kind=8),dimension(mesh%nl,5) :: SinkVel ! [m/day] + Real(kind=8),dimension(mesh%nl,6) :: SinkVel ! [m/day] Real(kind=8),dimension(mesh%nl-1) :: thick ! [m] Vertical distance between two nodes = Thickness Real(kind=8),dimension(mesh%nl-1) :: recipthick ! [1/m] reciprocal of thick @@ -103,6 +103,8 @@ subroutine REcoM_Forcing(zNodes, n, Nn, state, SurfSW, Loc_slp, Temp, Sali, Sali #if defined (__coccos) tiny_N_c = tiny_chl/chl2N_max_c ! 0.00001/ 3.5d0 NEW tiny_C_c = tiny_N_c/NCmax_c ! NCmax_c = 0.15d0 NEW + tiny_N_p = tiny_chl/chl2N_max_p ! 0.00001/ 3.5d0 Phaeocystis + tiny_C_p = tiny_N_p/NCmax_p ! NCmax_c = 0.15d0 Phaeocystis #endif call Cobeta(mesh) @@ -244,6 +246,9 @@ subroutine REcoM_Forcing(zNodes, n, Nn, state, SurfSW, Loc_slp, Temp, Sali, Sali state(1:nn,icchl) = max(tiny_chl,state(1:nn,icchl)) state(1:nn,icocn) = max(tiny_N_c,state(1:nn,icocn)) state(1:nn,icocc) = max(tiny_C_c,state(1:nn,icocc)) + state(1:nn,iphachl)= max(tiny_chl,state(1:nn,iphachl)) ! Phaeocystis + state(1:nn,iphan) = max(tiny_N_p,state(1:nn,iphan)) + state(1:nn,iphac) = max(tiny_C_p,state(1:nn,iphac)) #endif #if defined (__3Zoo2Det) @@ -327,6 +332,10 @@ subroutine REcoM_Forcing(zNodes, n, Nn, state, SurfSW, Loc_slp, Temp, Sali, Sali locGPPc = sum(vertGPPc(1:nn) * thick(1:nn)) locNNAc = sum(vertNNAc(1:nn) * thick(1:nn)) locChldegc = sum(vertChldegc(1:nn) * thick(1:nn)) + locNPPp = sum(vertNPPp(1:nn) * thick(1:nn)) ! Phaeocystis + locGPPp = sum(vertGPPp(1:nn) * thick(1:nn)) + locNNAp = sum(vertNNAp(1:nn) * thick(1:nn)) + locChldegp = sum(vertChldegp(1:nn) * thick(1:nn)) #endif diff --git a/src/int_recom/recom_init.F90 b/src/int_recom/recom_init.F90 index 6a68c96d7..613e1ff04 100644 --- a/src/int_recom/recom_init.F90 +++ b/src/int_recom/recom_init.F90 @@ -195,6 +195,14 @@ subroutine recom_init(mesh) NNAc = 0.d0 allocate(Chldegc(node_size)) Chldegc = 0.d0 + allocate(NPPp(node_size)) + NPPp = 0.d0 + allocate(GPPp(node_size)) + GPPp = 0.d0 + allocate(NNAp(node_size)) + NNAp = 0.d0 + allocate(Chldegp(node_size)) + Chldegp = 0.d0 allocate(grazmeso_tot(node_size)) grazmeso_tot = 0.d0 allocate(grazmeso_n(node_size)) @@ -203,6 +211,8 @@ subroutine recom_init(mesh) grazmeso_d = 0.d0 allocate(grazmeso_c(node_size)) grazmeso_c = 0.d0 + allocate(grazmeso_p(node_size)) + grazmeso_p = 0.d0 allocate(grazmeso_det(node_size)) grazmeso_det = 0.d0 allocate(grazmeso_mic(node_size)) @@ -217,6 +227,8 @@ subroutine recom_init(mesh) grazmacro_d = 0.d0 allocate(grazmacro_c(node_size)) grazmacro_c = 0.d0 + allocate(grazmacro_p(node_size)) + grazmacro_p = 0.d0 allocate(grazmacro_mes(node_size)) grazmacro_mes = 0.d0 allocate(grazmacro_det(node_size)) @@ -233,6 +245,8 @@ subroutine recom_init(mesh) grazmicro_d = 0.d0 allocate(grazmicro_c(node_size)) grazmicro_c = 0.d0 + allocate(grazmicro_p(node_size)) + grazmicro_p = 0.d0 !--- Allocate 3D diagnostics ! allocate(grazmeso_tot(nl-1,node_size)) ! Comment Miriam (02/2024): changed grazing output from 3D to 2D diagnostics ! grazmeso_tot(:,:) = 0.d0 @@ -258,24 +272,32 @@ subroutine recom_init(mesh) aggd(:,:) = 0.d0 allocate(aggc(nl-1,node_size)) aggc(:,:) = 0.d0 + allocate(aggp(nl-1,node_size)) + aggp(:,:) = 0.d0 allocate(docexn(nl-1,node_size)) docexn(:,:) = 0.d0 allocate(docexd(nl-1,node_size)) docexd(:,:) = 0.d0 allocate(docexc(nl-1,node_size)) docexc(:,:) = 0.d0 + allocate(docexp(nl-1,node_size)) + docexp(:,:) = 0.d0 allocate(respn(nl-1,node_size)) respn(:,:) = 0.d0 allocate(respd(nl-1,node_size)) respd(:,:) = 0.d0 allocate(respc(nl-1,node_size)) respc(:,:) = 0.d0 + allocate(respp(nl-1,node_size)) + respp(:,:) = 0.d0 allocate(NPPn3D(nl-1,node_size)) NPPn3D(:,:) = 0.d0 allocate(NPPd3D(nl-1,node_size)) NPPd3D(:,:) = 0.d0 allocate(NPPc3D(nl-1,node_size)) NPPc3D(:,:) = 0.d0 + allocate(NPPp3D(nl-1,node_size)) + NPPp3D(:,:) = 0.d0 end if @@ -520,16 +542,25 @@ subroutine recom_init(mesh) tr_arr(:,:,31) = tiny_chl/chl2N_max ! tiny ! tracer 31 = CoccoN tr_arr(:,:,32) = tiny_chl/chl2N_max/NCmax ! tiny * Redfield ! tracer 32 = CoccoC tr_arr(:,:,33) = tiny_chl ! tiny * 1.56d0 ! tracer 33 = CoccoChl + ! Phaeocystis + tr_arr(:,:,34) = tiny_chl/chl2N_max ! tiny ! tracer 34 = PhaeoN + tr_arr(:,:,35) = tiny_chl/chl2N_max/NCmax ! tiny * Redfield ! tracer 35 = PhaeoC + tr_arr(:,:,36) = tiny_chl ! tiny * 1.56d0 ! tracer 36 = PhaeoChl + #elif defined (__coccos) & !defined (__3Zoo2Det) if (mype==0 .and. my_fesom_group == 0) print *, "case_3p1z1d" tr_arr(:,:,25) = tiny_chl/chl2N_max ! tracer 25 = CoccoN tr_arr(:,:,26) = tiny_chl/chl2N_max/NCmax ! tracer 26 = CoccoC - tr_arr(:,:,27) = tiny_chl + tr_arr(:,:,27) = tiny_chl + ! Phaeocystis + tr_arr(:,:,28) = tiny_chl/chl2N_max ! tracer 25 = PhaeoN + tr_arr(:,:,29) = tiny_chl/chl2N_max/NCmax ! tracer 26 = PhaeoC + tr_arr(:,:,30) = tiny_chl ! tracer 27 = PhaeoChl #endif #if defined (__coccos) & defined (__3Zoo2Det) - tr_arr(:,:,34) = tiny ! tracer 34 = Zoo3N - tr_arr(:,:,35) = tiny * Redfield ! tracer 35 = Zoo3C + tr_arr(:,:,37) = tiny ! tracer 34 = Zoo3N + tr_arr(:,:,38) = tiny * Redfield ! tracer 35 = Zoo3C #elif !defined (__coccos) & defined (__3Zoo2Det) tr_arr(:,:,31) = tiny ! tracer 31 = Zoo3N tr_arr(:,:,32) = tiny * Redfield ! tracer 32 = Zoo3C diff --git a/src/int_recom/recom_main.F90 b/src/int_recom/recom_main.F90 index 6d55d6a3d..da9ce9fcc 100755 --- a/src/int_recom/recom_main.F90 +++ b/src/int_recom/recom_main.F90 @@ -20,7 +20,7 @@ subroutine recom(mesh) use g_rotate_grid use g_config use mod_MESH - use i_arrays ! a_ice, m_ice + use i_arrays ! a_ice, m_ice use o_param ! num_tracers use i_param use o_arrays @@ -224,7 +224,16 @@ subroutine recom(mesh) !#if defined (__coccos) ! allocate(vertgrazmeso_c(nl-1)) ! vertgrazmeso_c = 0.d0 +! allocate(vertgrazmeso_p(nl-1)) ! Phaeocystis +! vertgrazmeso_p = 0.d0 !#endif +!#if defined (__coccos) +! allocate(vertgrazmeso_c(nl-1)) +! vertgrazmeso_c = 0.d0 +! allocate(vertgrazmeso_p(nl-1)) ! Phaeocystis +! vertgrazmeso_p = 0.d0 +!#endif + allocate(vertrespmeso(nl-1)) vertrespmeso = 0.d0 @@ -256,6 +265,10 @@ subroutine recom(mesh) vertaggc = 0.d0 vertdocexc = 0.d0 vertrespc = 0.d0 + allocate(vertaggp(nl-1), vertdocexp(nl-1), vertrespp(nl-1)) ! Phaeocystis + vertaggp = 0.d0 + vertdocexp = 0.d0 + vertrespp = 0.d0 #endif !!---- Allocate 2D diagnostics @@ -277,6 +290,11 @@ subroutine recom(mesh) vertGPPc = 0.d0 vertNNAc = 0.d0 Chldegc = 0.d0 + allocate(vertNPPp(nl-1), vertGPPp(nl-1), vertNNAp(nl-1), vertChldegp(nl-1)) ! Phaeocystis + vertNPPp = 0.d0 + vertGPPp = 0.d0 + vertNNAp = 0.d0 + Chldegp = 0.d0 #endif if (Grazing_detritus) then @@ -287,6 +305,8 @@ subroutine recom(mesh) #if defined (__coccos) allocate(vertgrazmeso_c(nl-1)) vertgrazmeso_c = 0.d0 + allocate(vertgrazmeso_p(nl-1)) + vertgrazmeso_p = 0.d0 #endif allocate(vertgrazmeso_det(nl-1)) vertgrazmeso_det = 0.d0 @@ -301,6 +321,8 @@ subroutine recom(mesh) #if defined (__coccos) allocate(vertgrazmacro_c(nl-1)) vertgrazmacro_c = 0.d0 + allocate(vertgrazmacro_p(nl-1)) + vertgrazmacro_p = 0.d0 #endif allocate(vertgrazmacro_mes(nl-1), vertgrazmacro_det(nl-1), vertgrazmacro_mic(nl-1), vertgrazmacro_det2(nl-1)) vertgrazmacro_mes = 0.d0 @@ -314,6 +336,8 @@ subroutine recom(mesh) #if defined (__coccos) allocate(vertgrazmicro_c(nl-1)) vertgrazmicro_c = 0.d0 + allocate(vertgrazmicro_p(nl-1)) + vertgrazmicro_p = 0.d0 #endif #endif endif !Grazing_detritus @@ -358,6 +382,10 @@ subroutine recom(mesh) GPPc(n) = locGPPc NNAc(n) = locNNAc Chldegc(n) = locChldegc + NPPp(n) = locNPPp ! Phaeocystis + GPPp(n) = locGPPp + NNAp(n) = locNNAp + Chldegp(n) = locChldegp #endif if (Grazing_detritus) then @@ -367,6 +395,7 @@ subroutine recom(mesh) grazmeso_d(n) = locgrazmeso_d #if defined (__coccos) grazmeso_c(n) = locgrazmeso_c + grazmeso_p(n) = locgrazmeso_p #endif grazmeso_det(n) = locgrazmeso_det #if defined (__3Zoo2Det) @@ -381,6 +410,7 @@ subroutine recom(mesh) grazmacro_d(n) = locgrazmacro_d #if defined (__coccos) grazmacro_c(n) = locgrazmacro_c + grazmacro_p(n) = locgrazmacro_p #endif grazmacro_mes(n) = locgrazmacro_mes grazmacro_det(n) = locgrazmacro_det @@ -393,6 +423,7 @@ subroutine recom(mesh) grazmicro_d(n) = locgrazmicro_d #if defined (__coccos) grazmicro_c(n) = locgrazmicro_c + grazmicro_p(n) = locgrazmicro_p #endif #endif @@ -404,6 +435,7 @@ subroutine recom(mesh) ! grazmeso_d(1:nzmax,n) = vertgrazmeso_d(1:nzmax) !#if defined (__coccos) ! grazmeso_c(1:nzmax,n) = vertgrazmeso_c(1:nzmax) +! grazmeso_p(1:nzmax,n) = vertgrazmeso_p(1:nzmax) !#endif respmeso(1:nzmax,n) = vertrespmeso(1:nzmax) @@ -429,6 +461,10 @@ subroutine recom(mesh) docexc(1:nzmax,n) = vertdocexc(1:nzmax) respc(1:nzmax,n) = vertrespc(1:nzmax) NPPc3D(1:nzmax,n) = vertNPPc(1:nzmax) + aggp(1:nzmax,n) = vertaggp(1:nzmax) ! Phaeocystis + docexp(1:nzmax,n) = vertdocexp(1:nzmax) + respp(1:nzmax,n) = vertrespp(1:nzmax) + NPPp3D(1:nzmax,n) = vertNPPp(1:nzmax) #endif !!---- Deallocating 2D diagnostics @@ -436,12 +472,14 @@ subroutine recom(mesh) deallocate(vertNPPd,vertGPPd,vertNNAd,vertChldegd) #if defined (__coccos) deallocate(vertNPPc,vertGPPc,vertNNAc,vertChldegc) + deallocate(vertNPPp,vertGPPp,vertNNAp,vertChldegp) ! Phaeocystis #endif if (Grazing_detritus) then deallocate(vertgrazmeso_tot, vertgrazmeso_n, vertgrazmeso_d) #if defined (__coccos) deallocate(vertgrazmeso_c) + deallocate(vertgrazmeso_p) #endif deallocate(vertgrazmeso_det) #if defined (__3Zoo2Det) @@ -449,11 +487,13 @@ subroutine recom(mesh) deallocate(vertgrazmacro_tot, vertgrazmacro_n, vertgrazmacro_d) #if defined (__coccos) deallocate(vertgrazmacro_c) + deallocate(vertgrazmacro_p) #endif deallocate(vertgrazmacro_mes, vertgrazmacro_det, vertgrazmacro_mic, vertgrazmacro_det2) deallocate(vertgrazmicro_tot, vertgrazmicro_n, vertgrazmicro_d) #if defined (__coccos) deallocate(vertgrazmicro_c) + deallocate(vertgrazmicro_p) #endif #endif endif ! Grazing_detritus @@ -469,8 +509,10 @@ subroutine recom(mesh) deallocate(vertaggn, vertdocexn, vertrespn) deallocate(vertaggd, vertdocexd, vertrespd) #if defined (__coccos) -! deallocate(vertgrazmeso_c) + ! deallocate(vertgrazmeso_c) deallocate(vertaggc, vertdocexc, vertrespc) + ! deallocate(vertgrazmeso_p) ! Phaeocystis + deallocate(vertaggp, vertdocexp, vertrespp) #endif endif @@ -538,12 +580,17 @@ subroutine recom(mesh) call exchange_nod(GPPc) call exchange_nod(NNAc) call exchange_nod(Chldegc) + call exchange_nod(NPPp) ! Phaeocystis + call exchange_nod(GPPp) + call exchange_nod(NNAp) + call exchange_nod(Chldegp) #endif call exchange_nod(grazmeso_tot) call exchange_nod(grazmeso_n) call exchange_nod(grazmeso_d) #if defined (__coccos) call exchange_nod(grazmeso_c) + call exchange_nod(grazmeso_p) #endif call exchange_nod(grazmeso_det) #if defined (__3Zoo2Det) @@ -554,6 +601,7 @@ subroutine recom(mesh) call exchange_nod(grazmacro_d) #if defined (__coccos) call exchange_nod(grazmacro_c) + call exchange_nod(grazmacro_p) #endif call exchange_nod(grazmacro_mes) call exchange_nod(grazmacro_det) @@ -564,12 +612,13 @@ subroutine recom(mesh) call exchange_nod(grazmicro_d) #if defined (__coccos) call exchange_nod(grazmicro_c) + call exchange_nod(grazmicro_p) #endif #endif endif - call exchange_nod(GloPCO2surf) - call exchange_nod(GloCO2flux) + call exchange_nod(GloPCO2surf) + call exchange_nod(GloCO2flux) call exchange_nod(GloCO2flux_seaicemask) if (ciso) then call exchange_nod(GloPCO2surf_13) @@ -586,10 +635,10 @@ subroutine recom(mesh) call exchange_nod(GlodecayBenthos(:,n)) end do - call exchange_nod(GloO2flux_seaicemask) - call exchange_nod(GloHplus) - call exchange_nod(AtmFeInput) - call exchange_nod(AtmNInput) + call exchange_nod(GloO2flux_seaicemask) + call exchange_nod(GloHplus) + call exchange_nod(AtmFeInput) + call exchange_nod(AtmNInput) ! call exchange_nod(DenitBen) call exchange_nod(PAR3D) diff --git a/src/int_recom/recom_modules.F90 b/src/int_recom/recom_modules.F90 index 0e3e1dd70..89bb4705c 100755 --- a/src/int_recom/recom_modules.F90 +++ b/src/int_recom/recom_modules.F90 @@ -35,29 +35,33 @@ module recom_config #if defined (__coccos) & defined (__3Zoo2Det) Integer :: icocn = 29, icocc = 30, icchl = 31 + Integer :: iphan = 32, iphac = 33, iphachl = 34 #elif defined (__coccos) & !defined (__3Zoo2Det) Integer :: icocn = 23, icocc = 24, icchl = 25 + Integer :: iphan = 26, iphac = 27, iphachl = 28 #endif #if defined (__coccos) & defined (__3Zoo2Det) - Integer :: imiczoon = 32, imiczooc = 33 + Integer :: imiczoon = 35, imiczooc = 36 #elif !defined (__coccos) & defined (__3Zoo2Det) Integer :: imiczoon = 29, imiczooc = 30 #endif - Integer :: ivphy = 1, ivdia = 2, ivdet = 3, ivdetsc = 4, ivcoc = 5 ! NEW ivcoc + Integer :: ivphy = 1, ivdia = 2, ivdet = 3, ivdetsc = 4, ivcoc = 5, ivpha = 6 ! NEW ivcoc, ivpha (Phaeocystis) !!MB TEST: tracer ids for revised remineralization and sinking in oce_ale_tracer.F90 integer, dimension(8) :: recom_remin_tracer_id = (/1001, 1002, 1003, 1018, 1019, 1022, 1302, 1402/) - integer, dimension(29) :: recom_sinking_tracer_id = (/1007, 1008, 1017, 1021, 1004, 1005, 1020, 1006, & + integer, dimension(32) :: recom_sinking_tracer_id = (/1007, 1008, 1017, 1021, 1004, 1005, 1020, 1006, & 1013, 1014, 1016, 1015, 1025, 1026, 1027, 1028, & 1029, 1030, 1031, & ! OG Cocco + 1032, 1033, 1034, & ! Phaeo 1308, 1321, 1305, 1320, & 1314, 1408, 1421, 1405, 1420, 1414/) integer, dimension(8) :: recom_det_tracer_id = (/1007, 1008, 1017, 1021, 1308, 1321, 1408, 1421/) integer, dimension(8) :: recom_phy_tracer_id = (/1004, 1005, 1020, 1305, 1320, 1405, 1420, 1006/) integer, dimension(6) :: recom_dia_tracer_id = (/1013, 1014, 1314, 1414, 1016, 1015/) integer, dimension(3) :: recom_cocco_tracer_id = (/1029, 1030, 1031/) + integer, dimension(3) :: recom_phaeo_tracer_id = (/1032, 1033, 1034/) ! Phaeo integer, dimension(4) :: recom_det2_tracer_id = (/1025, 1026, 1027, 1028/) Real(kind=8) :: zero = 0.d0 @@ -73,14 +77,15 @@ module recom_config Logical :: use_REcoM = .true. Logical :: REcoM_restart = .false. - Integer :: bgc_num = 33 ! NEW increased the number from 28 to 34 (added coccos and respiration) ! NEW 3Zoo changed from 31 to 33 + Integer :: bgc_num = 36 ! NEW increased the number from 28 to 34 (added coccos and respiration) ! NEW 3Zoo changed from 31 to 33 integer :: bgc_base_num = 22 ! standard tracers - Integer :: diags3d_num = 28 ! Number of diagnostic 3d tracers to be saved + Integer :: diags3d_num = 31 ! Number of diagnostic 3d tracers to be saved Real(kind=8) :: VDet = 20.d0 ! Sinking velocity, constant through the water column and positive downwards Real(kind=8) :: VDet_zoo2 = 200.d0 ! Sinking velocity, constant through the water column Real(kind=8) :: VPhy = 0.d0 !!! If the number of sinking velocities are different from 3, code needs to be changed !!! Real(kind=8) :: VDia = 0.d0 Real(kind=8) :: VCocco = 0.d0 ! NEW + Real(kind=8) :: VPhaeo = 0.d0 ! Phaeocystis Logical :: allow_var_sinking = .true. Integer :: biostep = 1 ! Number of times biology should be stepped forward for each time step Logical :: REcoM_Geider_limiter = .false. ! Decides what routine should be used to calculate limiters in sms @@ -129,6 +134,7 @@ module recom_config bgc_num, diags3d_num, bgc_base_num, & VDet, VDet_zoo2, & VPhy, VDia, VCocco, & + VPhaeo, & allow_var_sinking, biostep, REcoM_Geider_limiter, & REcoM_Grazing_Variable_Preference, & Grazing_detritus, & @@ -175,15 +181,18 @@ module recom_config Real(kind=8) :: NCmin = 0.04d0 Real(kind=8) :: NCmin_d = 0.04d0 Real(kind=8) :: NCmin_c = 0.04d0 ! NEW + Real(kind=8) :: NCmin_p = 0.04d0 ! Phaeocystis Real(kind=8) :: SiCmin = 0.04d0 Real(kind=8) :: k_Fe = 0.04d0 Real(kind=8) :: k_Fe_d = 0.12d0 Real(kind=8) :: k_Fe_c = 0.04 ! NEW + Real(kind=8) :: k_Fe_p = 0.09 ! Phaeocystis (to be tuned) Real(kind=8) :: k_si = 4.d0 Real(kind=8) :: P_cm = 3.0d0 ! [1/day] the rate of C-specific photosynthesis Real(kind=8) :: P_cm_d = 3.5d0 Real(kind=8) :: P_cm_c = 3.3d0 ! NEW - namelist /palimiter_function/ NMinSlope, SiMinSlope, NCmin, NCmin_d, NCmin_c, SiCmin, k_Fe, k_Fe_d, k_Fe_c, k_si, P_cm, P_cm_d, P_cm_c + Real(kind=8) :: P_cm_p = 3.4d0 ! NEW for Phaeocystis ( to be tuned) + namelist /palimiter_function/ NMinSlope, SiMinSlope, NCmin, NCmin_d, NCmin_c, NCmin_p, SiCmin, k_Fe, k_Fe_d, k_Fe_c, k_Fe_p, k_si, P_cm, P_cm_d, P_cm_c, P_cm_p !!------------------------------------------------------------------------------ !! *** For light calculations *** Real(kind=8) :: k_w = 0.04d0 ! [1/m] Light attenuation coefficient @@ -191,40 +200,47 @@ module recom_config namelist /palight_calculations/ k_w, a_chl !!------------------------------------------------------------------------------ !! *** Photosynthesis *** - Real(kind=8) :: alfa = 0.14d0 ! [(mmol C*m2)/(mg Chl*W*day)] + Real(kind=8) :: alfa = 0.14d0 ! [(mmol C*m2)/(mg Chl*W*day)] Real(kind=8) :: alfa_d = 0.19d0 ! An initial slope of the P-I curve Real(kind=8) :: alfa_c = 0.10d0 ! NEW + Real(kind=8) :: alfa_p = 0.10d0 ! Phaeocystis (to be tuned) Real(kind=8) :: parFrac = 0.43d0 - namelist /paphotosynthesis/ alfa, alfa_d, alfa_c, parFrac + namelist /paphotosynthesis/ alfa, alfa_d, alfa_c, alfa_p, parFrac !!------------------------------------------------------------------------------ !! *** Assimilation *** Real(kind=8) :: V_cm_fact = 0.7d0 ! scaling factor for temperature dependent maximum of C-specific N-uptake Real(kind=8) :: V_cm_fact_d = 0.7d0 - Real(kind=8) :: V_cm_fact_c = 0.7d0 ! NEW + Real(kind=8) :: V_cm_fact_c = 0.7d0 ! NEW + Real(kind=8) :: V_cm_fact_p = 0.7d0 ! Phaeocystis Real(kind=8) :: NMaxSlope = 1000.d0 ! Max slope for limiting function Real(kind=8) :: SiMaxSlope = 1000.d0 Real(kind=8) :: NCmax = 0.2d0 ! [mmol N/mmol C] Maximum cell quota of nitrogen (N:C) Real(kind=8) :: NCmax_d = 0.2d0 Real(kind=8) :: NCmax_c = 0.15d0 ! NEW + Real(kind=8) :: NCmax_p = 0.1d0 ! Phaeocystis (to be tuned) Real(kind=8) :: SiCmax = 0.8d0 Real(kind=8) :: NCuptakeRatio = 0.2d0 ! [mmol N/mmol C] Maximum uptake ratio of N:C Real(kind=8) :: NCUptakeRatio_d = 0.2d0 Real(kind=8) :: NCUptakeRatio_c = 0.2d0 ! NEW + Real(kind=8) :: NCUptakeRatio_p = 0.2d0 ! Phaeocystis Real(kind=8) :: SiCUptakeRatio = 0.2d0 Real(kind=8) :: k_din = 0.55d0 ! [mmol N/m3] Half-saturation constant for nitrate uptake Real(kind=8) :: k_din_d = 1.0d0 Real(kind=8) :: k_din_c = 0.55d0 ! NEW + Real(kind=8) :: k_din_p = 0.55d0 ! Phaeocystis (to be tuned) Real(kind=8) :: Chl2N_max = 3.15d0 ! [mg CHL/mmol N] Maximum CHL a : N ratio = 0.3 gCHL gN^-1 Real(kind=8) :: Chl2N_max_d = 4.2d0 Real(kind=8) :: Chl2N_max_c = 3.5d0 ! NEW + Real(kind=8) :: Chl2N_max_p = 3.5d0 ! Phaeocystis (to be tuned (?)) Real(kind=8) :: res_phy = 0.01d0 ! [1/day] Maintenance respiration rate constant Real(kind=8) :: res_phy_d = 0.01d0 Real(kind=8) :: res_phy_c = 0.0075d0 ! NEW + Real(kind=8) :: res_phy_p = 0.008d0 ! Phaeocystis (to be tuned (?)) Real(kind=8) :: biosynth = 2.33d0 ! [mmol C/mmol N] Cost of biosynthesis Real(kind=8) :: biosynthSi = 0.d0 - namelist /paassimilation/ V_cm_fact, V_cm_fact_d, V_cm_fact_c, NMaxSlope, SiMaxSlope, NCmax, NCmax_d, NCmax_c, SiCmax, & - NCuptakeRatio, NCUptakeRatio_d, NCUptakeRatio_c, SiCUptakeRatio, k_din, k_din_d, k_din_c, & - Chl2N_max, Chl2N_max_d, Chl2N_max_c, res_phy, res_phy_d, res_phy_c, biosynth, biosynthSi + namelist /paassimilation/ V_cm_fact, V_cm_fact_d, V_cm_fact_c, V_cm_fact_p, NMaxSlope, SiMaxSlope, NCmax, NCmax_d, NCmax_c, NCmax_p, SiCmax, & + NCuptakeRatio, NCUptakeRatio_d, NCUptakeRatio_c, NCUptakeRatio_p, SiCUptakeRatio, k_din, k_din_d, k_din_c, k_din_p, & + Chl2N_max, Chl2N_max_d, Chl2N_max_c, Chl2N_max_p, res_phy, res_phy_d, res_phy_c, res_phy_p, biosynth, biosynthSi !!------------------------------------------------------------------------------ !! *** Iron chemistry *** Real(kind=8) :: totalligand = 1.d0 ! [mumol/m3] order 1. Total free ligand @@ -243,10 +259,12 @@ module recom_config Real(kind=8) :: sPhyNsq = 0.d0 Real(kind=8) :: pzCocco = 0.5d0 ! NEW (value is just a guess) Real(kind=8) :: sCoccoNsq = 0.d0 ! NEW + Real(kind=8) :: pzPhaeo = 1.0d0 ! Phaeocystis (to be tuned) + Real(kind=8) :: sPhaeoNsq = 0.d0 ! Phaeocystis Real(kind=8) :: pzMicZoo = 1.0d0 ! NEW 3Zoo Maximum nano-phytoplankton preference Real(kind=8) :: sMicZooNsq = 0.d0 ! NEW 3Zoo real(kind=8) :: tiny_het = 1.d-5 ! for more stable computation of HetRespFlux (_plus). Value can be > tiny because HetRespFlux ~ hetC**2. - namelist /pazooplankton/ graz_max, epsilonr, res_het, Redfield, loss_het, pzDia, sDiaNsq, pzPhy, sPhyNsq, pzCocco, sCoccoNsq, pzMicZoo, sMicZooNsq, tiny_het + namelist /pazooplankton/ graz_max, epsilonr, res_het, Redfield, loss_het, pzDia, sDiaNsq, pzPhy, sPhyNsq, pzCocco, sCoccoNsq, pzPhaeo, sPhaeoNsq, pzMicZoo, sMicZooNsq, tiny_het !!------------------------------------------------------------------------------- !! *** SecondZooplankton *** Real(kind=8) :: graz_max2 = 0.1d0 ! [mmol N/(m3 * day)] Maximum grazing loss parameter @@ -263,6 +281,8 @@ module recom_config Real(kind=8) :: sPhyNsq2 = 0.d0 Real(kind=8) :: pzCocco2 = 0.2d0 ! NEW (value is just a guess) Real(kind=8) :: sCoccoNsq2 = 0.d0 ! NEW + Real(kind=8) :: pzPhaeo2 = 0.5d0 ! Phaeocystis (to be tuned) + Real(kind=8) :: sPhaeoNsq2 = 0.d0 ! Phaeocystis Real(kind=8) :: pzHet = 0.8d0 ! Maximum diatom preference Real(kind=8) :: sHetNsq = 0.d0 Real(kind=8) :: pzMicZoo2 = 0.8d0 ! NEW Zoo3 Maximum microzooplankton preference @@ -273,7 +293,7 @@ module recom_config Real(kind=8) :: t4_zoo2 = 274.15d0 ! Krill temp. function constant3 namelist /pasecondzooplankton/ graz_max2, epsilon2, res_zoo2, & loss_zoo2, fecal_rate_n, fecal_rate_c, fecal_rate_n_mes, fecal_rate_c_mes, & ! NEW 3Zoo - pzDia2, sDiaNsq2, pzPhy2, sPhyNsq2, pzCocco2, sCoccoNsq2, pzHet, sHetNsq, & + pzDia2, sDiaNsq2, pzPhy2, sPhyNsq2, pzCocco2, sCoccoNsq2, pzPhaeo2, sPhaeoNsq2, pzHet, sHetNsq, & pzMicZoo2, sMicZooNsq2, & t1_zoo2, t2_zoo2, t3_zoo2, t4_zoo2 !------------------------------------------------------------------------------- @@ -288,7 +308,9 @@ module recom_config Real(kind=8) :: sPhyNsq3 = 0.d0 ! NEW 3Zoo Real(kind=8) :: pzCocco3 = 0.d0 ! NEW 3Zoo Maximum coccolithophore preference ! ATTENTION: This value needs to be tuned; I start with zero preference! Real(kind=8) :: sCoccoNsq3 = 0.d0 ! NEW 3Zoo - namelist /pathirdzooplankton/ graz_max3, epsilon3, loss_miczoo, res_miczoo, pzDia3, sDiaNsq3, pzPhy3, sPhyNsq3, pzCocco3, sCoccoNsq3 + Real(kind=8) :: pzPhaeo3 = 1.0d0 ! Phaeocystis 3Zoo Maximum phaeocystis preference (to be tuned (?)) + Real(kind=8) :: sPhaeoNsq3 = 0.d0 ! Phaeocystis 3Zoo + namelist /pathirdzooplankton/ graz_max3, epsilon3, loss_miczoo, res_miczoo, pzDia3, sDiaNsq3, pzPhy3, sPhyNsq3, pzCocco3, sCoccoNsq3, pzPhaeo3, sPhaeoNsq3 !------------------------------------------------------------------------------- !! *** Detritus Grazing Params *** @@ -319,20 +341,23 @@ module recom_config !! *** Phytoplankton N *** Real(kind=8) :: lossN = 0.05d0 ! [1/day] Phytoplankton loss of organic N compounds Real(kind=8) :: lossN_d = 0.05d0 - Real(kind=8) :: lossN_c = 0.05d0 - namelist /paphytoplankton_N/ lossN, lossN_d, lossN_c + Real(kind=8) :: lossN_c = 0.05d0 + Real(kind=8) :: lossN_p = 0.05d0 ! Phaeocystis + namelist /paphytoplankton_N/ lossN, lossN_d, lossN_c, lossN_p !!------------------------------------------------------------------------------ !! *** Phytoplankton C *** Real(kind=8) :: lossC = 0.10d0 ! [1/day] Phytoplankton loss of carbon Real(kind=8) :: lossC_d = 0.10d0 Real(kind=8) :: lossC_c = 0.10d0 - namelist /paphytoplankton_C/ lossC, lossC_d, lossC_c + Real(kind=8) :: lossC_p = 0.10d0 ! Phaeocystis + namelist /paphytoplankton_C/ lossC, lossC_d, lossC_c, lossC_p !!------------------------------------------------------------------------------ !! *** Phytoplankton ChlA *** Real(8) :: deg_Chl = 0.25d0 ! [1/day] Real(kind=8) :: deg_Chl_d = 0.25d0 Real(kind=8) :: deg_Chl_c = 0.20d0 ! (value is just a guess) - namelist /paphytoplankton_ChlA/ deg_Chl, deg_Chl_d, deg_Chl_c + Real(kind=8) :: deg_Chl_p = 0.25d0 ! Phaeocystis (to be tuned) + namelist /paphytoplankton_ChlA/ deg_Chl, deg_Chl_d, deg_Chl_c, deg_Chl_p !!------------------------------------------------------------------------------ !! *** Detritus N *** Real(kind=8) :: gfin = 0.3d0 ! 3Zoo [] Grazing efficiency (fraction of grazing flux into zooplankton pool) @@ -366,24 +391,28 @@ module recom_config Real(kind=8) :: Cunits = 976.5625 ! Conversion factor between [mol/m3] (model) and [umol/kg] (function): (1000 * 1000) / 1024 Real(kind=8) :: a_co2_phy = 1.162e+00 ! [unitless] Real(kind=8) :: a_co2_dia = 1.040e+00 ! [unitless] - Real(kind=8) :: a_co2_cocco = 1.109e+00 ! [unitless] + Real(kind=8) :: a_co2_cocco = 1.109e+00 ! [unitless] + Real(kind=8) :: a_co2_phaeo = 1.162e+00 ! [unitless] Real(kind=8) :: a_co2_calc = 1.102e+00 ! [unitless] Real(kind=8) :: b_co2_phy = 4.888e+01 ! [mol/kg] Real(kind=8) :: b_co2_dia = 2.890e+01 ! [mol/kg] Real(kind=8) :: b_co2_cocco = 3.767e+01 ! [mol/kg] + Real(kind=8) :: b_co2_phaeo = 4.888e+01 ! [mol/kg] Real(kind=8) :: b_co2_calc = 4.238e+01 ! [mol/kg] Real(kind=8) :: c_co2_phy = 2.255e-01 ! [kg/mol] Real(kind=8) :: c_co2_dia = 8.778e-01 ! [kg/mol] - Real(kind=8) :: c_co2_cocco = 3.912e-01 ! [kg/mol] + Real(kind=8) :: c_co2_cocco = 3.912e-01 ! [kg/mol] + Real(kind=8) :: c_co2_phaeo = 2.255e-01 ! [kg/mol] Real(kind=8) :: c_co2_calc = 7.079e-01 ! [kg/mol] Real(kind=8) :: d_co2_phy = 1.023e+07 ! [kg/mol] Real(kind=8) :: d_co2_dia = 2.640e+06 ! [kg/mol] - Real(kind=8) :: d_co2_cocco = 9.450e+06 ! [kg/mol] + Real(kind=8) :: d_co2_cocco = 9.450e+06 ! [kg/mol] + Real(kind=8) :: d_co2_phaeo = 1.023e+07 ! [kg/mol] Real(kind=8) :: d_co2_calc = 1.343e+07 ! [kg/mol] - namelist /paco2lim/ Cunits, a_co2_phy, a_co2_dia, a_co2_cocco, a_co2_calc, & - b_co2_phy, b_co2_dia, b_co2_cocco, b_co2_calc, & - c_co2_phy, c_co2_dia, c_co2_cocco, c_co2_calc, & - d_co2_phy, d_co2_dia, d_co2_cocco, d_co2_calc + namelist /paco2lim/ Cunits, a_co2_phy, a_co2_dia, a_co2_cocco, a_co2_phaeo, a_co2_calc, & + b_co2_phy, b_co2_dia, b_co2_cocco, b_co2_phaeo, b_co2_calc, & + c_co2_phy, c_co2_dia, c_co2_cocco, c_co2_phaeo, c_co2_calc, & + d_co2_phy, d_co2_dia, d_co2_cocco, d_co2_phaeo, d_co2_calc !!------------------------------------------------------------------------------ !! *** Iron *** Real(kind=8) :: Fe2N = 0.033d0 ! Fe2C * 6.625 (Fe2C = 0.005d0) @@ -449,15 +478,17 @@ Module REcoM_declarations Real(kind=8) :: tiny_N ! Min PhyN Real(kind=8) :: tiny_N_d ! Min DiaN Real(kind=8) :: tiny_N_c ! Min CocN ! NEW + Real(kind=8) :: tiny_N_p ! Min PhaN ! Phaeocystis Real(kind=8) :: tiny_C ! Min PhyC Real(kind=8) :: tiny_C_d ! Min DiaC Real(kind=8) :: tiny_C_c ! Min CocC ! NEW + Real(kind=8) :: tiny_C_p ! Min PhaC ! Phaeocystis Real(kind=8) :: tiny_Si ! Min DiaSi !!------------------------------------------------------------------------------ !! *** Temperature dependence of rates *** Real(kind=8) :: rTref ! [1/K] Reciproque value of reference temp for Arrhenius function Real(kind=8) :: rTloc ! [1/K] Reciproque of local ocean temp - Real(kind=8) :: arrFunc ! [] Temp dependence of rates + Real(kind=8) :: arrFunc ! [] Temp dependence of rates (also for Phaeocystis) Real(kind=8) :: CoccoTFunc ! [] Temp dependence of coccolithophores Real(kind=8) :: arrFuncZoo2 ! [] Temperature function for krill Real(kind=8) :: q10_mic ! 3Zoo @@ -475,13 +506,15 @@ Module REcoM_declarations Real(kind=8) :: CoccoCO2 Real(kind=8) :: DiaCO2 Real(kind=8) :: PhyCO2 + Real(kind=8) :: PhaeoCO2 ! Phaeocystis + !!------------------------------------------------------------------------------ !! *** Quotas *** - Real(kind=8) :: quota, quota_dia, quota_cocco ! [mmol N/mmol C] Quota between phytoplankton N and C (NEW changed term) - Real(kind=8) :: recipQuota, recipQuota_dia, recipQuota_cocco ! [mmol C/mmol N] Reciproque of 'quota' (NEW changed term) - Real(kind=8) :: Chl2C, Chl2C_dia, Chl2C_cocco ! [mg ChlA/mmol C] Quota between phytoplankton ChlA and C (NEW changed term) - Real(kind=8) :: Chl2C_plast, Chl2C_plast_dia, CHL2C_plast_cocco ! [mg ChlA/mmol C] needed for photodamage (NEW changed term) - Real(kind=8) :: Chl2N, Chl2N_dia, Chl2N_cocco ! [mg ChlA/mmol N] Quota between phytoplankton ChlA and N (NEW changed term) + Real(kind=8) :: quota, quota_dia, quota_cocco, quota_phaeo ! [mmol N/mmol C] Quota between phytoplankton N and C (NEW changed term) + Real(kind=8) :: recipQuota, recipQuota_dia, recipQuota_cocco, recipQuota_phaeo ! [mmol C/mmol N] Reciproque of 'quota' (NEW changed term) + Real(kind=8) :: Chl2C, Chl2C_dia, Chl2C_cocco, Chl2C_phaeo ! [mg ChlA/mmol C] Quota between phytoplankton ChlA and C (NEW changed term) + Real(kind=8) :: Chl2C_plast, Chl2C_plast_dia, CHL2C_plast_cocco, CHL2C_plast_phaeo ! [mg ChlA/mmol C] needed for photodamage (NEW changed term) + Real(kind=8) :: Chl2N, Chl2N_dia, Chl2N_cocco, Chl2N_phaeo ! [mg ChlA/mmol N] Quota between phytoplankton ChlA and N (NEW changed term) Real(kind=8) :: qSiC Real(kind=8) :: qSiN Real(kind=8) :: recipQZoo ! [mmol C/mmol N] Quota between heterotrophic C and N @@ -496,7 +529,7 @@ Module REcoM_declarations Real(kind=8) :: qlimitFac, qlimitFacTmp ! Factor that regulates photosynthesis Real(kind=8),external :: recom_limiter ! Function calculating qlimitFac Real(kind=8) :: FeLimitFac ! [Mumol/m3] Half sat constant for iron - Real(kind=8) :: pMax, pMax_dia, pMax_cocco ! [1/day] Maximum rate of C-specific photosynthesis + Real(kind=8) :: pMax, pMax_dia, pMax_cocco, pMax_phaeo ! [1/day] Maximum rate of C-specific photosynthesis !!------------------------------------------------------------------------------ !! *** Light *** Real(kind=8) :: kappar ! [1/m] Light attenuation coefficient modified by chla @@ -508,19 +541,19 @@ Module REcoM_declarations Real(kind=8) :: PARave ! [?] Average light in the control volumes !!------------------------------------------------------------------------------ !! *** Photosynthesis *** - Real(kind=8) :: Cphot, Cphot_dia, Cphot_cocco ! [1/day] C-specific rate of photosynthesis + Real(kind=8) :: Cphot, Cphot_dia, Cphot_cocco, Cphot_phaeo ! [1/day] C-specific rate of photosynthesis !!------------------------------------------------------------------------------ !! *** Assimilation *** Real(kind=8) :: V_cm ! scaling factor for temperature dependent maximum of C-specific N-uptake - Real(kind=8) :: limitFacN,limitFacN_dia,limitFacN_cocco ! Factor that regulates N-assimilation. Calc from function recom_limiter + Real(kind=8) :: limitFacN,limitFacN_dia,limitFacN_cocco, limitFacN_phaeo ! Factor that regulates N-assimilation. Calc from function recom_limiter Real(kind=8) :: limitFacSi - Real(kind=8) :: N_assim, N_assim_dia, N_assim_Cocco ! [mmol N/(mmol C * day)] C specific N utilization rate + Real(kind=8) :: N_assim, N_assim_dia, N_assim_Cocco, N_assim_phaeo ! [mmol N/(mmol C * day)] C specific N utilization rate Real(kind=8) :: Si_assim !!------------------------------------------------------------------------------ !! *** Chlorophyll *** - Real(kind=8) :: ChlSynth, ChlSynth_dia, ChlSynth_cocco ! [mg CHL/ mmol N] CHL a synthesis regulation term - Real(kind=8) :: phyRespRate, phyRespRate_dia, phyRespRate_cocco ! [1/day] Phytoplankton respiration rate - Real(kind=8) :: KOchl, KOchl_dia, KOchl_cocco ! coefficient for damage to the photosynthetic apparatus + Real(kind=8) :: ChlSynth, ChlSynth_dia, ChlSynth_cocco, ChlSynth_phaeo ! [mg CHL/ mmol N] CHL a synthesis regulation term + Real(kind=8) :: phyRespRate, phyRespRate_dia, phyRespRate_cocco, phyRespRate_phaeo ! [1/day] Phytoplankton respiration rate + Real(kind=8) :: KOchl, KOchl_dia, KOchl_cocco, KOchl_phaeo ! coefficient for damage to the photosynthetic apparatus !!------------------------------------------------------------------------------ !! *** Iron chemistry *** Real(kind=8),external :: iron_chemistry @@ -532,10 +565,12 @@ Module REcoM_declarations Real(kind=8) :: varpzPhy, fPhyN ! Part of Nano available for food Real(kind=8) :: CoccoNsq ! NEW Real(kind=8) :: varpzCocco,fCoccoN ! NEW + Real(kind=8) :: PhaeoNsq ! Phaeocystis + Real(kind=8) :: varpzPhaeo,fPhaeoN ! Phaeocystis Real(kind=8) :: MicZooNsq ! NEW 3Zoo Real(kind=8) :: varpzMicZoo, fMicZooN ! NEW 3Zoo Part of microzooplankton available for food Real(kind=8) :: food, foodsq ! [(mmol N)2/m6] - Real(kind=8) :: grazingFlux_phy, grazingFlux_Dia, grazingFlux_Cocco ! [mmol N / (m3 * day)] (NEW changed term) + Real(kind=8) :: grazingFlux_phy, grazingFlux_Dia, grazingFlux_Cocco, grazingFlux_Phaeo ! [mmol N / (m3 * day)] (NEW changed term) Real(kind=8) :: grazingFlux_miczoo ! NEW 3Zoo Real(kind=8) :: grazingFlux Real(kind=8) :: grazEff ! NEW 3Zoo @@ -543,12 +578,12 @@ Module REcoM_declarations Real(kind=8) :: HetLossFlux ! [(mmol N)2/(m6 * day)] Zooplankton mortality (quadratic loss) !!------------------------------------------------------------------------------ !! *** Second Zooplankton *** - Real(kind=8) :: DiaNsq2, PhyNsq2, CoccoNsq2, HetNsq ! NEW (changed term) - Real(kind=8) :: varpzDia2, fDiaN2, varpzPhy2, fPhyN2, varpzCocco2, fCoccoN2, varpzHet, fHetN ! Part of Diatoms available for food + Real(kind=8) :: DiaNsq2, PhyNsq2, CoccoNsq2, PhaeoNsq2, HetNsq ! NEW (changed term) + Real(kind=8) :: varpzDia2, fDiaN2, varpzPhy2, fPhyN2, varpzCocco2, fCoccoN2, varpzPhaeo2, fPhaeoN2, varpzHet, fHetN ! Part of Diatoms available for food Real(kind=8) :: MicZooNsq2 ! NEW Zoo3 Real(kind=8) :: varpzMicZoo2, fMicZooN2 ! NEW Zoo3 Real(kind=8) :: food2, foodsq2 ! [(mmol N)2/m6] - Real(kind=8) :: grazingFlux_phy2, grazingFlux_Dia2, grazingFlux_Cocco2, grazingFlux_het2 ! [mmol N / (m3 * day) (NEW changed term) + Real(kind=8) :: grazingFlux_phy2, grazingFlux_Dia2, grazingFlux_Cocco2, grazingFlux_Phaeo2, grazingFlux_het2 ! [mmol N / (m3 * day) (NEW changed term) Real(kind=8) :: grazingFlux_miczoo2 ! NEW Zoo3 Real(kind=8) :: grazingFlux2 Real(kind=8) :: Zoo2RespFlux ! Zooplankton respiration @@ -574,8 +609,10 @@ Module REcoM_declarations Real(kind=8) :: varpzPhy3, fPhyN3 ! Part of small phytoplankton available for food Real(kind=8) :: CoccoNsq3 Real(kind=8) :: varpzCocco3, fCoccoN3 ! Part of coccolithophores available for food + Real(kind=8) :: PhaeoNsq3 + Real(kind=8) :: varpzPhaeo3, fPhaeoN3 ! Part of phaeocystis available for food Real(kind=8) :: food3, foodsq3 ! [(mmol N)2/m6] - Real(kind=8) :: grazingFlux_phy3, grazingFlux_Dia3, grazingFlux_Cocco3 ! [mmol N / (m3 * day)] + Real(kind=8) :: grazingFlux_phy3, grazingFlux_Dia3, grazingFlux_Cocco3, grazingFlux_Phaeo3 ! [mmol N / (m3 * day)] Real(kind=8) :: grazingFlux3 Real(kind=8) :: MicZooRespFlux ! Zooplankton respiration Real(kind=8) :: MicZooLossFlux ! [(mmol N)2/(m6 * day)] Zooplankton mortality (quadratic loss) @@ -602,20 +639,22 @@ Module REcoM_declarations Real(kind=8) :: locNPPn, locGPPn, locNNAn, locChldegn Real(kind=8) :: locNPPd, locGPPd, locNNAd, locChldegd Real(kind=8) :: locNPPc, locGPPc, locNNAc, locChldegc + Real(kind=8) :: locNPPp, locGPPp, locNNAp, locChldegp ! Phaeocystis Real(kind=8),allocatable,dimension(:) :: vertNPPn, vertGPPn, vertNNAn, vertChldegn Real(kind=8),allocatable,dimension(:) :: vertNPPd, vertGPPd, vertNNAd, vertChldegd Real(kind=8),allocatable,dimension(:) :: vertNPPc, vertGPPc, vertNNAc, vertChldegc - Real(kind=8) :: locgrazmeso_tot, locgrazmeso_n, locgrazmeso_d, locgrazmeso_c, locgrazmeso_det, locgrazmeso_mic, locgrazmeso_det2 - Real(kind=8) :: locgrazmacro_tot, locgrazmacro_n, locgrazmacro_d, locgrazmacro_c, locgrazmacro_mes, locgrazmacro_det, locgrazmacro_mic, locgrazmacro_det2 - Real(kind=8) :: locgrazmicro_tot, locgrazmicro_n, locgrazmicro_d, locgrazmicro_c - Real(kind=8),allocatable,dimension(:) :: vertgrazmeso_tot, vertgrazmeso_n, vertgrazmeso_d, vertgrazmeso_c, vertgrazmeso_det, vertgrazmeso_mic, vertgrazmeso_det2 - Real(kind=8),allocatable,dimension(:) :: vertgrazmacro_tot, vertgrazmacro_n, vertgrazmacro_d, vertgrazmacro_c, vertgrazmacro_mes, vertgrazmacro_det, vertgrazmacro_mic, vertgrazmacro_det2 - Real(kind=8),allocatable,dimension(:) :: vertgrazmicro_tot, vertgrazmicro_n, vertgrazmicro_d, vertgrazmicro_c + Real(kind=8),allocatable,dimension(:) :: vertNPPp, vertGPPp, vertNNAp, vertChldegp ! Phaeocystis + Real(kind=8) :: locgrazmeso_tot, locgrazmeso_n, locgrazmeso_d, locgrazmeso_c, locgrazmeso_p, locgrazmeso_det, locgrazmeso_mic, locgrazmeso_det2 + Real(kind=8) :: locgrazmacro_tot, locgrazmacro_n, locgrazmacro_d, locgrazmacro_c, locgrazmacro_p, locgrazmacro_mes, locgrazmacro_det, locgrazmacro_mic, locgrazmacro_det2 + Real(kind=8) :: locgrazmicro_tot, locgrazmicro_n, locgrazmicro_d, locgrazmicro_c, locgrazmicro_p + Real(kind=8),allocatable,dimension(:) :: vertgrazmeso_tot, vertgrazmeso_n, vertgrazmeso_d, vertgrazmeso_c, vertgrazmeso_p, vertgrazmeso_det, vertgrazmeso_mic, vertgrazmeso_det2 + Real(kind=8),allocatable,dimension(:) :: vertgrazmacro_tot, vertgrazmacro_n, vertgrazmacro_d, vertgrazmacro_c, vertgrazmacro_p, vertgrazmacro_mes, vertgrazmacro_det, vertgrazmacro_mic, vertgrazmacro_det2 + Real(kind=8),allocatable,dimension(:) :: vertgrazmicro_tot, vertgrazmicro_n, vertgrazmicro_d, vertgrazmicro_c, vertgrazmicro_p Real(kind=8),allocatable,dimension(:) :: vertrespmeso, vertrespmacro, vertrespmicro Real(kind=8),allocatable,dimension(:) :: vertcalcdiss, vertcalcif - Real(kind=8),allocatable,dimension(:) :: vertaggn, vertaggd, vertaggc - Real(kind=8),allocatable,dimension(:) :: vertdocexn, vertdocexd, vertdocexc - Real(kind=8),allocatable,dimension(:) :: vertrespn, vertrespd, vertrespc + Real(kind=8),allocatable,dimension(:) :: vertaggn, vertaggd, vertaggc, vertaggp + Real(kind=8),allocatable,dimension(:) :: vertdocexn, vertdocexd, vertdocexc, vertdocexp + Real(kind=8),allocatable,dimension(:) :: vertrespn, vertrespd, vertrespc, vertrespp !!------------------------------------------------------------------------------ !! *** Benthos *** Real(kind=8),allocatable,dimension(:) :: decayBenthos ! [1/day] Decay rate of detritus in the benthic layer @@ -623,11 +662,13 @@ Module REcoM_declarations Real(kind=8),allocatable,dimension(:) :: wFluxPhy ! [mmol/(m2 * day)] Flux of N,C, calc and chl through sinking of phytoplankton Real(kind=8),allocatable,dimension(:) :: wFluxDia ! [mmol/(m2 * day)] Flux of N,C, Si and chl through sinking of diatoms Real(kind=8),allocatable,dimension(:) :: wFluxCocco ! NEW [mmol/(m2 * day)] Flux of N,C, calc and chl through sinking of coccos + Real(kind=8),allocatable,dimension(:) :: wFluxPhaeo ! NEW [mmol/(m2 * day)] Flux of N,C, calc and chl through sinking of Phaeocystis Real(kind=8) :: Vben_det ! [m/day] speed of sinking into benthos from water column Real(kind=8) :: Vben_det_seczoo !second zooplankton sinking benthos Real(kind=8) :: Vben_phy Real(kind=8) :: Vben_dia Real(kind=8) :: Vben_coc + Real(kind=8) :: Vben_pha ! Phaeocystis Real(kind=8) :: Ironflux ! [umol Fe/(m2*day)] Flux of Fe from sediment to water !_______________________________________________________________________________ ! Arrays added for RECOM implementation: @@ -650,7 +691,7 @@ end module REcoM_declarations Module REcoM_GloVar implicit none save - + Real(kind=8),allocatable,dimension(:,:) :: Benthos ! 4 types of benthos-tracers with size [4 n2d] Real(kind=8),allocatable,dimension(:,:,:) :: Benthos_tr ! kh 25.03.22 buffer sums per tracer index to avoid non bit identical results regarding global sums when running the tracer loop in parallel @@ -688,7 +729,8 @@ Module REcoM_GloVar Real(kind=8),allocatable,dimension(:,:) :: GlowFluxDet ! Real(kind=8),allocatable,dimension(:,:) :: GlowFluxPhy ! Real(kind=8),allocatable,dimension(:,:) :: GlowFluxDia ! - Real(kind=8),allocatable,dimension(:,:) :: GlowFluxCocco ! + Real(kind=8),allocatable,dimension(:,:) :: GlowFluxCocco ! + Real(kind=8),allocatable,dimension(:,:) :: GlowFluxPhaeo ! Phaeocystis Real(kind=8),allocatable,dimension(:,:) :: diags2D ! Diagnostics in 2D [8 n2d] Real(kind=8),allocatable,dimension(:) :: NPPn @@ -703,10 +745,15 @@ Module REcoM_GloVar Real(kind=8),allocatable,dimension(:) :: GPPc Real(kind=8),allocatable,dimension(:) :: NNAc Real(kind=8),allocatable,dimension(:) :: Chldegc + Real(kind=8),allocatable,dimension(:) :: NPPp ! Phaeocystis + Real(kind=8),allocatable,dimension(:) :: GPPp + Real(kind=8),allocatable,dimension(:) :: NNAp + Real(kind=8),allocatable,dimension(:) :: Chldegp Real(kind=8),allocatable,dimension(:) :: grazmeso_tot Real(kind=8),allocatable,dimension(:) :: grazmeso_n Real(kind=8),allocatable,dimension(:) :: grazmeso_d Real(kind=8),allocatable,dimension(:) :: grazmeso_c + Real(kind=8),allocatable,dimension(:) :: grazmeso_p ! Phaeocystis Real(kind=8),allocatable,dimension(:) :: grazmeso_det Real(kind=8),allocatable,dimension(:) :: grazmeso_mic Real(kind=8),allocatable,dimension(:) :: grazmeso_det2 @@ -714,6 +761,7 @@ Module REcoM_GloVar Real(kind=8),allocatable,dimension(:) :: grazmacro_n Real(kind=8),allocatable,dimension(:) :: grazmacro_d Real(kind=8),allocatable,dimension(:) :: grazmacro_c + Real(kind=8),allocatable,dimension(:) :: grazmacro_p ! Phaeocystis Real(kind=8),allocatable,dimension(:) :: grazmacro_mes Real(kind=8),allocatable,dimension(:) :: grazmacro_det Real(kind=8),allocatable,dimension(:) :: grazmacro_mic @@ -722,6 +770,7 @@ Module REcoM_GloVar Real(kind=8),allocatable,dimension(:) :: grazmicro_n Real(kind=8),allocatable,dimension(:) :: grazmicro_d Real(kind=8),allocatable,dimension(:) :: grazmicro_c + Real(kind=8),allocatable,dimension(:) :: grazmicro_p ! Phaeocystis Real(kind=8),allocatable,dimension(:,:) :: respmeso Real(kind=8),allocatable,dimension(:,:) :: respmacro Real(kind=8),allocatable,dimension(:,:) :: respmicro @@ -730,15 +779,19 @@ Module REcoM_GloVar Real(kind=8),allocatable,dimension(:,:) :: aggn Real(kind=8),allocatable,dimension(:,:) :: aggd Real(kind=8),allocatable,dimension(:,:) :: aggc + Real(kind=8),allocatable,dimension(:,:) :: aggp ! Phaeocystis Real(kind=8),allocatable,dimension(:,:) :: docexn Real(kind=8),allocatable,dimension(:,:) :: docexd Real(kind=8),allocatable,dimension(:,:) :: docexc + Real(kind=8),allocatable,dimension(:,:) :: docexp ! Phaeocystis Real(kind=8),allocatable,dimension(:,:) :: respn Real(kind=8),allocatable,dimension(:,:) :: respd Real(kind=8),allocatable,dimension(:,:) :: respc + Real(kind=8),allocatable,dimension(:,:) :: respp ! Phaeocystis Real(kind=8),allocatable,dimension(:,:) :: NPPn3D Real(kind=8),allocatable,dimension(:,:) :: NPPd3D - Real(kind=8),allocatable,dimension(:,:) :: NPPc3D + Real(kind=8),allocatable,dimension(:,:) :: NPPc3D + Real(kind=8),allocatable,dimension(:,:) :: NPPp3D ! Phaeocystis Real(kind=8),allocatable,dimension(:) :: DenitBen ! Benthic denitrification Field in 2D [n2d 1] @@ -840,7 +893,7 @@ Module REcoM_locVar Real(kind=8) :: PICPOCN ! (to make calcification dependent on N-limitation) Real(kind=8) :: calc_prod_final ! (added to make the calcification dependent on nutrients (N, Fe), after Krumhardt et al. 2017/2019) Integer :: currentCO2year - + end module REcoM_LocVar !=============================================================================== ! Specific declarations related to carbon isotope simulations diff --git a/src/int_recom/recom_sms.F90 b/src/int_recom/recom_sms.F90 index fb46bff0e..3abd4caad 100755 --- a/src/int_recom/recom_sms.F90 +++ b/src/int_recom/recom_sms.F90 @@ -103,6 +103,9 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & CoccoN, & CoccoC, & CoccoChl,& + PhaeoN, & ! Phaeocystis + PhaeoC, & + PhaeoChl,& #endif Si, & Fe, & @@ -136,6 +139,8 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & #if defined (__coccos) tiny_N_c = tiny_chl/chl2N_max_c tiny_C_c = tiny_N_c/NCmax_c + tiny_N_p = tiny_chl/chl2N_max_p ! Phaeocystis + tiny_C_p = tiny_N_p/NCmax_p #endif recip_res_het = 1.d0/res_het !< res_het = 0.01d0 [1/day] Respiration by heterotrophs and mortality (loss to detritus) @@ -155,7 +160,7 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & !Main time loop starts do step = one,biostep - kdzUpper = 0.d0 !< Upper light attenuation of top cell is set to zero + kdzUpper = 0.d0 !< Upper light attenuation of top cell is set to zero if (any(abs(sms(:,:)) <= tiny)) sms(:,:) = zero ! tiny = 2.23D-16 @@ -167,16 +172,16 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & ! nzmin = ulevels_nod2D(row) ! nzmax = nlevels_nod2D(row) ! do k=1, Nn - DIN = max(tiny,state(k,idin) + sms(k,idin )) !< Avoids division by zero - DIC = max(tiny,state(k,idic) + sms(k,idic )) !! and updates Conc between - ALK = max(tiny,state(k,ialk) + sms(k,ialk )) !! local steps in REcoM when + DIN = max(tiny,state(k,idin) + sms(k,idin )) !< Avoids division by zero + DIC = max(tiny,state(k,idic) + sms(k,idic )) !! and updates Conc between + ALK = max(tiny,state(k,ialk) + sms(k,ialk )) !! local steps in REcoM when PhyN = max(tiny_N,state(k,iphyn) + sms(k,iphyn )) !! biostep > 1 - PhyC = max(tiny_C,state(k,iphyc) + sms(k,iphyc )) + PhyC = max(tiny_C,state(k,iphyc) + sms(k,iphyc )) PhyChl = max(tiny_chl,state(k,ipchl) + sms(k,ipchl )) - DetN = max(tiny,state(k,idetn) + sms(k,idetn )) - DetC = max(tiny,state(k,idetc) + sms(k,idetc )) - HetN = max(tiny,state(k,ihetn) + sms(k,ihetn )) - HetC = max(tiny,state(k,ihetc) + sms(k,ihetc )) + DetN = max(tiny,state(k,idetn) + sms(k,idetn )) + DetC = max(tiny,state(k,idetc) + sms(k,idetc )) + HetN = max(tiny,state(k,ihetn) + sms(k,ihetn )) + HetC = max(tiny,state(k,ihetc) + sms(k,ihetc )) #if defined (__3Zoo2Det) Zoo2N = max(tiny,state(k,izoo2n) + sms(k,izoo2n)) Zoo2C = max(tiny,state(k,izoo2c) + sms(k,izoo2c)) @@ -188,19 +193,22 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & MicZooC = max(tiny,state(k,imiczooc) + sms(k,imiczooc)) #endif DON = max(tiny,state(k,idon) + sms(k,idon )) - EOC = max(tiny,state(k,idoc) + sms(k,idoc )) + EOC = max(tiny,state(k,idoc) + sms(k,idoc )) DiaN = max(tiny_N_d,state(k,idian) + sms(k,idian )) DiaC = max(tiny_C_d,state(k,idiac) + sms(k,idiac )) DiaChl = max(tiny_chl,state(k,idchl) + sms(k,idchl )) DiaSi = max(tiny_si,state(k,idiasi) + sms(k,idiasi)) - DetSi = max(tiny,state(k,idetsi) + sms(k,idetsi)) - Si = max(tiny,state(k,isi) + sms(k,isi )) + DetSi = max(tiny,state(k,idetsi) + sms(k,idetsi)) + Si = max(tiny,state(k,isi) + sms(k,isi )) #if defined (__coccos) CoccoN = max(tiny_N_c,state(k,icocn) + sms(k,icocn )) CoccoC = max(tiny_C_c,state(k,icocc) + sms(k,icocc )) CoccoChl = max(tiny_chl,state(k,icchl) + sms(k,icchl )) + PhaeoN = max(tiny_N_p,state(k,iphan) + sms(k,iphan )) ! Phaeocystis + PhaeoC = max(tiny_C_p,state(k,iphac) + sms(k,iphac )) + PhaeoChl = max(tiny_chl,state(k,iphachl) + sms(k,iphachl )) #endif - Fe = max(tiny,state(k,ife) + sms(k,ife )) + Fe = max(tiny,state(k,ife) + sms(k,ife )) O2 = max(tiny,state(k,ioxy) + sms(k,ioxy)) FreeFe = zero @@ -239,6 +247,11 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & Chl2C_cocco = CoccoChl / CoccoC Chl2N_cocco = CoccoChl / CoccoN CHL2C_plast_cocco = Chl2C_cocco * (quota_cocco/(quota_cocco - NCmin_c)) + quota_phaeo = PhaeoN / PhaeoC ! Phaeocystis + recipQuota_phaeo = real(one)/quota_phaeo + Chl2C_phaeo = PhaeoChl / PhaeoC + Chl2N_phaeo = PhaeoChl / PhaeoN + CHL2C_plast_phaeo = Chl2C_phaeo * (quota_phaeo/(quota_phaeo - NCmin_p)) #endif recipQZoo = HetC / HetN recip_hetN_plus = 1.d0 / (HetN + tiny_het) ! MB's addition for more stable zoo respiration @@ -308,6 +321,7 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & arrFunc = exp(-Ae * ( rTloc - rTref)) #if defined (__coccos) CoccoTFunc = max(0.1419d0 * Temp(k)**0.8151d0,tiny) ! Function from Fielding 2013; is based on observational GR, but range fits best to ours + #endif #if defined (__3Zoo2Det) @@ -343,12 +357,12 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & chl_upper = (PhyChl + DiaChl) #if defined (__coccos) - chl_upper = chl_upper + CoccoChl + chl_upper = chl_upper + CoccoChl + PhaeoChl #endif else chl_lower = PhyChl + DiaChl #if defined (__coccos) - chl_lower = chl_lower + CoccoChl + chl_lower = chl_lower + CoccoChl + PhaeoChl #endif Chlave = (chl_upper+chl_lower)*0.5 @@ -444,6 +458,11 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & - exp(-c_co2_cocco * CO2_watercolumn(k) * Cunits) - d_co2_cocco * 10.**(-pH_watercolumn(k)) CoccoCO2 = min(CoccoCO2,3.d0) ! April 2022: limitation to 3 CoccoCO2 = max(0.d0,CoccoCO2) ! July 2022: limitation to zero +! Phaeocystis + PhaeoCO2 = a_co2_phaeo * HCO3_watercolumn(k) * Cunits / (b_co2_phaeo + HCO3_watercolumn(k) * Cunits) & + - exp(-c_co2_phaeo * CO2_watercolumn(k) * Cunits) - d_co2_phaeo * 10.**(-pH_watercolumn(k)) + PhaeoCO2 = min(PHaeoCO2,3.d0) ! April 2022: limitation to 3 + PhaeoCO2 = max(0.d0,PhaeoCO2) ! July 2022: limitation to zero #endif !------------------------------------------------------------------------------ @@ -514,6 +533,10 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & feLimitFac = Fe/(k_Fe_c + Fe) qlimitFac = min(qlimitFac, feLimitFac) pMax_cocco = P_cm_c * qlimitFac * CoccoTFunc ! Here the T dependency is changed + qlimitFac = recom_limiter(NMinSlope, NCmin_p, quota_phaeo) ! Phaeocystis + feLimitFac = Fe/(k_Fe_p + Fe) + qlimitFac = min(qlimitFac, feLimitFac) + pMax_phaeo = P_cm_p * qlimitFac * arrFunc #endif !------------------------------------------------------------------------------- !< *** Small phytoplankton photosynthesis rate *** @@ -546,6 +569,14 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & if (CO2lim) Cphot_cocco = Cphot_cocco * CoccoCO2 ! Added the CO2 dependence end if if (Cphot_cocco .lt. tiny) Cphot_cocco = zero + ! Phaeocystis + if ( pMax_phaeo .lt. tiny .OR. Parave /= Parave .OR. CHL2C_phaeo /= CHL2C_phaeo) then + Cphot_phaeo = zero + else + Cphot_phaeo = pMax_phaeo * (real(one) - exp( -alfa_p * Chl2C_phaeo * PARave / pMax_phaeo)) + if (CO2lim) Cphot_phaeo = Cphot_phaeo * PhaeoCO2 ! Added the CO2 dependence + end if + if (Cphot_phaeo .lt. tiny) Cphot_phaeo = zero #endif !------------------------------------------------------------------------------- !< chlorophyll degradation @@ -554,6 +585,7 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & KOchl_dia = deg_Chl_d #if defined (__coccos) KOchl_cocco = deg_Chl_c + KOchl_phaeo = deg_Chl_p ! Phaeocystis #endif if (use_photodamage) then @@ -589,6 +621,15 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & KOchl_cocco = max((deg_Chl_c*0.1d0), KOchl_cocco) KOchl_cocco = min(KOChl_cocco, 0.3d0) end if + ! Phaeocystis + if (pMax_phaeo .lt. tiny .OR. PARave /= PARave .OR. CHL2C_plast_phaeo /= CHL2C_plast_phaeo) then + KOchl_phaeo = deg_Chl_p*0.1d0 + else + !KOchl_phaeo = deg_Chl_p*(real(one) - exp(-alfa_p * CHL2C_plast_phaeo * PARave / pMax_phaeo)) + KOchl_phaeo = deg_Chl_p * CHL2C_plast_phaeo * PARave + KOchl_phaeo = max((deg_Chl_p*0.1d0), KOchl_phaeo) + KOchl_phaeo = min(KOChl_phaeo, 0.3d0) + end if #endif if (KOchl /= KOchl) then print*,' KOchl is ', KOchl @@ -617,7 +658,16 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & print*,' PARave is ', PARave print*,' pMax_c is ', pMax_cocco stop - end if + end if + if (KOchl_phaeo /= KOchl_phaeo) then + print*,' KOchl_phaeo is ', KOchl_phaeo + print*,' deg_Chl_p is ', deg_Chl_p + print*,' alfa_p is ', alfa_p + print*,' CHL2C_p is ', CHL2C_plast_phaeo + print*,' PARave is ', PARave + print*,' pMax_p is ', pMax_phaeo + stop + end if #endif end if ! photodamage @@ -651,7 +701,11 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & V_cm = V_cm_fact_c limitFacN_cocco = recom_limiter(NMaxSlope, quota_cocco, NCmax_c) N_assim_cocco = V_cm * pMax_cocco * NCUptakeRatio_c & - * limitFacN_cocco * DIN/(DIN + k_din_c) + * limitFacN_cocco * DIN/(DIN + k_din_c) + V_cm = V_cm_fact_p ! Phaeocystis + limitFacN_phaeo = recom_limiter(NMaxSlope, quota_phaeo, NCmax_p) + N_assim_phaeo = V_cm * pMax_phaeo * NCUptakeRatio_p & + * limitFacN_phaeo * DIN/(DIN + k_din_p) #endif limitFacSi = recom_limiter(SiMaxSlope, qSiC, SiCmax) & @@ -686,6 +740,10 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & if (PARave .ge. tiny .AND. PARave .eq. PARave) then ChlSynth_cocco = N_assim_cocco * Chl2N_max_c & * min(real(one),Cphot_cocco /(alfa_c * Chl2C_cocco * PARave)) + ! Phaeocystis + ChlSynth_phaeo = N_assim_phaeo * Chl2N_max_p & + * min(real(one),Cphot_phaeo /(alfa_p * Chl2C_phaeo * PARave)) + end if #endif !------------------------------------------------------------------------------- @@ -699,6 +757,7 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & phyRespRate_dia = res_phy_d * limitFacN_dia + biosynth * N_assim_dia + biosynthSi * Si_assim #if defined (__coccos) phyRespRate_cocco = res_phy_c * limitFacN_cocco + biosynth * N_assim_cocco + phyRespRate_phaeo = res_phy_p * limitFacN_phaeo + biosynth * N_assim_phaeo ! Phaeocystis #endif !------------------------------------------------------------------------------- @@ -724,7 +783,8 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & aux = aux + pzMicZoo*MicZooN ! 3Zoo #endif #if defined (__coccos) - aux = aux + pzCocco*CoccoN + aux = aux + pzCocco*CoccoN + aux = aux + pzPhaeo*PhaeoN ! Phaeocystis #endif ! ****************************************************************************** varpzPhy = (pzPhy*PhyN)/aux @@ -736,6 +796,7 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & #endif #if defined (__coccos) varpzCocco = (pzCocco*CoccoN)/aux + varpzPhaeo = (pzPhaeo*PhaeoN)/aux ! Phaeocystis #endif ! ****************************************************************************** fDiaN = varpzDia * DiaN @@ -747,6 +808,7 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & #endif #if defined (__coccos) fCoccoN = varpzCocco * CoccoN + fPhaeoN = varpzPhaeo * PhaeoN ! Phaeocystis #endif else ! REcoM_Grazing_Variable_Preference = .false. fPhyN = pzPhy * PhyN @@ -758,6 +820,7 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & #endif #if defined (__coccos) fCoccoN = pzCocco * CoccoN + fPhaeoN = pzPhaeo * PhaeoN ! Phaeocystis #endif end if ! REcoM_Grazing_Variable_Preference @@ -771,6 +834,7 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & #endif #if defined (__coccos) food = food + fCoccoN + food = food + fPhaeoN ! Phaeocystis #endif ! ****************************************************************************** foodsq = food**2 @@ -787,6 +851,7 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & #endif #if defined (__coccos) grazingFlux_Cocco = grazingFlux * fCoccoN / food + grazingFlux_Phaeo = grazingFlux * fPhaeoN / food ! Phaeocystis #endif !< *** Grazing efficiency *** @@ -806,7 +871,9 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & #endif #if defined (__coccos) grazingFluxcarbon_mes = grazingFluxcarbon_mes & - + (grazingFlux_Cocco * recipQuota_Cocco * grazEff) + + (grazingFlux_Cocco * recipQuota_Cocco * grazEff) + grazingFluxcarbon_mes = grazingFluxcarbon_mes & ! Phaeocystis + + (grazingFlux_Phaeo * recipQuota_phaeo * grazEff) #endif !------------------------------------------------------------------------------- @@ -832,6 +899,7 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & aux = aux + pzMicZoo2 * MicZooN ! 3Zoo #if defined (__coccos) aux = aux + pzCocco2 * CoccoN + aux = aux + pzPhaeo2 * PhaeoN ! Phaeocystis #endif ! ****************************************************************************** varpzPhy2 = (pzPhy2 * PhyN)/aux @@ -840,6 +908,7 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & #if defined (__coccos) varpzCocco2 = (pzCocco2 * CoccoN)/aux + varpzPhaeo2 = (pzPhaeo2 * PhaeoN)/aux ! Phaeocystis #endif varpzHet = (pzHet * HetN)/aux if (Grazing_detritus) then @@ -852,6 +921,7 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & fMicZooN2 = varpzMicZoo2 * MicZooN ! 3Zoo #if defined (__coccos) fCoccoN2 = varpzCocco2 * CoccoN + fPhaeoN2 = varpzPhaeo2 * PhaeoN ! Phaeocystis #endif fHetN = varpzHet * HetN if (Grazing_detritus) then @@ -865,6 +935,7 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & fMicZooN2 = pzMicZoo2 * MicZooN ! 3Zoo #if defined (__coccos) fCoccoN2 = pzCocco2 * CoccoN + fPhaeoN2 = pzPhaeo2 * PhaeoN ! Phaeocystis #endif fHetN = pzHet * HetN if (Grazing_detritus) then @@ -880,6 +951,7 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & food2 = food2 + fMicZooN2 ! 3Zoo #if defined (__coccos) food2 = food2 + fCoccoN2 + food2 = food2 + fPhaeoN2 ! Phaeocystis #endif ! ****************************************************************************** foodsq2 = food2**2 @@ -891,6 +963,7 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & #if defined (__coccos) grazingFlux_Cocco2 = (grazingFlux2 * fCoccoN2)/food2 + grazingFlux_Phaeo2 = (grazingFlux2 * fPhaeoN2)/food2 ! Phaeocystis #endif grazingFlux_het2 = (grazingFlux2 * fHetN)/food2 if (Grazing_detritus) then @@ -911,6 +984,8 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & #if defined (__coccos) grazingFluxcarbonzoo2 = grazingFluxcarbonzoo2 + & + (grazingFlux_Cocco2 * recipQuota_Cocco * grazEff2) + grazingFluxcarbonzoo2 = grazingFluxcarbonzoo2 + & ! Phaeocystis + + (grazingFlux_Phaeo2 * recipQuota_phaeo * grazEff2) #endif !------------------------------------------------------------------------------- @@ -928,18 +1003,21 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & aux = pzPhy3 * PhyN + pzDia3 * DiaN #if defined (__coccos) aux = aux + pzCocco3 * CoccoN + aux = aux + pzPhaeo3 * PhaeoN ! Phaeocystis #endif ! ****************************************************************************** varpzPhy3 = (pzPhy3 * PhyN)/aux varpzDia3 = (pzDia3 * DiaN)/aux #if defined (__coccos) varpzCocco3 = (pzCocco3 * CoccoN)/aux + varpzPhaeo3 = (pzPhaeo3 * PhaeoN)/aux ! Phaeocystis #endif ! ****************************************************************************** fPhyN3 = varpzPhy3 * PhyN fDiaN3 = varpzDia3 * DiaN #if defined (__coccos) fCoccoN3 = varpzCocco3 * CoccoN + fPhaeoN3 = varpzPhaeo3 * PhaeoN ! Phaeocystis #endif else ! REcoM_Grazing_Variable_Preference = .false. @@ -947,6 +1025,7 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & fDiaN3 = pzDia3 * DiaN #if defined (__coccos) fCoccoN3 = pzCocco3 * CoccoN + fPhaeoN3 = pzPhaeo3 * PhaeoN ! Phaeocystis #endif endif !REcoM_Grazing_Variable_Preference @@ -955,6 +1034,7 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & food3 = fPhyN3 + fDiaN3 #if defined (__coccos) food3 = food3 + fCoccoN3 + food3 = food3 + fPhaeoN3 ! Phaeocystis #endif ! ****************************************************************************** foodsq3 = food3**2 @@ -963,6 +1043,7 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & grazingFlux_Dia3 = (grazingFlux3 * fDiaN3)/food3 #if defined (__coccos) grazingFlux_Cocco3 = (grazingFlux3 * fCoccoN3)/food3 + grazingFlux_Phaeo3 = (grazingFlux3 * fPhaeoN3)/food3 ! Phaeocystis #endif #endif @@ -1060,6 +1141,7 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & #endif #if defined (__coccos) aggregationrate = aggregationrate + agg_PP * CoccoN + aggregationrate = aggregationrate + agg_PP * PhaeoN ! Phaeocystis #endif !------------------------------------------------------------------------------- @@ -1150,6 +1232,7 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & - N_assim_Dia * DiaC & ! --> N assimilation Diatoms #if defined (__coccos) - N_assim_Cocco * CoccoC & ! --> N assimilation Coccolithophore + - N_assim_phaeo * PhaeoC & ! --> N assimilation Phaeocystis #endif + rho_N * arrFunc * O2Func * DON & ! --> DON remineralization, temperature dependent [day^-1 * mmol/m3] ! O2remin ) * dt_b + sms(k,idin) @@ -1167,6 +1250,8 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & #if defined (__coccos) - Cphot_Cocco * CoccoC & ! --> Coccolithophore photosynthesis + phyRespRate_Cocco * CoccoC & ! --> Coccolithophore respiration + - Cphot_Phaeo * PhaeoC & ! --> Phaeocystis photosynthesis + + phyRespRate_Phaeo * PhaeoC & ! --> Phaeocystis respiration #endif + rho_C1 * arrFunc * O2Func * EOC & ! --> Remineralization of DOC + HetRespFlux & ! --> Mesozooplankton respiration @@ -1211,6 +1296,7 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & + 1.0625 * N_assim_Dia * DiaC & #if defined (__coccos) + 1.0625 * N_assim_Cocco * CoccoC & + + 1.0625 * N_assim_Phaeo * PhaeoC & ! Phaeocystis #endif - 1.0625 * rho_N * arrFunc * O2Func * DON & + 2.d0 * calc_diss * DetCalc & @@ -1269,7 +1355,7 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & + chlSynth * PhyC & ! --> Chl-a synthesis - KOchl * PhyChl & ! --> Degradation loss - aggregationRate * PhyChl & ! --> Aggregation loss - - grazingFlux_phy * Chl2N & ! --> Grazing loss + - grazingFlux_phy * Chl2N & ! --> Grazing loss #if defined (__3Zoo2Det) - grazingFlux_phy2 * Chl2N & - grazingFlux_phy3 * Chl2N & ! 3Zoo @@ -1292,6 +1378,9 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & + grazingFlux_Cocco3 & - grazingFlux_Cocco3 * grazEff3 & + aggregationRate * CoccoN & + + grazingFlux_Phaeo3 * & ! Phaeocystis + - grazingFlux_Phaeo3 * grazEff3 & + + aggregationRate * PhaeoN & #endif - grazingFlux_Det * grazEff & ! --> grazing of first zoo (meso) on first detritus - grazingFlux_Det2 * grazEff2 & ! --> grazing of second zoo on first detritus @@ -1302,7 +1391,7 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & ) * dt_b + sms(k,idetn) #else sms(k,idetn) = ( & - + grazingFlux_phy & + + grazingFlux_phy & - grazingFlux_phy * grazEff & + grazingFlux_dia & - grazingFlux_dia * grazEff & @@ -1310,6 +1399,9 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & + grazingFlux_Cocco & - grazingFlux_Cocco * grazEff & + aggregationRate * CoccoN & + + grazingFlux_Phaeo * & ! Phaeocystis + - grazingFlux_Phaeo * grazEff & + + aggregationRate * PhaeoN & #endif - grazingFlux_Det * grazEff & ! Sloppy feeding is thought because of grazing flux multiplied with grazeff - grazingFlux_Det2 * grazEff2 & @@ -1327,6 +1419,8 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & #if defined (__coccos) + grazingFlux_Cocco3 & + aggregationRate * CoccoN & + + grazingFlux_Phaeo3 * & ! Phaeocystis + + aggregationRate * PhaeoN & #endif - grazingFlux * grazEff3 & + aggregationRate * PhyN & @@ -1340,7 +1434,9 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & + grazingFlux_dia & #if defined (__coccos) + grazingFlux_Cocco & - + aggregationRate * CoccoN & + + aggregationRate * CoccoN & + + grazingFlux_Phaeo * & ! Phaeocystis + + aggregationRate * PhaeoN & #endif - grazingFlux * grazEff & + aggregationRate * PhyN & @@ -1364,6 +1460,9 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & + grazingFlux_Cocco3 * recipQuota_Cocco & - grazingFlux_Cocco3 * recipQuota_Cocco * grazEff3 & + aggregationRate * CoccoC & + + grazingFlux_Phaeo3 * recipQuota_Phaeo & ! Phaeocystis + - grazingFlux_Phaeo3 * recipQuota_Phaeo * grazEff3 & + + aggregationRate * PhaeoC & #endif - grazingFlux_Det * recipDet * grazEff & - grazingFlux_Det2 * recipDet2 * grazEff2 & @@ -1382,6 +1481,9 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & + grazingFlux_Cocco * recipQuota_Cocco & - grazingFlux_Cocco * recipQuota_Cocco * grazEff & + aggregationRate * CoccoC & + + grazingFlux_Phaeo * recipQuota_Phaeo & ! Phaeocystis + - grazingFlux_Phaeo * recipQuota_Phaeo * grazEff & + + aggregationRate * PhaeoC & #endif - grazingFlux_Det * recipDet * grazEff & - grazingFlux_Det2 * recipDet2 * grazEff & @@ -1402,6 +1504,9 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & + grazingFlux_Cocco3 * recipQuota_Cocco & - grazingFlux_Cocco3 * recipQuota_Cocco * grazEff3 & + aggregationRate * CoccoC & + + grazingFlux_Phaeo3 * recipQuota_Phaeo & ! Phaeocystis + - grazingFlux_Phaeo3 * recipQuota_Phaeo * grazEff3 & + + aggregationRate * PhaeoC & #endif + aggregationRate * PhyC & + aggregationRate * DiaC & @@ -1417,7 +1522,10 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & #if defined (__coccos) + grazingFlux_Cocco * recipQuota_Cocco & - grazingFlux_Cocco * recipQuota_Cocco * grazEff & - + aggregationRate * CoccoC & + + aggregationRate * CoccoC & + + grazingFlux_Phaeo * recipQuota_Phaeo & ! Phaeocystis + - grazingFlux_Phaeo * recipQuota_Phaeo * grazEff & + + aggregationRate * PhaeoC & #endif + aggregationRate * phyC & + aggregationRate * DiaC & @@ -1433,22 +1541,23 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & !____________________________________________________________ !< Heterotrophic N sms(k,ihetn) = ( & - + grazingFlux * grazEff & ! --> Grazing on phytoplankton -> okay, because of recipQuota + + grazingFlux * grazEff & ! --> Grazing on phytoplankton -> okay, because of recipQuota #if defined (__3Zoo2Det) - grazingFlux_het2 & - Mesfecalloss_n & ! 3Zoo #endif - - hetLossFlux & ! --> Mortality - - lossN_z * HetN & ! --> Excretion of DON + - hetLossFlux & ! --> Mortality + - lossN_z * HetN & ! --> Excretion of DON ) * dt_b + sms(k,ihetn) !____________________________________________________________ !< Heterotrophic C if (Grazing_detritus) then sms(k,ihetc) = ( & - + grazingFlux_phy * recipQuota * grazEff & ! --> Grazing on small phytoplankton - + grazingFlux_Dia * recipQuota_Dia * grazEff & ! --> Grazing on diatom + + grazingFlux_phy * recipQuota * grazEff & ! --> Grazing on small phytoplankton + + grazingFlux_Dia * recipQuota_Dia * grazEff & ! --> Grazing on diatom #if defined (__coccos) - + grazingFlux_Cocco * recipQuota_Cocco * grazEff & + + grazingFlux_Cocco * recipQuota_Cocco * grazEff & + + grazingFlux_Phaeo * recipQuota_Phaeo * grazEff & ! Phaeocystis #endif #if defined (__3Zoo2Det) + grazingFlux_miczoo * recipQZoo3 * grazEff & ! 3Zoo @@ -1457,25 +1566,26 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & - Mesfecalloss_c & ! 3Zoo #endif + grazingFlux_Det * recipDet * grazEff & ! --> Grazing on detritus - - hetLossFlux * recipQZoo & ! --> Mortality loss - - lossC_z * HetC & ! --> Excretion loss - - hetRespFlux & ! --> REspiration loss + - hetLossFlux * recipQZoo & ! --> Mortality loss + - lossC_z * HetC & ! --> Excretion loss + - hetRespFlux & ! --> REspiration loss ) * dt_b + sms(k,ihetc) else sms(k,ihetc) = ( & - + grazingFlux_phy * recipQuota * grazEff & - + grazingFlux_Dia * recipQuota_Dia * grazEff & + + grazingFlux_phy * recipQuota * grazEff & + + grazingFlux_Dia * recipQuota_Dia * grazEff & #if defined (__coccos) + grazingFlux_Cocco * recipQuota_Cocco * grazEff & + + grazingFlux_Phaeo * recipQuota_Phaeo * grazEff & ! Phaeocystis #endif #if defined (__3Zoo2Det) + grazingFlux_miczoo * recipQZoo3 * grazEff & ! 3Zoo - grazingFlux_het2 * recipQZoo & - Mesfecalloss_c & ! 3Zoo #endif - - hetLossFlux * recipQZoo & - - lossC_z * HetC & - - hetRespFlux & + - hetLossFlux * recipQZoo & + - lossC_z * HetC & + - hetRespFlux & ) * dt_b + sms(k,ihetc) endif @@ -1501,6 +1611,7 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & + grazingFlux_Dia2 * recipQuota_Dia * grazEff2 & #if defined (__coccos) + grazingFlux_Cocco2 * recipQuota_Cocco * grazEff2 & + + grazingFlux_Phaeo2 * recipQuota_Phaeo * grazEff2 & ! Phaeocystis #endif + grazingFlux_het2 * recipQZoo * grazEff2 & + grazingFlux_miczoo2* recipQZoo3 * grazEff2 & ! 3Zoo @@ -1517,6 +1628,7 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & + grazingFlux_Dia2 * recipQuota_Dia * grazEff2 & #if defined (__coccos) + grazingFlux_Cocco2 * recipQuota_Cocco * grazEff2 & + + grazingFlux_Phaeo2 * recipQuota_Phaeo * grazEff2 & ! Phaeocystis #endif + grazingFlux_het2 * recipQZoo * grazEff2 & + grazingFlux_miczoo2* recipQZoo3 * grazEff2 & ! 3Zoo @@ -1547,6 +1659,7 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & + grazingFlux_Dia3 * recipQuota_Dia * grazEff3 & #if defined (__coccos) + grazingFlux_Cocco3 * recipQuota_Cocco * grazEff3 & + + grazingFlux_Phaeo3 * recipQuota_Phaeo * grazEff3 & ! Phaeocystis #endif - MicZooLossFlux * recipQZoo3 & - grazingFlux_miczoo * recipQZoo3 & @@ -1571,6 +1684,10 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & - grazingFlux_Cocco * grazEff & + grazingFlux_Cocco2 & - grazingFlux_Cocco2 * grazEff2 & + + grazingFlux_Phaeo & ! Phaeocystis + - grazingFlux_Phaeo * grazEff & + + grazingFlux_Phaeo2 & + - grazingFlux_Phaeo2 * grazEff2 & #endif + grazingFlux_het2 & - grazingFlux_het2 * grazEff2 & @@ -1597,6 +1714,8 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & #if defined (__coccos) + grazingFlux_Cocco & + grazingFlux_Cocco2 & + + grazingFlux_Phaeo & ! Phaeocystis + + grazingFlux_Phaeo2 & #endif + grazingFlux_het2 & + grazingFlux_miczoo2 & @@ -1625,7 +1744,11 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & + grazingFlux_Cocco * recipQuota_Cocco & - grazingFlux_Cocco * recipQuota_Cocco * grazEff & + grazingFlux_Cocco2 * recipQuota_Cocco & - - grazingFlux_Cocco2 * recipQuota_Cocco * grazEff2 & + - grazingFlux_Cocco2 * recipQuota_Cocco * grazEff2 & + + grazingFlux_Phaeo * recipQuota_Phaeo & ! Phaeocystis + - grazingFlux_Phaeo * recipQuota_Phaeo * grazEff & + + grazingFlux_Phaeo2 * recipQuota_Phaeo & + - grazingFlux_Phaeo2 * recipQuota_Phaeo * grazEff2 & #endif + grazingFlux_het2 * recipQZoo & - grazingFlux_het2 * recipQZoo * grazEff2 & @@ -1655,7 +1778,11 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & + grazingFlux_Cocco * recipQuota_Cocco & - grazingFlux_Cocco * recipQuota_Cocco * grazEff & + grazingFlux_Cocco2 * recipQuota_Cocco & - - grazingFlux_Cocco2 * recipQuota_Cocco * grazEff2 & + - grazingFlux_Cocco2 * recipQuota_Cocco * grazEff2 & + + grazingFlux_Phaeo * recipQuota_Phaeo & ! Phaeocystis + - grazingFlux_Phaeo * recipQuota_Phaeo * grazEff & + + grazingFlux_Phaeo2 * recipQuota_Phaeo & + - grazingFlux_Phaeo2 * recipQuota_Phaeo * grazEff2 & #endif + grazingFlux_het2 * recipQZoo & - grazingFlux_het2 * recipQZoo * grazEff2 & @@ -1704,7 +1831,8 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & + lossN * limitFacN * phyN & + lossN_d * limitFacN_Dia * DiaN & #if defined (__coccos) - + lossN_c * limitFacN_Cocco * CoccoN & + + lossN_c * limitFacN_Cocco * CoccoN & + + lossN_p * limitFacN_Phaeo * PhaeoN & ! Phaeocystis #endif + reminN * arrFunc * O2Func * DetN & + lossN_z * HetN & @@ -1724,6 +1852,7 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & + lossC_d * limitFacN_dia * DiaC & #if defined (__coccos) + lossC_c * limitFacN_cocco * CoccoC & + + lossC_p * limitFacN_Phaeo * PhaeoC & ! Phaeocystis #endif + reminC * arrFunc * O2Func * DetC & + lossC_z * HetC & @@ -1733,7 +1862,7 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & + lossC_z3 * MicZooC & ! 3Zoo #endif - rho_c1 * arrFunc * O2Func * EOC & ! O2remin - ) * dt_b + sms(k,idoc) + ) * dt_b + sms(k,idoc) !< *** Diatoms *** !< *************** @@ -1775,7 +1904,7 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & - grazingFlux_dia2 * recipQuota_dia & - grazingFlux_dia3 * recipQuota_dia & ! 3Zoo #endif - ) * dt_b + sms(k,idiac) + ) * dt_b + sms(k,idiac) !____________________________________________________________ !< Diatom Chl @@ -1827,6 +1956,20 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & #endif ) * dt_b + sms(k,icocn) +!< Phaeocystis N + +!< lossN_p: Phaeocystis loss of organic N compounds [day^-1] + + sms(k,iphan) = ( & + + N_assim_phaeo * PhaeoC & ! --> N assimilation + - lossN_p * limitFacN_phaeo * PhaeoN & ! --> DON excretion + - aggregationRate * PhaeoN & ! --> Aggregation loss + - grazingFlux_phaeo & ! --> Grazing loss +#if defined (__3Zoo2Det) + - grazingFlux_phaeo2 & + - grazingFlux_phaeo3 & ! 3Zoo +#endif + ) * dt_b + sms(k,iphan) !____________________________________________________________ !< Coccolithophore C @@ -1862,6 +2005,24 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & stop endif +!< Phaeocystis C + +!< lossC_p: Phaeocystis loss of carbon [day^-1] +!< When N : C ratio becomes too high, excretion of DOC is downregulated +!< by the limiter function limitFacN +!< aggregationRate transfers C to the detritus pool + + sms(k,iphac) = ( & + + Cphot_phaeo * PhaeoC & ! --> Photosynthesis ---->/ + - lossC_p * limitFacN_phaeo * PhaeoC & ! --> Excretion of DOC / Net photosynthesis + - phyRespRate_phaeo * PhaeoC & ! --> Respiration ----->/ + - aggregationRate * PhaeoC & ! --> Aggregation loss + - grazingFlux_phaeo * recipQuota_phaeo & ! --> Grazing loss +#if defined (__3Zoo2Det) + - grazingFlux_phaeo2 * recipQuota_phaeo & + - grazingFlux_phaeo3 * recipQuota_phaeo & ! 3Zoo +#endif + ) * dt_b + sms(k,iphac) !____________________________________________________________ !< Coccolithophore Chl @@ -1875,6 +2036,21 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & - grazingFlux_Cocco3 * Chl2N_cocco & ! 3Zoo #endif ) * dt_b + sms(k,icchl) +! Phaeocystis ChlA + +!< Chl2N: Conversion factor from mmolN to mgChla +!< Chl2N = PhyChl/PhyN + + sms(k,iphachl) = ( & + + chlSynth_phaeo * PhaeoC & ! --> Chl-a synthesis + - KOchl_phaeo * PhaeoChl & ! --> Degradation loss + - aggregationRate * PhaeoChl & ! --> Aggregation loss + - grazingFlux_phaeo * Chl2N_phaeo & ! --> Grazing loss +#if defined (__3Zoo2Det) + - grazingFlux_phaeo2 * Chl2N_phaeo & + - grazingFlux_phaeo3 * Chl2N_phaeo & ! 3Zoo +#endif + ) * dt_b + sms(k,iphachl) #endif !< *** Silicate *** @@ -1946,6 +2122,8 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & #if defined (__coccos) - N_assim_cocco * CoccoC & + lossN_c * limitFacN_cocco * CoccoN & + - N_assim_phaeo * PhaeoC & ! Phaeocystis + + lossN_p * limitFacN_phaeo * PhaeoN & #endif + lossN * limitFacN * PhyN & ! --> Excretion from small pythoplankton + lossN_d * limitFacN_dia * DiaN & ! --> Excretion from diatom @@ -2055,6 +2233,8 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & #if defined (__coccos) + Cphot_cocco * CoccoC & - phyRespRate_cocco * CoccoC & + + Cphot_phaeo * PhaeoC & ! Phaeocystis + - phyRespRate_phaeo * PhaeoC & #endif - rho_C1 * arrFunc * O2Func * EOC & ! O2remin - hetRespFlux & @@ -2240,58 +2420,69 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & end if ! ciso !------------------------------------------------------------------------------- ! Diagnostics: Averaged rates - - recipbiostep = 1.d0/real(biostep) + + recipbiostep = 1.d0/real(biostep) if (Diags) then !*** Net primary production [mmol C /(m3 * day)] vertNPPn(k) = vertNPPn(k) + ( & - + Cphot * PhyC & - - PhyRespRate * PhyC & - ) * recipbiostep + + Cphot * PhyC & + - PhyRespRate * PhyC & + ) * recipbiostep vertNPPd(k) = vertNPPd(k) + ( & - + Cphot_dia * DiaC & - - PhyRespRate_dia * DiaC & - ) * recipbiostep + + Cphot_dia * DiaC & + - PhyRespRate_dia * DiaC & + ) * recipbiostep #if defined (__coccos) vertNPPc(k) = vertNPPc(k) + ( & + Cphot_cocco * CoccoC & - PhyRespRate_cocco * CoccoC & ) * recipbiostep + vertNPPp(k) = vertNPPp(k) + ( & ! Phaeocystis + + Cphot_phaeo * PhaeoC & + - PhyRespRate_phaeo * PhaeoC & + ) * recipbiostep #endif !*** Gross primary production [mmol C /(m3 * day)] vertGPPn(k) = vertGPPn(k) + ( & - + Cphot * PhyC & - ) * recipbiostep + + Cphot * PhyC & + ) * recipbiostep vertGPPd(k) = vertGPPd(k) + ( & - + Cphot_dia * DiaC & - ) * recipbiostep + + Cphot_dia * DiaC & + ) * recipbiostep #if defined (__coccos) vertGPPc(k) = vertGPPc(k) + ( & + Cphot_cocco * CoccoC & ) * recipbiostep + vertGPPp(k) = vertGPPp(k) + ( & ! Phaeocystis + + Cphot_phaeo * PhaeoC & + ) * recipbiostep #endif !*** Net N-assimilation [mmol N/(m3 * day)] vertNNAn(k) = vertNNAn(k) + ( & - + N_assim * PhyC & - - lossN * limitFacN * PhyN & - ) * recipbiostep + + N_assim * PhyC & + - lossN * limitFacN * PhyN & + ) * recipbiostep vertNNAd(k) = vertNNAd(k) + ( & - + N_assim_dia * DiaC & - - lossN * limitFacN_dia * DiaN & - ) * recipbiostep + + N_assim_dia * DiaC & + - lossN * limitFacN_dia * DiaN & + ) * recipbiostep #if defined (__coccos) vertNNAc(k) = vertNNAc(k) + ( & + N_assim_cocco * CoccoC & - lossN * limitFacN_cocco * CoccoN & ) * recipbiostep + vertNNAp(k) = vertNNAp(k) + ( & ! Phaeocystis + + N_assim_phaeo * PhaeoC & + - lossN * limitFacN_phaeo * PhaeoN & + ) * recipbiostep #endif !*** Changed to chlorophyll degradation (commented out gross N-assimilation below) @@ -2307,6 +2498,9 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & vertChldegc(k) = vertChldegc(k) + ( & + KOchl_cocco & ) * recipbiostep + vertChldegp(k) = vertChldegp(k) + ( & ! Phaeocystis + + KOchl_phaeo & + ) * recipbiostep #endif !-------------------------------------------------------------------------------------------------------------------------------------- @@ -2326,6 +2520,7 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & + grazingFlux_Det * recipDet * grazEff & #if defined (__coccos) + grazingFlux_Cocco * recipQuota_Cocco * grazEff & + + grazingFlux_Phaeo * recipQuota_Phaeo * grazEff & ! Phaeocystis #endif #if defined (__3Zoo2Det) + GrazingFlux_DetZ2 * recipDet2 * grazEff & @@ -2348,6 +2543,10 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & vertgrazmeso_c(k) = vertgrazmeso_c(k) + ( & + grazingFlux_Cocco * recipQuota_cocco & ) * recipbiostep +!*** Grazing on phaeocystis by First Zooplankton (without grazeff, i.e. loss term for COCCO) + vertgrazmeso_p(k) = vertgrazmeso_p(k) + ( & + + grazingFlux_phaeo * recipQuota_phaeo & + ) * recipbiostep #endif !*** Grazing on first detritus by first zooplankton (without grazeff, i.e. loss term for DET) @@ -2497,6 +2696,10 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & vertaggc(k) = vertaggc(k) + ( & + aggregationrate * CoccoC & ) * recipbiostep +!*** aggregation by phaeocystis + vertaggp(k) = vertaggp(k) + ( & ! Phaeocystis + + aggregationrate * PhaeoC & + ) * recipbiostep #endif !*** excrection of DOC by phytoplankton @@ -2514,6 +2717,10 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & vertdocexc(k) = vertdocexc(k) + ( & + lossC_c * limitFacN_cocco * CoccoC & ) * recipbiostep +!*** excretion of DOC by phaeocystis + vertdocexp(k) = vertdocexp(k) + ( & ! Phaeocystis + + lossC_p * limitFacN_phaeo * PhaeoC & + ) * recipbiostep #endif !*** calcification @@ -2523,20 +2730,23 @@ subroutine REcoM_sms(n,Nn,state,thick,recipthick,SurfSR,sms,Temp, Sali_depth & ! phy respiration vertrespn(k) = vertrespn(k) + ( & - + PhyRespRate * PhyC & - ) * recipbiostep + + PhyRespRate * PhyC & + ) * recipbiostep ! dia respiration vertrespd(k) = vertrespd(k) + ( & - + PhyRespRate_dia * DiaC & - ) * recipbiostep + + PhyRespRate_dia * DiaC & + ) * recipbiostep #if defined (__coccos) ! cocco resipration vertrespc(k) = vertrespc(k) + ( & + PhyRespRate_cocco * CoccoC & ) * recipbiostep - +! phaeo resipration + vertrespp(k) = vertrespp(k) + ( & ! Phaeocystis + + PhyRespRate_phaeo * PhaeoC & + ) * recipbiostep #endif endif end do ! Main vertikal loop ends @@ -2614,7 +2824,7 @@ function recom_limiter(slope,qa,qb) Real(kind=8) :: recom_limiter Real(kind=8) :: slope, qa, qb Real(kind=8) :: dq - + dq = qa - qb if (REcoM_Geider_limiter) then recom_limiter = max(min( -slope*dq, 1.d0),0.d0) @@ -2641,7 +2851,7 @@ function iron_chemistry(Fe, totalLigand, ligandStabConst) b = ligandstabConst * (Fe - totalLigand) + 1.d0 c = -totalLigand discrim = b*b - 4.d0 * a * c - + if (a .ne. 0.d0 .and. discrim .ge. 0.d0) then ligand = ( -b + sqrt(discrim) ) / (2.d0 * a) FeL = totalLigand - ligand diff --git a/src/io_meandata.F90 b/src/io_meandata.F90 index 5115c687d..c3ebac1b5 100644 --- a/src/io_meandata.F90 +++ b/src/io_meandata.F90 @@ -452,6 +452,30 @@ subroutine ini_mean_io(mesh) if (use_REcoM) then ! call def_stream(nod2D, myDim_nod2D, 'GNAc','Gross N-assimilation coccolithophores','mmolN/(m2*d)', diags2D(:,12), io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) ! NEW call def_stream(nod2D, myDim_nod2D, 'ChlDegc','Chlorophyll degradation coccolithophores','1/d', Chldegc, io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) ! NEW + endif + +CASE ('NPPp ') + if (use_REcoM) then +! call def_stream(nod2D, myDim_nod2D, 'NPPp','Mean NPP phaeocystis','mmolC/(m2*d)', diags2D(:,9), io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) ! NEW + call def_stream(nod2D, myDim_nod2D, 'NPPp','Mean NPP phaeocystis','mmolC/(m2*d)', NPPp, io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) ! Phaeocystis + end if + +CASE ('GPPp ') + if (use_REcoM) then +! call def_stream(nod2D, myDim_nod2D, 'GPPp','Mean GPP phaeocystis','mmolC/(m2*d)', diags2D(:,10), io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) ! NEW + call def_stream(nod2D, myDim_nod2D, 'GPPp','Mean GPP phaeocystis','mmolC/(m2*d)', GPPp, io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) ! Phaeocystis + end if + +CASE ('NNAp ') + if (use_REcoM) then +! call def_stream(nod2D, myDim_nod2D, 'NNAp','Net N-assimilation phaeocystis','mmolN/(m2*d)', diags2D(:,11), io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) ! NEW + call def_stream(nod2D, myDim_nod2D, 'NNAp','Net N-assimilation phaeocystis','mmolN/(m2*d)', NNAp, io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) ! Phaeocystis + endif + +CASE ('Chldegp ') + if (use_REcoM) then +! call def_stream(nod2D, myDim_nod2D, 'GNAp','Gross N-assimilation phaeocystis','mmolN/(m2*d)', diags2D(:,12), io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) ! NEW + call def_stream(nod2D, myDim_nod2D, 'ChlDegp','Chlorophyll degradation phaeocystis','1/d', Chldegp, io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) ! Phaeocystis endif @@ -467,6 +491,9 @@ subroutine ini_mean_io(mesh) CASE ('grazmeso_c') call def_stream(nod2D, myDim_nod2D, 'grazmeso_c','Grazing flux of mesozooplankton on coccolithophores without grazing efficiency (i.e., = loss coccolithophores)','mmolC/(m2*d)', grazmeso_c, io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) +CASE ('grazmeso_p') + call def_stream(nod2D, myDim_nod2D, 'grazmeso_p','Grazing flux of mesozooplankton on phaeocystis without grazing efficiency (i.e., = loss phaeocystis)','mmolC/(m2*d)', grazmeso_p, io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) + CASE ('grazmeso_det') call def_stream(nod2D, myDim_nod2D, 'grazmeso_det','Grazing flux of mesozooplankton on first detritus group without grazing efficiency (i.e., = loss first detritus group)','mmolC/(m2*d)', grazmeso_det, io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) @@ -489,6 +516,9 @@ subroutine ini_mean_io(mesh) CASE ('grazmacro_c') call def_stream(nod2D, myDim_nod2D, 'grazmacro_c','Grazing flux of macrozooplankton on coccolithophores without grazing efficiency (i.e., = loss coccolithophores)','mmolC/(m2*d)', grazmacro_c, io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) +CASE ('grazmacro_p') + call def_stream(nod2D, myDim_nod2D, 'grazmacro_p','Grazing flux of macrozooplankton on phaeocystis without grazing efficiency (i.e., = loss phaeocystis)','mmolC/(m2*d)', grazmacro_p, io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) + CASE ('grazmacro_mes') call def_stream(nod2D, myDim_nod2D, 'grazmacro_mes','Grazing flux of mesozooplankton on macrozooplankton without grazing efficiency (i.e., = loss mesozooplankton)','mmolC/(m2*d)', grazmacro_mes, io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) @@ -514,6 +544,9 @@ subroutine ini_mean_io(mesh) CASE ('grazmicro_c') call def_stream(nod2D, myDim_nod2D, 'grazmicro_c','Grazing flux of microzooplankton on coccolithophores without grazing efficiency (i.e., = loss coccolithophores)','mmolC/(m2*d)', grazmicro_c, io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) +CASE ('grazmicro_p') + call def_stream(nod2D, myDim_nod2D, 'grazmicro_p','Grazing flux of microzooplankton on phaeocystis without grazing efficiency (i.e., = loss phaeocystis)','mmolC/(m2*d)', grazmicro_p, io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) + #endif !___________________________________________________________________________________________________________________________________ @@ -575,21 +608,25 @@ subroutine ini_mean_io(mesh) -!CASE ('grazmeso_tot ') +! CASE ('grazmeso_tot ') ! if (use_REcoM) then -! call def_stream((/nl-1, nod2D/), (/nl-1, myDim_nod2D/), 'grazmeso_tot','Total grazing flux of mesozooplankton', 'mmolC/(m2*d)', grazmeso_tot(:,:), ! io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) +! call def_stream((/nl-1, nod2D/), (/nl-1, myDim_nod2D/), 'grazmeso_tot','Total grazing flux of mesozooplankton', 'mmolC/(m2*d)', grazmeso_tot(:,:), io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) ! endif !CASE ('grazmeso_n ') ! if (use_REcoM) then -! call def_stream((/nl-1, nod2D/), (/nl-1, myDim_nod2D/), 'grazmeso_n','Grazing of mesozooplankton on small phytoplankton', 'mmolC/(m2*d)', grazmeso_n(:!,:), io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) +! call def_stream((/nl-1, nod2D/), (/nl-1, myDim_nod2D/), 'grazmeso_n','Grazing of mesozooplankton on small phytoplankton', 'mmolC/(m2*d)', grazmeso_n(:,:), io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) ! endif !CASE ('grazmeso_d ') ! if (use_REcoM) then -! call def_stream((/nl-1, nod2D/), (/nl-1, myDim_nod2D/), 'grazmeso_d','Grazing of mesozooplankton on diatoms', 'mmolC/(m2*d)', grazmeso_d(:,:), ! io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) +! call def_stream((/nl-1, nod2D/), (/nl-1, myDim_nod2D/), 'grazmeso_d','Grazing of mesozooplankton on diatoms', 'mmolC/(m2*d)', grazmeso_d(:,:), io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) ! endif !CASE ('grazmeso_c ') ! if (use_REcoM) then -! call def_stream((/nl-1, nod2D/), (/nl-1, myDim_nod2D/), 'grazmeso_c','Grazing of mesozooplankton on coccolithophores', 'mmolC/(m2*d)', grazmeso_c(:,:)!, io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) +! call def_stream((/nl-1, nod2D/), (/nl-1, myDim_nod2D/), 'grazmeso_c','Grazing of mesozooplankton on coccolithophores', 'mmolC/(m2*d)', grazmeso_c(:,:), io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) +! endif +!CASE ('grazmeso_p ') +! if (use_REcoM) then +! call def_stream((/nl-1, nod2D/), (/nl-1, myDim_nod2D/), 'grazmeso_p','Grazing of mesozooplankton on phaeocystis', 'mmolC/(m2*d)', grazmeso_p(:,:), io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) ! Phaeocystis ! endif CASE ('respmeso ') if (use_REcoM) then @@ -623,6 +660,10 @@ subroutine ini_mean_io(mesh) if (use_REcoM) then call def_stream((/nl-1, nod2D/), (/nl-1, myDim_nod2D/), 'aggc','Aggregation of coccolithophores', 'mmolC/(m2*d)', aggc(:,:), io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) endif +CASE ('aggp ') + if (use_REcoM) then + call def_stream((/nl-1, nod2D/), (/nl-1, myDim_nod2D/), 'aggp','Aggregation of phaeocystis', 'mmolC/(m2*d)', aggp(:,:), io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) ! Phaeocystis + endif CASE ('docexn ') if (use_REcoM) then call def_stream((/nl-1, nod2D/), (/nl-1, myDim_nod2D/), 'docexn','DOC excretion by small phytoplankton', 'mmolC/(m2*d)', docexn(:,:), io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) @@ -635,6 +676,10 @@ subroutine ini_mean_io(mesh) if (use_REcoM) then call def_stream((/nl-1, nod2D/), (/nl-1, myDim_nod2D/), 'docexc','DOC excretion by coccolithophores', 'mmolC/(m2*d)', docexc(:,:), io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) endif +CASE ('docexp ') + if (use_REcoM) then + call def_stream((/nl-1, nod2D/), (/nl-1, myDim_nod2D/), 'docexp','DOC excretion by phaeocystis', 'mmolC/(m2*d)', docexp(:,:), io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) ! Phaeocystis + endif CASE ('respn ') if (use_REcoM) then call def_stream((/nl-1, nod2D/), (/nl-1, myDim_nod2D/), 'respn','Respiration by small phytoplankton', 'mmolC/(m2*d)', respn(:,:), io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) @@ -647,6 +692,10 @@ subroutine ini_mean_io(mesh) if (use_REcoM) then call def_stream((/nl-1, nod2D/), (/nl-1, myDim_nod2D/), 'respc','Respiration by coccolithophores', 'mmolC/(m2*d)', respc(:,:), io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) endif +CASE ('respp ') + if (use_REcoM) then + call def_stream((/nl-1, nod2D/), (/nl-1, myDim_nod2D/), 'respp','Respiration by phaeocystis', 'mmolC/(m2*d)', respp(:,:), io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) ! Phaeocystis + endif CASE ('NPPn3D ') if (use_REcoM) then call def_stream((/nl-1, nod2D/), (/nl-1, myDim_nod2D/), 'NPPn3D','Net primary production of small phytoplankton', 'mmolC/(m2*d)', NPPn3D(:,:), io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) @@ -659,7 +708,10 @@ subroutine ini_mean_io(mesh) if (use_REcoM) then call def_stream((/nl-1, nod2D/), (/nl-1, myDim_nod2D/), 'NPPc3D','Net primary production of coccolithophores', 'mmolC/(m2*d)', NPPc3D(:,:), io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) endif - +CASE ('NPPp3D ') + if (use_REcoM) then + call def_stream((/nl-1, nod2D/), (/nl-1, myDim_nod2D/), 'NPPp3D','Net primary production of phaeocystis', 'mmolC/(m2*d)', NPPp3D(:,:), io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) ! Phaeocystis + endif @@ -745,9 +797,16 @@ subroutine ini_mean_io(mesh) call def_stream((/nl-1, nod2D/), (/nl-1, myDim_nod2D/), 'CoccoC', 'CoccoC', '[mmol/m3]', tr_arr(:,:,j), io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) ! NEW else if (tracer_id(j)==1031) then call def_stream((/nl-1, nod2D/), (/nl-1, myDim_nod2D/), 'CoccoChl', 'CoccoChl', '[mg/m3]', tr_arr(:,:,j), io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) ! NEW +! NEW for Phaeocystis else if (tracer_id(j)==1032) then - call def_stream((/nl-1, nod2D/), (/nl-1, myDim_nod2D/), 'Zoo3N', 'Zoo3N', '[mmol/m3]', tr_arr(:,:,j), io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) ! NEW 3Zoo + call def_stream((/nl-1, nod2D/), (/nl-1, myDim_nod2D/), 'PhaeoN', 'PhaeoN', '[mmol/m3]', tr_arr(:,:,j), io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) ! NEW else if (tracer_id(j)==1033) then + call def_stream((/nl-1, nod2D/), (/nl-1, myDim_nod2D/), 'PhaeoC', 'PhaeoC', '[mmol/m3]', tr_arr(:,:,j), io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) ! NEW + else if (tracer_id(j)==1034) then + call def_stream((/nl-1, nod2D/), (/nl-1, myDim_nod2D/), 'PhaeoChl', 'PhaeoChl', '[mg/m3]', tr_arr(:,:,j), io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) ! NEW + else if (tracer_id(j)==1035) then + call def_stream((/nl-1, nod2D/), (/nl-1, myDim_nod2D/), 'Zoo3N', 'Zoo3N', '[mmol/m3]', tr_arr(:,:,j), io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) ! NEW 3Zoo + else if (tracer_id(j)==1036) then call def_stream((/nl-1, nod2D/), (/nl-1, myDim_nod2D/), 'Zoo3C', 'Zoo3C', '[mmol/m3]', tr_arr(:,:,j), io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) ! NEW 3Zoo else call def_stream((/nl-1, nod2D/), (/nl-1, myDim_nod2D/), 'tra_'//id_string, 'passive tracer ID='//id_string, 'n/a', tr_arr(:,:,j), io_list(i)%freq, io_list(i)%unit, io_list(i)%precision, mesh) diff --git a/src/oce_ale_tracer.F90 b/src/oce_ale_tracer.F90 index 2c2e45970..70e078c3e 100644 --- a/src/oce_ale_tracer.F90 +++ b/src/oce_ale_tracer.F90 @@ -1120,6 +1120,7 @@ subroutine ver_sinking_recom_benthos(tr_num,mesh) if (any(recom_det_tracer_id == tracer_id(tr_num))) Vben = Vdet if (any(recom_phy_tracer_id == tracer_id(tr_num))) Vben = VPhy if (any(recom_dia_tracer_id == tracer_id(tr_num))) Vben = VDia + if (any(recom_phaeo_tracer_id == tracer_id(tr_num))) Vben = VPhaeo ! NEW Phaeo: added this line Vben = Vdet_a * abs(zbar_3d_n(:,n)) + Vben end if @@ -1854,7 +1855,7 @@ FUNCTION bc_surface(n, id, mesh) bc_surface=0.0_WP ! OG added bc for recom fields CASE (1022) ! OXY bc_surface= dt*GloO2flux_seaicemask(n) - CASE (1023:1032) + CASE (1023:1035) ! NEW Phaeo: changed from 1032 to 1035 bc_surface=0.0_WP ! OG added bc for recom fields CASE (1302) ! Before (1033) ! DIC_13 if (ciso) then @@ -1882,7 +1883,7 @@ FUNCTION bc_surface(n, id, mesh) end if CASE (1405:1421) bc_surface=0.0_WP ! organic 14C - CASE (1033:1299) + CASE (1036:1299) ! NEW Phaeo: changed from 1033 to 1036 bc_surface=0.0_WP ! OG added bc for recom fields - adapted to ciso by MB #endif CASE (101) ! apply boundary conditions to tracer ID=101 diff --git a/src/oce_setup_step.F90 b/src/oce_setup_step.F90 index 3d5689877..abdb59660 100755 --- a/src/oce_setup_step.F90 +++ b/src/oce_setup_step.F90 @@ -632,7 +632,7 @@ SUBROUTINE oce_initial_state(mesh) write (id_string, "(I4)") id write(*,*) 'initializing '//trim(i_string)//'th tracer with ID='//trim(id_string) end if - CASE (1023:1035) + CASE (1023:1038) ! NEW Phaeo: changed from 1035 to 1038 (although I don't know why it was 1035 initially, should have been 1032??) tr_arr(:,:,i)=0.0_WP if (mype==0 .and. my_fesom_group == 0) then !OG write (i_string, "(I4)") i diff --git a/src/recom_sinking.F90 b/src/recom_sinking.F90 index c3964b15c..64506de79 100644 --- a/src/recom_sinking.F90 +++ b/src/recom_sinking.F90 @@ -70,9 +70,15 @@ subroutine recom_sinking_new(tr_num,mesh) #if defined (__coccos) elseif(tracer_id(tr_num)==1029 .or. & !icocn tracer_id(tr_num)==1030 .or. & !icocc - tracer_id(tr_num)==1031 ) then !icchl + tracer_id(tr_num)==1031 ) then !icchl Vsink = VCocco + + elseif(tracer_id(tr_num)==1032 .or. & !icocn + tracer_id(tr_num)==1033 .or. & !icocc + tracer_id(tr_num)==1034 ) then !icchl + + Vsink = VPhaeo #endif elseif(tracer_id(tr_num)==1020) then !iphycal