MODULE MOD_PARAMETER !** This routine reads in the control parameters for the biological model. USE MOD_1D USE MOD_PHYTOPLANKTON USE MOD_ZOOPLANKTON USE MOD_BACTERIA USE MOD_DETRITUS USE MOD_DOM USE MOD_NUTRIENT Use Input_Util2 ! USE LIMS, ONLY: KB IMPLICIT NONE SAVE CHARACTER(LEN=50) :: BIONAME, PARMINDEX CHARACTER(LEN=50), ALLOCATABLE :: PHYTO_NAME(:), PHYTO_UNIT(:) CHARACTER(LEN=50), ALLOCATABLE :: ZOO_NAME(:), ZOO_UNIT(:) CHARACTER(LEN=50), ALLOCATABLE :: NUTRIENT_NAME(:), NUTRIENT_UNIT(:) CHARACTER(LEN=50), ALLOCATABLE :: DETRITUS_NAME(:), DETRITUS_UNIT(:) CHARACTER(LEN=50), ALLOCATABLE :: DOM_NAME(:), DOM_UNIT(:) CHARACTER(LEN=50), ALLOCATABLE :: BACTERIA_NAME(:), BACTERIA_UNIT(:) CHARACTER(LEN=50), ALLOCATABLE :: AUX_NAME(:), AUX_UNIT(:) CHARACTER(LEN=50) :: MODEL_STRUCTURE REAL(SPP) :: TOTALL CHARACTER(LEN=250) :: biofile !***************************** CONTAINS ******************************** CONTAINS SUBROUTINE GET_PARAMETER(fname) character(len=*) :: fname logical :: fexist INTEGER :: I,J,K LOGICAL :: MULTIPLE_PRINT !************************ BEGINNING EXECUTABLE ********************** KBVM1=KBV-1 !ensure sediment parameter file exists inquire(file=trim(fname),exist=fexist) if(.not.fexist)then write(*,*)'biological parameter file: ',trim(fname),' does not exist' write(*,*)'stopping' stop end if OPEN (1, FILE=trim(fname),status='old') REWIND (1) READ(1,*)PARMINDEX DO WHILE (PARMINDEX .NE. 'STRUCTURE') !DETERMING MODEL STRUCTURE READ(1,*)PARMINDEX END DO READ(1,*)PARMINDEX MODEL_STRUCTURE=PARMINDEX SELECT CASE (PARMINDEX) CASE ('NPZ') NNN=1 NNP=1 NNZ=1 NNM=0 NNB=0 NND=0 NNA=0 NTT=NNN+NNP+NNZ+NNM+NNB+NND+NNA !TOTAL VARIABLE NUMBER FOR VERTICAL MIXING INN=1 INP=INN+NNN INZ=INP+NNP INM=INZ+NNZ INB=INM+NNM IND=INB+NNB INA=IND+NND ALLOCATE (NUTRIENT_NAME(NNN)) ALLOCATE (NUTRIENT_UNIT(NNN)) ALLOCATE (PHYTO_NAME(NNP)) ALLOCATE (PHYTO_UNIT(NNP)) ALLOCATE (ZOO_NAME(NNZ)) ALLOCATE (ZOO_UNIT(NNZ)) NUTRIENT_NAME(1) = 'Nitrogen' NUTRIENT_UNIT(1) = 'mmole N m-3' PHYTO_NAME(1) = 'Phytoplankton' PHYTO_UNIT(1) = 'mmole C m-3' ZOO_NAME(1) = 'Zooplankton' ZOO_UNIT(1) = 'mmole C m-3' CASE ('NPZD') NNN=1 NNP=1 NNZ=1 NNM=0 NNB=0 NND=1 NNA=0 NTT=NNN+NNP+NNZ+NNM+NNB+NND+NNA !TOTAL VARIABLE NUMBER FOR VERTICAL MIXING INN=1 INP=INN+NNN INZ=INP+NNP INM=INZ+NNZ INB=INM+NNM IND=INB+NNB INA=IND+NND ALLOCATE (NUTRIENT_NAME(NNN)) ALLOCATE (NUTRIENT_UNIT(NNN)) ALLOCATE (PHYTO_NAME(NNP)) ALLOCATE (PHYTO_UNIT(NNP)) ALLOCATE (ZOO_NAME(NNZ)) ALLOCATE (ZOO_UNIT(NNZ)) ALLOCATE (DETRITUS_NAME(NND)) ALLOCATE (DETRITUS_UNIT(NND)) NUTRIENT_NAME(1) = 'Nitrogen' NUTRIENT_UNIT(1) = 'mmole N m-3' PHYTO_NAME(1) = 'Phytoplankton' PHYTO_UNIT(1) = 'mmole C m-3' ZOO_NAME(1) = 'Zooplankton' ZOO_UNIT(1) = 'mmole C m-3' DETRITUS_NAME(1) = 'Detritus' DETRITUS_UNIT(1) = 'mmole C m-3' CASE ('FASHAM') NNN=2 NNP=1 NNZ=1 NNM=1 NNB=1 NND=1 NNA=0 NTT=NNN+NNP+NNZ+NNM+NNB+NND+NNA !TOTAL VARIABLE NUMBER FOR VERTICAL MIXING INN=1 INP=INN+NNN INZ=INP+NNP INM=INZ+NNZ INB=INM+NNM IND=INB+NNB INA=IND+NND ALLOCATE (NUTRIENT_NAME(NNN)) ALLOCATE (NUTRIENT_UNIT(NNN)) ALLOCATE (PHYTO_NAME(NNP)) ALLOCATE (PHYTO_UNIT(NNP)) ALLOCATE (ZOO_NAME(NNZ)) ALLOCATE (ZOO_UNIT(NNZ)) ALLOCATE (DETRITUS_NAME(NND)) ALLOCATE (DETRITUS_UNIT(NND)) ALLOCATE (DOM_NAME(NNM)) ALLOCATE (DOM_UNIT(NNM)) ALLOCATE (BACTERIA_NAME(NNB)) ALLOCATE (BACTERIA_UNIT(NNB)) NUTRIENT_NAME(1) = 'NH4' NUTRIENT_UNIT(1) = 'mmole N m-3' NUTRIENT_NAME(2) = 'NO3' NUTRIENT_UNIT(2) = 'mmole N m-3' PHYTO_NAME(1) = 'Phytoplankton' PHYTO_UNIT(1) = 'mmole C m-3' ZOO_NAME(1) = 'Zooplankton' ZOO_UNIT(1) = 'mmole C m-3' DETRITUS_NAME(1) = 'Detritus' DETRITUS_UNIT(1) = 'mmole C m-3' DOM_NAME(1) = 'DOM' DOM_UNIT(1) = 'mmole C m-3' BACTERIA_NAME(1) = 'Bacteria' BACTERIA_UNIT(1) = 'mmole C m-3' CASE ('N2P2Z2D2') NNN=3 NNP=2 NNZ=2 NNM=0 NNB=0 NND=2 NNA=0 NTT=NNN+NNP+NNZ+NNM+NNB+NND+NNA !TOTAL VARIABLE NUMBER FOR VERTICAL MIXING INN=1 INP=INN+NNN INZ=INP+NNP INM=INZ+NNZ INB=INM+NNM IND=INB+NNB INA=IND+NND ALLOCATE (NUTRIENT_NAME(NNN)) ALLOCATE (NUTRIENT_UNIT(NNN)) ALLOCATE (PHYTO_NAME(NNP)) ALLOCATE (PHYTO_UNIT(NNP)) ALLOCATE (ZOO_NAME(NNZ)) ALLOCATE (ZOO_UNIT(NNZ)) ALLOCATE (DETRITUS_NAME(NND)) ALLOCATE (DETRITUS_UNIT(NND)) NUTRIENT_NAME(1) = 'NH4' NUTRIENT_UNIT(1) = 'mmole N m-3' NUTRIENT_NAME(2) = 'NO3' NUTRIENT_UNIT(2) = 'mmole N m-3' NUTRIENT_NAME(3) = 'SiO3' NUTRIENT_UNIT(3) = 'mmole Si m-3' PHYTO_NAME(1) = 'Small_phyto' PHYTO_UNIT(1) = 'mmole C m-3' PHYTO_NAME(2) = 'Large_phyto' PHYTO_UNIT(2) = 'mmole C m-3' ZOO_NAME(1) = 'Microzooplankton' ZOO_UNIT(1) = 'mmole C m-3' ZOO_NAME(2) = 'Mesozooplankton' ZOO_UNIT(2) = 'mmole C m-3' DETRITUS_NAME(1) = 'Detritus_N' DETRITUS_UNIT(1) = 'mmole N m-3' DETRITUS_NAME(2) = 'Detritus_Si' DETRITUS_UNIT(2) = 'mmole Si m-3' CASE ('N2P2Z2D2B') NNN=2 NNP=2 NNZ=2 NNM=0 NNB=1 NND=2 NNA=0 NTT=NNN+NNP+NNZ+NNM+NNB+NND+NNA !TOTAL VARIABLE NUMBER FOR VERTICAL MIXING INN=1 INP=INN+NNN INZ=INP+NNP INM=INZ+NNZ INB=INM+NNM IND=INB+NNB INA=IND+NND ALLOCATE (NUTRIENT_NAME(NNN)) ALLOCATE (NUTRIENT_UNIT(NNN)) ALLOCATE (PHYTO_NAME(NNP)) ALLOCATE (PHYTO_UNIT(NNP)) ALLOCATE (ZOO_NAME(NNZ)) ALLOCATE (ZOO_UNIT(NNZ)) ALLOCATE (DETRITUS_NAME(NND)) ALLOCATE (DETRITUS_UNIT(NND)) ALLOCATE (BACTERIA_NAME(NNB)) ALLOCATE (BACTERIA_UNIT(NNB)) NUTRIENT_NAME(1) = 'PO4' NUTRIENT_UNIT(1) = 'mmole P m-3' NUTRIENT_NAME(2) = 'SiO3' NUTRIENT_UNIT(2) = 'mmole Si m-3' PHYTO_NAME(1) = 'Small_phyto' PHYTO_UNIT(1) = 'mmole C m-3' PHYTO_NAME(2) = 'Large_phyto' PHYTO_UNIT(2) = 'mmole C m-3' ZOO_NAME(1) = 'Microzooplankton' ZOO_UNIT(1) = 'mmole C m-3' ZOO_NAME(2) = 'Mesozooplankton' ZOO_UNIT(2) = 'mmole C m-3' DETRITUS_NAME(1) = 'Detritus_P' DETRITUS_UNIT(1) = 'mmole P m-3' DETRITUS_NAME(2) = 'Detritus_Si' DETRITUS_UNIT(2) = 'mmole Si m-3' BACTERIA_NAME(1) = 'Bacteria' BACTERIA_UNIT(1) = 'mmole C m-3' CASE ('N2P2Z2D2SB') NNN=2 NNP=2 NNZ=2 NNM=1 NNB=2 NND=2 NNA=0 NTT=NNN+NNP+NNZ+NNM+NNB+NND+NNA !TOTAL VARIABLE NUMBER FOR VERTICAL MIXING INN=1 INP=INN+NNN INZ=INP+NNP INM=INZ+NNZ INB=INM+NNM IND=INB+NNB INA=IND+NND ALLOCATE (NUTRIENT_NAME(NNN)) ALLOCATE (NUTRIENT_UNIT(NNN)) ALLOCATE (PHYTO_NAME(NNP)) ALLOCATE (PHYTO_UNIT(NNP)) ALLOCATE (ZOO_NAME(NNZ)) ALLOCATE (ZOO_UNIT(NNZ)) ALLOCATE (DETRITUS_NAME(NND)) ALLOCATE (DETRITUS_UNIT(NND)) ALLOCATE (DOM_NAME(NNM)) ALLOCATE (DOM_UNIT(NNM)) ALLOCATE (BACTERIA_NAME(NNB)) ALLOCATE (BACTERIA_UNIT(NNB)) NUTRIENT_NAME(1) = 'NH4' NUTRIENT_UNIT(1) = 'mmole N m-3' NUTRIENT_NAME(2) = 'NO3' NUTRIENT_UNIT(2) = 'mmole N m-3' PHYTO_NAME(1) = 'Small_phyto' PHYTO_UNIT(1) = 'mmole C m-3' PHYTO_NAME(2) = 'Large_phyto' PHYTO_UNIT(2) = 'mmole C m-3' ZOO_NAME(1) = 'Microzooplankton' ZOO_UNIT(1) = 'mmole C m-3' ZOO_NAME(2) = 'Mesozooplankton' ZOO_UNIT(2) = 'mmole C m-3' DETRITUS_NAME(1) = 'Small_detritus' DETRITUS_UNIT(1) = 'mmole C m-3' DETRITUS_NAME(2) = 'Large_detritus' DETRITUS_UNIT(2) = 'mmole C m-3' DOM_NAME(1) = 'DOM' DOM_UNIT(1) = 'mmole C m-3' BACTERIA_NAME(1) = 'Bacteria' BACTERIA_UNIT(1) = 'mmole C m-3' CASE('NEW') READ(1,*)PARMINDEX DO WHILE (PARMINDEX.NE.'L_FUNCTION') SELECT CASE (PARMINDEX) !ASSIGNMENT FOR NEW MODEL CASE ('PHYTOPLANKTON') READ(1,*)NNP ALLOCATE (PHYTO_NAME(NNP), PHYTO_UNIT(NNP)) DO J=1,NNP READ(1,*)PHYTO_NAME(J),PHYTO_UNIT(J) END DO CASE ('ZOOPLANKTON') READ(1,*)NNZ ALLOCATE (ZOO_NAME(NNZ), ZOO_UNIT(NNZ)) DO J=1,NNZ READ(1,*)ZOO_NAME(J),ZOO_UNIT(J) END DO CASE ('NUTRIENT') READ(1,*)NNN ALLOCATE (NUTRIENT_NAME(NNN), NUTRIENT_UNIT(NNN)) DO J=1,NNN READ(1,*)NUTRIENT_NAME(J),NUTRIENT_UNIT(J) END DO CASE ('BACTERIA') READ(1,*)NNB ALLOCATE (BACTERIA_NAME(NNB), BACTERIA_UNIT(NNB)) DO J=1,NNB READ(1,*)BACTERIA_NAME(J),BACTERIA_UNIT(J) END DO CASE ('DETRITUS') READ(1,*)NND ALLOCATE (DETRITUS_NAME(NND), DETRITUS_UNIT(NND)) DO J=1,NND READ(1,*)DETRITUS_NAME(J),DETRITUS_UNIT(J) END DO CASE ('DOM') READ(1,*)NNM ALLOCATE (DOM_NAME(NNM), DOM_UNIT(NNM)) DO J=1,NNM READ(1,*)DOM_NAME(J),DOM_UNIT(J) END DO CASE ('AUXILIARY') READ(1,*)NNA ALLOCATE (AUX_NAME(NNA), AUX_UNIT(NNA)) DO J=1,NNA READ(1,*)AUX_NAME(J),AUX_UNIT(J) END DO END SELECT READ(1,*)PARMINDEX END DO NTT=NNN+NNP+NNZ+NNM+NNB+NND+NNA !TOTAL VARIABLE NUMBER FOR VERTICAL MIXING INN=1 INP=INN+NNN INZ=INP+NNP INM=INZ+NNZ INB=INM+NNM IND=INB+NNB INA=IND+NND END SELECT !******************* BIO_NAME ASSIGNMENT FOR NETCDF OUT PUT *************** ALLOCATE (BIO_NAME(NTT,4)) BIO_NAME(:,3) = 'Concentration' BIO_NAME(:,4) = 'Array' DO J=INN,NNN BIO_NAME(J,1)=NUTRIENT_NAME(J) BIO_NAME(J,2)=NUTRIENT_UNIT(J) END DO DO J=INP,INP+NNP-1 BIO_NAME(J,1)=PHYTO_NAME(J-INP+1) BIO_NAME(J,2)=PHYTO_UNIT(J-INP+1) END DO DO J=INZ,INZ+NNZ-1 BIO_NAME(J,1)=ZOO_NAME(J-INZ+1) BIO_NAME(J,2)=ZOO_UNIT(J-INZ+1) END DO DO J=INM,INM+NNM-1 BIO_NAME(J,1)=DOM_NAME(J-INM+1) BIO_NAME(J,2)=DOM_UNIT(J-INM+1) END DO DO J=INB,INB+NNB-1 BIO_NAME(J,1)=BACTERIA_NAME(J-INB+1) BIO_NAME(J,2)=BACTERIA_UNIT(J-INB+1) END DO DO J=IND,IND+NND-1 BIO_NAME(J,1)=DETRITUS_NAME(J-IND+1) BIO_NAME(J,2)=DETRITUS_UNIT(J-IND+1) END DO DO J=INA,INA+NNA-1 BIO_NAME(J,1)=AUX_NAME(J-INA+1) BIO_NAME(J,2)=AUX_UNIT(J-INA+1) END DO NO3_ON = .FALSE. !NH4 INHIBITION PO4_ON = .FALSE. !BAC UPTAKE ON PO4 DOCDON = .FALSE. !BOTH CONSIDERED IF(NNN.GT.1) THEN IF(NUTRIENT_NAME(2).EQ.'NO3') NO3_ON = .TRUE. ENDIF IF(NNM.GE.2) THEN IF(DOM_NAME(1).EQ.'DOC'.AND.DOM_NAME(2).EQ.'DON') DOCDON = .TRUE. END IF IF(NUTRIENT_NAME(1).EQ.'PO4') PO4_ON = .TRUE. !************* ALLOCATING GLOBAL PARAMETERS AND INITIALIZAITON ALLOCATE (BIO_VAR(KBV,NTT)) ; BIO_VAR = 0.0_SPP !ENSEMBLE VARIABLES FOR MIXING ALLOCATE (DELTA_D(KBV)) ; DELTA_D = 1.0_SPP !LAYER THICKNESS ALLOCATE (DELTA_Z(KBV)) ; DELTA_Z = 1.0_SPP !THICKNESS BETWEEN LAYER CENTRE ALLOCATE (DEPTH_Z(KBV)) ; DEPTH_Z = 1.0_SPP !DEPTH AT EACH LAYER CENTER ALLOCATE (KM_BIO(KBV)) ; KM_BIO = 0.0_SPP !DIFFUSIVITY ALLOCATE (T_BIO(KBV)) ; T_BIO = 0.0_SPP !TEMPERATURE !************* ALLOCATING PHYTOPLANKTON AND INITIALIZAITON ************* ALLOCATE (ALPHAP(NNP)) ; ALPHAP = 0.0_SPP !LIGHT FUNCTION COEFFICIENT ALLOCATE (ALPHA_U(NNP)) ; ALPHA_U = 0.5_SPP !COEFFICIENT BETWEEN MULTIPLICAITON & MINIMUM ALLOCATE (A_TP(NNP)) ; A_TP = 0.0_SPP !EXPONENTIAL FOR T FORCING ; ATANU_C = 0.03_SPP !ATTENUATION COEFFICIENT OF CHLOROPHYLL ; ATANU_D = 0.01_SPP !ATTENUATION COEFFICIENT OF DETRITUS ; ATANU_W = 0.04_SPP !ATTENUATION COEFFICIENT OF WATER ALLOCATE (BETAP(NNP)) ; BETAP = 0.0_SPP !PHOTOINHIBITION COEFFICIENT ALLOCATE (BIO_P(KBV,NNP)) ; BIO_P = 0.0_SPP !PHYTO BIOMASS ALLOCATE (CHL2C(NNP)) ; CHL2C = 0.24_SPP !CHLOROPHYLL TO CARBON RATIO IN PHYTO ALLOCATE (D_DOM(NNP)) ; D_DOM = 0.0_SPP !ACTIVE EXUDATION COEFFICIENT ALLOCATE (DPDOM(NNP)) ; DPDOM = 0.0_SPP !COEFFICIENT OF PHYTO EXUDATION ALLOCATE (FVP(KBV,NNP)) ; FVP = 0.0_DPP !PHYTO AFTER THRESHOLD SUBSTRACTION ALLOCATE (I_OPT(NNP)) ; I_OPT = 100._SPP !OPTIMAL LIGHT FOR PHYTO ; IRRAD0 = 200._SPP !IRRADIANCE AT THE SEA SURFACE ALLOCATE (K_LIGHT(NNP)) ; K_LIGHT = 50._SPP !HALF_SATURATION OF LIGHT FUNCTIONS ALLOCATE (MPD(NNP)) ; MPD = 0.0_SPP !PHYTO MORTALITY EOFFICIENT ALLOCATE (M_P(NNP)) ; M_P = 1.0_SPP !PHYTO MORTALITY ORDER ALLOCATE (N_P(NNP)) ; N_P = 1.0_SPP !POWER OF LIGHT FUNCTIONS ; PARFRAC = 0.43_SPP ALLOCATE (P_D(KBV,NNP)) ; P_D = 0.0_SPP !PHYTO MORTALITY ALLOCATE (P_DOM(KBV,NNP)) ; P_DOM = 0.0_SPP !PHYTO EXUDATION OF DOM ALLOCATE (P_N(KBV,NNP)) ; P_N = 0.0_SPP !PHYTO RESPIRATION ALLOCATE (P_0(NNP)) ; P_0 = 0.0_SPP !PHYTO THRESHOLD ; RP_T = 0.0_SPP !EXPONENTIAL FOR T FORCING ON RESPIRATION ALLOCATE (R_P(NNP)) ; R_P = 1.0E-7_SPP !PHYTO RESPIRATION COEFFICIENT ALLOCATE (T_OPTP(NNP)) ; T_OPTP = 20._SPP !OPTIMAL TEMPERATURE FOR PHYTO ALLOCATE (ULR(NNP)) ; ULR = 0.0_SPP !LIGHT GROWHT FACTOR FOR PHYTO ALLOCATE (UMAX(NNP)) ; UMAX = 1.16E-5_SPP !PHYTO MAXIMUM GROWTH RATE ALLOCATE (UNR(NNP,NNN+1)) ; UNR = 1.0_SPP !NUTRIENT GROWTH FACTOR FOR PHYTO ALLOCATE (UNRMIN(NNP)) ; UNRMIN = 1.0_SPP !MINIMUM NUTRIENT FACTOR FOR PHYTO ALLOCATE (U_P(KBV,NNP)) ; U_P = 0.0_SPP !PHYTO GROWTH ALLOCATE (UTR(NNP)) ; UTR = 1.0_SPP !T GORWTH FACTOR FOR PHYTO ALLOCATE (W_P(NNP)) ; W_P = 1.0_DPP !SINKING VELOCITY OF PHYTO ALLOCATE (WSNK_P(KBV,NNP)) ; WSNK_P = 0.0_DPP !SINKING FLUX OF PHYTO !**************ALLOCATING ZOOPLANKTON AND INITIALIZATION ***************** ALLOCATE (ACTIVE_R(NNZ)) ; ACTIVE_R = 0.0_SPP !ZOO ACTIVE RESPIRATION COEFFICIENT ALLOCATE (A_TZ(NNZ)) ; A_TZ = 0.0_SPP !T EXPONENTAIL COEFFICIENT ALLOCATE (BIO_Z(KBV,NNZ)) ; BIO_Z = 0.0_SPP !ZOOPLANKTON BIOMASS ALLOCATE (EFFIB(NNB,NNZ)) ; EFFIB = 0.3_SPP !GROWTH EFFICIENCY ON BACTERIA ALLOCATE (EFFID(NND,NNZ)) ; EFFID = 0.3_SPP !GROWTH EFFICIENCY ON DETRITUS ALLOCATE (EFFIP(NNP,NNZ)) ; EFFIP = 0.3_SPP !GROWTH EFFICIENCY ON PHYTO ALLOCATE (EFFIZ(NNZ,NNZ)) ; EFFIZ = 0.3_SPP !GROWTH EFFICIENCY ON ZOOPLANKTON ALLOCATE (FVZ(KBV,NNP)) ; FVZ = 0.0_SPP !ZOOPLANKTON SUBSTRACTED OF THRESHOLD ALLOCATE (G_B(KBV,NNB,NNZ)) ; G_B = 0.0_SPP !PREDATION ON BACTERIA ALLOCATE (G_D(KBV,NND,NNZ)) ; G_D = 0.0_SPP !GRAZING ON DETRITUS ALLOCATE (G_MAX(NNZ)) ; G_MAX = 1.16E-5_SPP !MAXIMUM GRAZING RATE ALLOCATE (G_P(KBV,NNP,NNZ)) ; G_P = 0.0_SPP !GRAZING ON PHYTOPLANKTON ALLOCATE (G_RATE(NNZ)) ; G_RATE = 0.0_SPP !GRAZING RATE ALLOCATE (G_Z(KBV,NNZ,NNZ)) ; G_Z = 0.0_SPP !PREDATION OF ZOOPLANKTON ALLOCATE (K_ZG(NNZ)) ; K_ZG = 1.0_SPP !HALF-SATURATION FOR ZOO GRAZING ALLOCATE (M_G(NNZ)) ; M_G = 1.0_SPP !ZOOPLANKTON GRAZING POWER ALLOCATE (MZD(NNZ)) ; MZD = 0.0_SPP !ZOOPLANKTON MORTALITY COEFFICIENT ALLOCATE (M_Z(NNZ)) ; M_Z = 1.0_SPP !ZOOPLANKTON MORTALITY POWER ALLOCATE (P_C(NNZ)) ; P_C = 0.0_SPP !GRAZING THRESHOLD ALLOCATE (RECRUIT_LOSS(0:NNZ)) ; RECRUIT_LOSS= 0.0_SPP !RECRUITMENT LOSS ALLOCATE (R_RECRUIT(NNZ)) ; R_RECRUIT = 0.0_SPP !RECRUIT COEFFICIENT ALLOCATE (R_Z(NNZ)) ; R_Z = 1.E-7_SPP !ZOOPLANKTON RESPIRATION COEFFICIENT ALLOCATE (SIGMA_B(NNB,NNZ)) ; SIGMA_B = 1.0_SPP !PREFERENCE ON BACTERIA ALLOCATE (SIGMA_D(NND,NNZ)) ; SIGMA_D = 1.0_SPP !PREFERENCE ON DETRITUS ALLOCATE (SIGMA_P(NNP,NNZ)) ; SIGMA_P = 1.0_SPP !PREFERENCE ON PHYTO ALLOCATE (SIGMA_Z(NNZ,NNZ)) ; SIGMA_Z = 1.0_SPP !PREFERENCE ON ZOOPLANKTON ALLOCATE (T_OPTZ(NNZ)) ; T_OPTZ = 20._SPP !OPTIMAL TEMPERATURE FOR ZOOPLANKTON ALLOCATE (Z_D(KBV,NNZ)) ; Z_D = 0.0_SPP !ZOOPANKTON MORTALITY ALLOCATE (Z_N(KBV,NNZ)) ; Z_N = 0.0_SPP !ZOOPLANKTON RESPIRATION ALLOCATE (Z_0(NNZ)) ; Z_0 = 0.0_SPP !ZOOPLANKTO THRESHOLLD !************ ALLOCATING BACTERIA AND INITIALIZATION ************* ALLOCATE (A_TB(NNB)) ; A_TB = 0.0_SPP !T EXPONENTAIL COEFFICIENT ALLOCATE (BIO_B(KBV,NNB)) ; BIO_B = 0.0_SPP !BACTERIA BIOMASS ALLOCATE (B_0(NNB)) ; B_0 = 0.0_SPP !BACTERIA THRESHOLD ALLOCATE (DELTA_B(NNB)) ; DELTA_B = 0.4_SPP !RATIO BETWEEN NH4 AND DON UPTAKE ALLOCATE (EFFIBD(NND,NNB)) ; EFFIBD = 0.3_SPP !GROWTH EFFICIENCY ON DETRITUS ALLOCATE (EFFIDOM(NNM,NNB)) ; EFFIDOM = 0.3_SPP !GROWTH EFFICIENCY ON DOM ALLOCATE (EFFIN(NNN,NNB)) ; EFFIN = 1.0_SPP !GROWTH EFFICIENCY ON NH4 ALLOCATE (FVB(KBV,NNB)) ; FVB = 0.0_SPP !BACTERIA SUBSTRACTED OF THRESHOLD ALLOCATE (R_B(NNB)) ; R_B = 1.E-6_SPP !BACTERIA RESPIRATION ALLOCATE (RESPIRATION_B(KBV,NNB)) ; RESPIRATION_B= 0.0_SPP !BACTERIA RESPIRATION ALLOCATE (SIGMA_BD(NND,NNB)) ; SIGMA_BD = 0.2_SPP !PREFERENCE ON DETRITUS ALLOCATE (SIGMA_DOM(NNM,NNB)) ; SIGMA_DOM = 0.2_SPP !PREFERENCE ON DOM ALLOCATE (SIGMA_N(NNN,NNB)) ; SIGMA_N = 1.0_SPP !PREFERENCE ON DON ALLOCATE (T_OPTB(NNB)) ; T_OPTB = 20._SPP !OPTIMAL TEMPERATURE FOR BACTERIA ALLOCATE (U_B(NNB)) ; U_B = 0.0_SPP !BACTERIA GROWTH RATE ALLOCATE (UBMAX(NNB)) ; UBMAX = 1.E-5_SPP !MAXIMUM GROWTH RATE OF BACTERIA ALLOCATE (UPTAKE_BD(KBV,NND,NNB)) ; UPTAKE_BD = 0.0_SPP !DETRITUS UPTAKE BY BACTERI ALLOCATE (UPTAKE_BN(KBV,NNN,NNB)) ; UPTAKE_BN = 0.0_SPP !NUTRIENT UPTAKE BY BACTERIA ALLOCATE (UPTAKE_DOM(KBV,NNM,NNB)) ; UPTAKE_DOM = 0.0_SPP !DOM UPTAKE BY BACTERIA ALLOCATE (UPTAKE_DON(KBV,NNB)) ; UPTAKE_DON = 0.0_SPP !DON UPTAKE BY BACTERIA !****************** ALLOCATING DETRITUS AND INITIALIZATION ************************* ALLOCATE (AGGREGATION(KBV,0:NND)) ;AGGREGATION = 0.0_SPP !AGGREGATION ALLOCATE (ALPHA_BD(NND,NNB,NNZ)) ; ALPHA_BD = 0.0_SPP !FEEDING LOSS FROM BACTERIA TO DETRITUS ALLOCATE (ALPHA_DAG(NND)) ; ALPHA_DAG = 0.0_SPP !AGGREGATION COEFFICIENT ALLOCATE (ALPHA_DD(NND,NND,NNZ)) ; ALPHA_DD = 0.0_SPP !FEEDING LOSS FROM DETRITUS TO DETRITUS ALLOCATE (ALPHA_DDG(NND)) ; ALPHA_DDG = 0.0_SPP !DISAGGREGATION COEFFICIENT ALLOCATE (ALPHA_PD(NND,NNP,NNZ)) ; ALPHA_PD = 0.0_SPP !FEEDING LOSS FROM PHYTO TO DETRITUS ALLOCATE (ALPHA_ZD(NND,NNZ,NNZ)) ; ALPHA_ZD = 0.0_SPP !FEEDING LOSS FROM ZOO TO DETRITUS ALLOCATE (BIO_D(KBV,NND)) ; BIO_D = 0.0_SPP !DETRITUS ABUNDANCE ALLOCATE (DETRITE(KBV,NND)) ; DETRITE = 0.0_DPP !DETRITUS CONCENTRATION ALLOCATE (D_D(NND)) ; D_D = 0.0_SPP !DISSOLUTION COEFFICIENT ALLOCATE (D_0(NND)) ; D_0 = 0.0_SPP !DETRITUS THRESHOLD ALLOCATE (D_RN(NND)) ; D_RN = 0.0_SPP !REMINERALIZATION COEFFICIENT ALLOCATE (DISAGGREGATION(KBV,NND+1)); DISAGGREGATION = 0.0_SPP !DISAGGREGATION ALLOCATE (D_SINK(KBV,NND)) ; D_SINK = 0.0_DPP !DETRITUS SINKING FLUX ALLOCATE (D_SINK1(KBV)) ; D_SINK1 = 0.0_DPP !SINKING FLUX WITHIN 1 ITERATION ALLOCATE (DISSOLUTION(KBV,NND)) ; DISSOLUTION = 0.0_SPP !DISSOLUTION ALLOCATE (EPSILON_PD(NND,NNP)) ; EPSILON_PD = 0.0_SPP !PHYTO MORTALITY TO DETRITUS ALLOCATE (EPSILON_ZD(NND,NNZ)) ; EPSILON_ZD = 0.0_SPP !ZOO MORTALTIY TO DETRITUS ALLOCATE (FVD(KBV,NND)) ; FVD = 0.0_SPP !DETRITUS AFTER THRESHOLD SUBSTRACTION ALLOCATE (REMINERALIZATION(KBV,NND)); REMINERALIZATION=0.0_SPP !REMINERALIZATION ALLOCATE (W_D(NND)) ; W_D = 0.0_SPP !DETRITUS SINKING VELOCITY ALLOCATE (W_D_TOTAL(NND)) ; W_D_TOTAL = 0.0_SPP !SINKING DISTANCE WITIN 1 T_STEP !****************** ALLOCATING DOM AND INITIALIZATION ***************** ALLOCATE (AGE_DOM(0:NNM)) ; AGE_DOM = 0.0_SPP !DOM AGEING ALLOCATE (ALPHA_DOM(NNM)) ; ALPHA_DOM = 0.0_SPP !DOM AGEING COEFFICIENT ALLOCATE (ALPHA_PDOM(NNM,NNP)) ; ALPHA_PDOM = 0.0_SPP !PHYTO EXUDATION TO DOM ALLOCATE (ALPHA_DDOM(NNM,NND)) ; ALPHA_DDOM = 0.0_SPP !DETRITUS DISSOLUTION TO DOM ALLOCATE (ALPHA_ZPDOM(NNM,NNP,NNZ)); ALPHA_ZPDOM = 0.0_SPP !FEEDING LOSS FROM PHYTO TO DOM ALLOCATE (ALPHA_ZDDOM(NNM,NNP,NNZ)); ALPHA_ZDDOM = 0.0_SPP !FEEDING LOSS FROM DETRITUS TO DOM ALLOCATE (ALPHA_ZZDOM(NNM,NNZ,NNZ)); ALPHA_ZZDOM = 0.0_SPP !FEEDING LOSS FROM ZOO TO DOM ALLOCATE (ALPHA_ZBDOM(NNM,NNB,NNZ)); ALPHA_ZBDOM = 0.0_SPP !FEEDING LOSS FROM BACTERIA TO DOM ALLOCATE (BIO_DOM(KBV,NNM)) ; BIO_DOM = 0.0_SPP !DOM CONCENTRATION ALLOCATE (DOM_0(NNM)) ; DOM_0 = 0.0_SPP !DOM THRESHOLD ALLOCATE (FVDOM(KBV,NNM)) ; FVDOM = 0.0_SPP !DOM SUBSTRACTED BY THRESHOLD !************* ALLOCATING NUTRIENT AND INITIALIZATION ****************** ALLOCATE (BIO_N(KBV,NNN)) ; BIO_N = 0.0_SPP !NUTRIENT CONCENTRATION ALLOCATE (FVNN(KBV,NNN)) ; FVNN = 0.0_SPP !NUTRIENT BUSTRACTED BY THRESHOLD ALLOCATE (KSN(NNN,NNP)) ; KSN = 0.0_SPP !HALF-SATURAITON OF NUTRIENT ; L_NH4N = 0.0_SPP !CRITICL LIGHT FOR NITRIFICATION ALLOCATE (NH4_NO3(KBV)) ; NH4_NO3 = 0.0_SPP !NITRIFICATION ALLOCATE (N2CB(NNN,NNB)) ; N2CB = 1.0_SPP !ELEMENT RATIO IN BACTERIA ALLOCATE (N2CD(NNN,NND)) ; N2CD = 1.0_SPP !ELEMENT RATIO IN DETRITUS ALLOCATE (N2CP(NNN,NNP)) ; N2CP = 1.0_SPP !ELEMENT RATIO IN PHYTO ALLOCATE (N2CZ(NNN,NNZ)) ; N2CZ = 1.0_SPP !ELEMENT RATIO IN ZOOPLANKTON ALLOCATE (N2CDOM(NNN,NNM)) ; N2CDOM = 1.0_SPP !ELEMENT RATIO IN DOM ALLOCATE (N2CZB(NNN,NNB,NNZ)) ; N2CZB = 1.0_SPP !ELEM. RATIO IN ACTIVE RESPIR. FROM GRAZING ON BACTERIA ALLOCATE (N2CZD(NNN,NND,NNZ)) ; N2CZD = 1.0_SPP !ELEM. RATIO IN ACTIVE RESPIR. FROM GRAZING ON DETRITUS ALLOCATE (N2CZP(NNN,NNP,NNZ)) ; N2CZP = 1.0_SPP !ELEM. RATIO IN ACTIVE RESPIR. FROM GRAZING ON PHYTO ALLOCATE (N2CZZ(NNN,NNZ,NNZ)) ; N2CZZ = 1.0_SPP !ELEM. RATIO IN ACTIVE RESPIR. FROM PREDATION ON ZOO ALLOCATE (N_0(NNN)) ; N_0 = 0.0_SPP !NUTRIENT THRESHOLD ; R_AN = 0.0_SPP !NITRIFICATION COEFFICIENT ALLOCATE (UPTAKE_PN(KBV,NNN,NNP)) ; UPTAKE_PN = 0.0_SPP !NUTRIENT UPTAKE BY PHYTO !************************* FUNCTIONS AND PARAMETER VALUES *************** DO WHILE (PARMINDEX .NE. 'END') SELECT CASE (PARMINDEX) CASE ('L_FUNCTION') READ (1,*) L_FUNCTION CASE ('G_FUNCTION') READ (1,*) G_FUNCTION CASE ('ALPHAP'); !LIGHT FUNCTION COEFFICIENT READ(1,*) (ALPHAP(I),I=1,NNP) CASE ('ALPHA_U'); !COEFFICIENT BETWEEN MULTIPLICATION & MINIMUM READ(1,*) (ALPHA_U(I),I=1,NNP) CASE ('A_TP') !EXPONENTIAL FOR T FORCING READ(1,*) (A_TP(I),I=1,NNP) CASE ('ATANU_C') !ATTENUATION COEFFICIENT OF CHLOROPHYLL READ(1,*) ATANU_C CASE ('ATANU_D') !ATTENUATION COEFFICIENT OF DETRITUS READ(1,*) ATANU_D CASE ('ATANU_W') !ATTENUATION COEFFICIENT OF WATER READ(1,*) ATANU_W CASE ('BETAP') !PHOTOINHIBITION COEFFICIENT READ(1,*) (BETAP(I),I=1,NNP) CASE ('CHL2C') !CHLOROPHYLL TO CARBON RATIO IN PHYTO READ(1,*) (CHL2C(I),I=1,NNP) CASE ('D_DOM') !ACTIVE EXUDATION COEFFICIENT READ(1,*) (D_DOM(I),I=1,NNP) CASE ('DPDOM') !PASSIVE PHYTO EXUDATION COEFFICIENT READ(1,*) (DPDOM(I),I=1,NNP) CASE ('I_OPT') !OPTIMAL LIGHT FOR PHYTO READ(1,*) (I_OPT(I),I=1,NNP) CASE ('K_LIGHT') !HALF_SATURATION OF LIGHT FUNCTIONS READ(1,*) (K_LIGHT(I),I=1,NNP) CASE ('MPD') !PHYTO MORTALITY EOFFICIENT READ(1,*) (MPD(I),I=1,NNP) CASE ('M_P') !PHYTO MORTALITY ORDER READ(1,*) (M_P(I),I=1,NNP) CASE ('N_P') !POWER OF LIGHT FUNCTIONS READ(1,*) (N_P(I),I=1,NNP) CASE ('PARFRAC') ! PAR FRACTION READ(1,*) PARFRAC CASE ('P_0') !PHYTOPANKTON THRESHOLDS READ(1,*) (P_0(I),I=1,NNP) CASE ('RP_T') !EXPONENTIAL FOR T FORCING ON RESPIRATION READ(1,*) RP_T CASE ('R_P') !PHYTO RESPIRATION COEFFICIENT READ(1,*) (R_P(I),I=1,NNP) CASE ('T_OPTP') !OPTIMAL TEMPERATURE FOR PHYTO READ(1,*) (T_OPTP(I),I=1,NNP) CASE ('UMAX') !PHYTO MAXIMUM GROWTH RATE READ(1,*) (UMAX(I),I=1,NNP) CASE ('W_P') !SINKING VELOCITY OF PHYTO READ(1,*) (W_P(I),I=1,NNP) !******************** ZOOPLANKTON PARAMETERS **********************! CASE ('ACTIVE_R') !ACTIVE RESPIRATION COEFFICIENT READ(1,*) (ACTIVE_R(I),I=1,NNZ) CASE ('A_TZ') !EXPONENTIAL FOR T FORCING READ(1,*) (A_TZ(I),I=1,NNZ) CASE ('EFFIB') !GROWTH EFFICIENCY ON BACTERIA READ(1,*) ((EFFIB(I,J),I=1,NNB),J=1,NNZ) CASE ('EFFID') !GROWTH EFFICIENCY ON DETRITUS READ(1,*) ((EFFID(I,J),I=1,NND),J=1,NNZ) CASE ('EFFIP') !GROWTH EFFICIENCY ON PHYTO READ(1,*) ((EFFIP(I,J),I=1,NNP),J=1,NNZ) CASE ('EFFIZ') !GROWTH EFFICIENCY ON ZOOPLANKTON READ(1,*) ((EFFIZ(I,J),I=1,NNZ),J=1,NNZ) CASE ('G_MAX') !MAXIMUM GRAZING RATE READ(1,*) (G_MAX(I),I=1,NNZ) CASE ('K_ZG') !HALF-SATURATION FOR ZOO GRAZING READ(1,*) (K_ZG(I),I=1,NNZ) CASE ('M_G') !ZOOPLANKTON GRAZING POWER READ(1,*) (M_G(I),I=1,NNZ) CASE ('MZD') !ZOOPLANKTON MORTALITY COEFFICIENT READ(1,*) (MZD(I),I=1,NNZ) CASE ('M_Z') !ZOOPLANKTON MORTALITY POWER READ(1,*) (M_Z(I),I=1,NNZ) CASE ('P_C') !GRAZING THRESHOLD READ(1,*) (P_C(I),I=1,NNZ) CASE ('R_RECRUIT') !RECRUIT COEFFICIENT READ(1,*) (R_RECRUIT(I),I=1,NNZ) CASE ('R_Z') !ZOO PASSIVE RESPIRATION COEFFICIENT READ(1,*) (R_Z(I),I=1,NNZ) CASE ('SIGMA_B') !PREFERENCE ON BACTERIA READ(1,*) ((SIGMA_B(I,J),I=1,NNB),J=1,NNZ) CASE ('SIGMA_D') !PREFERENCE ON DETRITUS READ(1,*) ((SIGMA_D(I,J),I=1,NND),J=1,NNZ) CASE ('SIGMA_P') !PREFERENCE ON PHYTO READ(1,*) ((SIGMA_P(I,J),I=1,NNP),J=1,NNZ) CASE ('SIGMA_Z') !PREFERENCE ON ZOOPLANKTON READ(1,*) ((SIGMA_Z(I,J),I=1,NNZ),J=1,NNZ) CASE ('T_OPTZ') !OPTIMAL TEMPERATURE FOR ZOOPLANKTON READ(1,*) (T_OPTZ(I),I=1,NNZ) CASE ('Z_0') !ZOOPLANKTON THRESHOLLD READ(1,*) (Z_0(I),I=1,NNZ) !********************* BACTERIA PARAMETERS **********************! CASE ('A_TB') !EXPONENTAIL FOR T FORCING READ(1,*) (A_TB(I),I=1,NNB) CASE ('B_0') !BACTERIA THRESHOLLD READ(1,*) (B_0(I),I=1,NNB) CASE ('DELTA_B') !RATIO BETWEEN NH4 AND DON UPTAKE READ(1,*) (DELTA_B(I),I=1,NNB) CASE ('EFFIBD') !GROWTH EFFICIENCY ON DETRITUS READ(1,*) ((EFFIBD(I,J),I=1,NND),J=1,NNB) CASE ('EFFIDOM') !GROWTH EFFICIENCY ON DOM READ(1,*) ((EFFIDOM(I,J),I=1,NNM),J=1,NNB) CASE ('EFFIN') !GROWTH EFFICIENCY ON NH4 READ(1,*) ((EFFIN(I,J),I=1,NNN),J=1,NNB) CASE ('R_B') !BACTERIA RESPIRATION COEFFICIENT READ(1,*) (R_B(I),I=1,NNB) CASE ('SIGMA_BD') !PREFERENCE ON DOM READ(1,*) ((SIGMA_BD(I,J),I=1,NND),J=1,NNB) CASE ('SIGMA_DOM') !PREFERENCE ON DOM READ(1,*) ((SIGMA_DOM(I,J),I=1,NNM),J=1,NNB) CASE ('SIGMA_N') !PREFERENCE ON DON READ(1,*) ((SIGMA_N(I,J),I=1,NNN),J=1,NNB) CASE ('T_OPTB') !OPTIMAL T FOR BACTERIA READ(1,*) (T_OPTB(I),I=1,NNB) CASE ('UBMAX') !MAXIMUM GROWTH RATE OF BACTERIA READ(1,*) (UBMAX(I),I=1,NNB) !*********************** DETRITUS PARAMETERS ********************** CASE ('ALPHA_BD') !FEEDING LOSS FROM BACTERIA TO DETRITUS READ(1,*) (((ALPHA_BD(I,J,K),I=1,NND),J=1,NNB),K=1,NNZ) CASE ('ALPHA_DAG') !AGGREGATION COEFFICIENT READ(1,*) (ALPHA_DAG(I),I=1,NND) CASE ('ALPHA_DD') !FEEDING LOSS FROM DETRITUS TO DETRITUS READ(1,*) (((ALPHA_DD(I,J,K),I=1,NND),J=1,NND),K=1,NNZ) CASE ('ALPHA_DDG') !DISAGGREGATION COEFFICIENT READ(1,*) (ALPHA_DDG(I),I=1,NND) CASE ('ALPHA_PD') !FEEDING LOSS FROM PHYTO TO DETRITUS READ(1,*) (((ALPHA_PD(I,J,K),I=1,NND),J=1,NNP),K=1,NNZ) CASE ('ALPHA_ZD') !FEEDING LOSS FROM ZOO TO DETRITUS READ(1,*) (((ALPHA_ZD(I,J,K),I=1,NND),J=1,NNZ),K=1,NNZ) CASE ('D_D') !DISSOLUTION COEFFICIENT READ(1,*) (D_D(I),I=1,NND) CASE ('D_0') !DETRITUS THRESHOLD READ(1,*) (D_0(I),I=1,NND) CASE ('D_RN') !REMINERALIZATION COEFFICIENT READ(1,*) (D_RN(I),I=1,NND) CASE ('EPSILON_PD') !PHYTO MORTALITY TO DETRITUS READ(1,*) ((EPSILON_PD(I,J),I=1,NND),J=1,NNP) CASE ('EPSILON_ZD') !ZOO MORTALTIY TO DETRITU READ(1,*) ((EPSILON_ZD(I,J),I=1,NND),J=1,NNZ) CASE ('W_D') !DETRITUS SINKING VELOCITY READ(1,*) (W_D(I),I=1,NND) !********************** DOM PARAMETERS *************************! CASE ('ALPHA_DOM') !DOM AGEING COEFFICIENT READ(1,*) (ALPHA_DOM(I),I=1,NNM) CASE ('ALPHA_PDOM') !PHYTO EXUDATION TO DOM READ(1,*) ((ALPHA_PDOM(I,J),I=1,NNM),J=1,NNP) CASE ('ALPHA_DDOM') !DETRITUS DISSOLUTION TO DOM READ(1,*) ((ALPHA_DDOM(I,J),I=1,NNM),J=1,NND) CASE ('ALPHA_ZPDOM') !FEEDING LOSS FROM PHYTO TO DOM READ(1,*) (((ALPHA_ZPDOM(I,J,K),I=1,NNM),J=1,NNP),K=1,NNZ) CASE ('ALPHA_ZDDOM') !FEEDING LOSS FROM DETRITUS TO DOM READ(1,*) (((ALPHA_ZDDOM(I,J,K),I=1,NNM),J=1,NND),K=1,NNZ) CASE ('ALPHA_ZZDOM') !FEEDING LOSS FROM ZOO TO DOM READ(1,*) (((ALPHA_ZZDOM(I,J,K),I=1,NNM),J=1,NNZ),K=1,NNZ) CASE ('ALPHA_ZBDOM') !FEEDING LOSS FROM BACTERIA TO DOM READ(1,*) (((ALPHA_ZBDOM(I,J,K),I=1,NNM),J=1,NNB),K=1,NNZ) CASE ('DOM_0') !DOM THRESHOLLD READ(1,*) (DOM_0(I),I=1,NNM) !***************** NUTRIENT PARAMETERS *******************! CASE ('KSN') !HALF-SATURATION OF NUTRIENT READ(1,*) ((KSN(I,J),I=1,NNN),J=1,NNP) CASE ('N2CB') !ELEMENT RATIO IN BACTERIA READ(1,*) ((N2CB(I,J),I=1,NNN),J=1,NNB) CASE ('N2CD') !ELEMENT RATIO IN DETRITUS READ(1,*) ((N2CD(I,J),I=1,NNN),J=1,NND) CASE ('N2CP') !ELEMENT RATIO IN PHYTO READ(1,*) ((N2CP(I,J),I=1,NNN),J=1,NNP) CASE ('N2CZ') !ELEMENT RATIO IN ZOOPLANKTON READ(1,*) ((N2CZ(I,J),I=1,NNN),J=1,NNZ) CASE ('N2CDOM') !ELEMENT RATIO IN DOM READ(1,*) ((N2CDOM(I,J),I=1,NNN),J=1,NNM) CASE ('N_0') !NUTRIENT THRESHOLD READ(1,*) (N_0(I),I=1,NNN) CASE ('R_AN') !NITRIFICATION COEFFICIENT READ(1,*) R_AN END SELECT READ (1,*)PARMINDEX END DO CLOSE(1) !*******************************************************************! ! ********* CHECKING GROWTH EFFICIENCY AND FEEDLING LOSSES ****! !*******************************************************************! DO I=1,NNZ DO J=1,NNP !FOR GRAZING ON PHYTO TOTALL=ACTIVE_R(I)+EFFIP(J,I) print*,totall,active_r(i),effip(j,i),nnp,nnz,nnd IF(NND.GT.1) THEN IF (DETRITUS_NAME(2)=='Detritus_Si') THEN DO K=1,1 TOTALL=TOTALL+ALPHA_PD(K,J,I) END DO ELSE DO K=1,NND TOTALL=TOTALL+ALPHA_PD(K,J,I) END DO END IF ELSE DO K=1,NND TOTALL=TOTALL+ALPHA_PD(K,J,I) END DO ENDIF print*,totall,alpha_pd(1,j,i),nnm DO K=1,NNM TOTALL=TOTALL+ALPHA_ZPDOM(K,J,I) END DO IF(TOTALL .NE. 1.) THEN PRINT*,'EFFICIENCY+LOSS OF ZOO ',I,' GRAZING ON PHYTO ',J,' UNEQUAL TO 1',TOTALL STOP END IF END DO DO J=1,NND !FOR GRAZING ON DETRITUS TOTALL=ACTIVE_R(I)+EFFID(J,I) IF(NND.GT.1) THEN IF (DETRITUS_NAME(2)=='Detritus_Si') THEN DO K=1,1 TOTALL=TOTALL+ALPHA_DD(K,J,I) END DO ELSE DO K=1,NND TOTALL=TOTALL+ALPHA_DD(K,J,I) END DO END IF ENDIF DO K=1,NNM TOTALL=TOTALL+ALPHA_ZDDOM(K,J,I) END DO IF(TOTALL > 1.) THEN PRINT*,'EFFICIENCY+LOSS OF ZOO ',I,' GRAZING ON DETRITUS ',J,' UNEQUAL TO 1',TOTALL STOP END IF END DO DO J=1,NNZ !FOR PREDATION ON ZOO TOTALL=ACTIVE_R(I)+EFFIZ(J,I) IF(NND.GT.1) THEN IF (DETRITUS_NAME(2)=='Detritus_Si') THEN DO K=1,1 TOTALL=TOTALL+ALPHA_ZD(K,J,I) END DO ELSE DO K=1,NND TOTALL=TOTALL+ALPHA_ZD(K,J,I) END DO END IF ENDIF DO K=1,NNM TOTALL=TOTALL+ALPHA_ZZDOM(K,J,I) END DO IF(TOTALL > 1.) THEN PRINT*,'EFFICIENCY+LOSS OF ZOO ',I,' PREDATION ON ZOO ',J,' UNEQUAL TO 1',TOTALL STOP END IF END DO DO J=1,NNB !FOR PREDATION ON BACTERIA TOTALL=ACTIVE_R(I)+EFFIB(J,I) IF(NND.GT.1) THEN IF (DETRITUS_NAME(2)=='Detritus_Si') THEN DO K=1,1 TOTALL=TOTALL+ALPHA_PD(K,J,I) END DO ELSE DO K=1,NND TOTALL=TOTALL+ALPHA_BD(K,J,I) END DO END IF ENDIF DO K=1,NNM TOTALL=TOTALL+ALPHA_ZBDOM(K,J,I) END DO IF(TOTALL > 1.) THEN PRINT*,'EFFICIENCY+LOSS OF ZOO ',I,' PREDATION ON BAC ',J,' UNEQUAL TO 1',TOTALL STOP END IF END DO TOTALL=0. DO J=1,NND !ZOO MORTALITY TO DETRITUS TOTALL=TOTALL+EPSILON_ZD(J,I) END DO IF(TOTALL > 1.) THEN PRINT*,'MORTALITY OF ZOO ',I,' TO DETRITUS DOES NOT EQUAL TO 1',TOTALL STOP END IF END DO !I=1,NNZ DO I=1,NNP TOTALL=0. IF(NND.GT.1) THEN IF (DETRITUS_NAME(2)=='Detritus_Si') THEN DO J=1,1 !PHYTO MORTALITY TO DETRITUS TOTALL=TOTALL+EPSILON_PD(J,I) END DO ELSE DO J=1,NND !PHYTO MORTALITY TO DETRITUS TOTALL=TOTALL+EPSILON_PD(J,I) END DO END IF ENDIF IF(TOTALL > 1.) THEN PRINT*,'MORTALITY OF PHYTO ',I,' TO DETRITUS DOES NOT EQUAL TO 1',TOTALL STOP END IF END DO !I=1,NNP MULTIPLE_PRINT=.false. IF(MULTIPLE_PRINT) THEN!MOVED TO BIO_INITIAL TO PREVENT MULTIPLE PRINT !*******************************************************************! ! ********* PRINT OUT MODEL SETUP AND PARAMETER VALUES ****! !*******************************************************************! PRINT* PRINT*,'*****************************************************' PRINT*,'** STRUCTURE AND FUNCTION OF THE BIOLOGICAL MODEL **' PRINT*,'*****************************************************' PRINT* PRINT*,'MODEL STRUCTURE : ', MODEL_STRUCTURE DO I=1,NNN PRINT*,' ', NUTRIENT_NAME(I) END DO DO I=1,NNP PRINT*,' ', PHYTO_NAME(I) END DO DO I=1,NNZ PRINT*,' ', ZOO_NAME(I) END DO DO I=1,NND PRINT*,' ', DETRITUS_NAME(I) END DO DO I=1,NNM PRINT*,' ', DOM_NAME(I) END DO DO I=1,NNB PRINT*,' ', BACTERIA_NAME(I) END DO WRITE(*,'(A26,A20)')' LIGHT FUNCTION : ', L_FUNCTION WRITE(*,'(A26,A20)')' GRAZING FUNCTION : ', G_FUNCTION PRINT* PRINT*,'********* PHYTOPLANTON PARAMETERS **************' PRINT* IF(L_FUNCTION.NE.'EXP_LIGHT'.AND.L_FUNCTION.NE.'SL62_LIGHT') THEN PRINT*,'ALPHA : ' , (ALPHAP(I),I=1,NNP) END IF PRINT*,'L_N COMBINE : ' , (ALPHA_U(I),I=1,NNP) PRINT*,'T FORCING : ' , (A_TP(I),I=1,NNP) PRINT*,'CHL ATTANUATION : ' , ATANU_C PRINT*,'D ATTANUATION : ', ATANU_D PRINT*,'WATER ATTANUATION : ', ATANU_W IF(L_FUNCTION.EQ.'PGH80_LIGHT'.OR.L_FUNCTION.EQ.'V65_LIGHT'.OR. & L_FUNCTION.EQ.'BWDC9_LIGHT') THEN PRINT*,'BETAP : ', (BETAP(I),I=1,NNP) END IF PRINT*,'CHL:C : ',(CHL2C(I),I=1,NNP) PRINT*,'ACTIVE DOM EXUD. : ',(D_DOM(I),I=1,NNP) PRINT*,'PASSIVE DOM EXUD. : ', (DPDOM(I),I=1,NNP) IF(L_FUNCTION.EQ.'SL62_LIGHT'.OR.L_FUNCTION.EQ.'V65_LIGHT'.OR. & L_FUNCTION.EQ.'PE78_LIGHT') THEN PRINT*,'OPTIMAL LIGHT : ',(I_OPT(I),I=1,NNP) END IF IF(L_FUNCTION.EQ.'MM_LIGHT'.OR.L_FUNCTION.EQ.'LB_LIGHT') THEN PRINT*,'LIGHT HALF SATURATTION : ', (K_LIGHT(I),I=1,NNP) END IF PRINT*,'MORTALITY : ', (MPD(I),I=1,NNP) PRINT*,'MORTALITY POWER : ', (M_P(I),I=1,NNP) IF(L_FUNCTION.EQ.'LB_LIGHT'.OR.L_FUNCTION.EQ.'V65_LIGHT') THEN PRINT*,'POWER OF LIGHT : ', (N_P(I),I=1,NNP) END IF PRINT*,'THRESHOLD : ', (P_0(I),I=1,NNP) PRINT*,'T ON RESPIRATION : ', RP_T PRINT*,'RESPIRATION : ', (R_P(I),I=1,NNP) PRINT*,'OPTIMAL T : ', (T_OPTP(I),I=1,NNP) PRINT*,'MAXIMUM GROWTH : ', (UMAX(I),I=1,NNP) PRINT*,'SINKING VELOCITY : ', (W_P(I),I=1,NNP) PRINT* PRINT*,'******** ZOOPLANKTON PARAMETERS ****************' PRINT* PRINT*,'ACTIVE RESPIRATION : ', (ACTIVE_R(I),I=1,NNZ) PRINT*,'T FORCING EXPONENTIAL : ', (A_TZ(I),I=1,NNZ) IF (NNB.GE.1) THEN PRINT*,'EFFICIENCY ON BACTERIA : ',((EFFIB(I,J),I=1,NNB),J=1,NNZ) END IF IF (NND.GE.1) THEN PRINT*,'EFFICIENCY ON DETRITUS : ',((EFFID(I,J),I=1,NND),J=1,NNZ) END IF PRINT*,'EFFICIENCY ON PHYTO : ',((EFFIP(I,J),I=1,NNP),J=1,NNZ) PRINT*,'EFFICIENCY ON ZOO : ',((EFFIZ(I,J),I=1,NNZ),J=1,NNZ) PRINT*,'MAX GRAIZING RATE : ',(G_MAX(I),I=1,NNZ) IF(G_FUNCTION.EQ.'RECTI_G'.OR.G_FUNCTION.EQ.'MM1_G' .AND. & G_FUNCTION.EQ.'MM2_G') THEN PRINT*,'HALF SATURATION : ', (K_ZG(I),I=1,NNZ) END IF PRINT*,'GRAZING POWER : ',(M_G(I),I=1,NNZ) PRINT*,'MORALITY : ',(MZD(I),I=1,NNZ) PRINT*,'MORTALITY POWER : ',(M_Z(I),I=1,NNZ) IF(G_FUNCTION.EQ.'MM2_G') THEN PRINT*,'GRAZING THRESHOLD : ',(P_C(I),I=1,NNZ) END IF IF (NNZ.GE.1) THEN PRINT*,'RECRUITMENT : ',(R_RECRUIT(I),I=1,NNZ) END IF PRINT*,'RESPIRATION : ',(R_Z(I),I=1,NNZ) IF (NNB.GE.1) THEN PRINT*,'PREFERENCE ON BACTERIA : ',((SIGMA_B(I,J),I=1,NNB),J=1,NNZ) END IF IF (NND.GE.1) THEN PRINT*,'PREFERENCE ON DETRITUS : ',((SIGMA_D(I,J),I=1,NND),J=1,NNZ) END IF PRINT*,'PREFERENCE ON PHYTO : ',((SIGMA_P(I,J),I=1,NNP),J=1,NNZ) PRINT*,'PREFERENCE ON ZOO : ',((SIGMA_Z(I,J),I=1,NNZ),J=1,NNZ) PRINT*,'OPTIMAL T : ',(T_OPTZ(I),I=1,NNZ) PRINT*,'ZOO THRESHOLD : ',(Z_0(I),I=1,NNZ) PRINT* PRINT*,'********* NUTRIENT PARAMETERS ***********' PRINT* PRINT*,'HALF-SATURATION',((KSN(I,J),I=1,NNN),J=1,NNP) IF (NNB.GE.1) THEN PRINT*,'ELEMENT RATIO IN BAC. : ',((N2CB(I,J),I=1,NNN),J=1,NNB) END IF IF (NND.GE.1) THEN PRINT*,'ELEMENT RATIO IN D : ',((N2CD(I,J),I=1,NNN),J=1,NND) END IF PRINT*,'ELEMENT RATIO IN PHYTO : ',((N2CP(I,J),I=1,NNN),J=1,NNP) PRINT*,'ELEMENT RATIO IN ZOO : ',((N2CZ(I,J),I=1,NNN),J=1,NNZ) IF (NNM.GE.1) THEN PRINT*,'ELEMENT RATIO IN DOM : ', ((N2CDOM(I,J),I=1,NNN),J=1,NNM) END IF PRINT*,'THRESHOLD : ', (N_0(I),I=1,NNN) IF (NO3_ON) THEN PRINT*,'NITRIFICATION RATE : ', R_AN END IF PRINT* IF (NNB.GE.1) THEN PRINT*,'********* BACTERIA PARAMETERS ************' PRINT* PRINT*,'T_FORCING : ',(A_TB(I),I=1,NNB) PRINT*,'THRESHOLD : ', (B_0(I),I=1,NNB) PRINT*,'RATIO OF NH4 VS DON : ',(DELTA_B(I),I=1,NNB) PRINT*,'EFFICIENCY OF DETRITUS : ',((EFFIBD(I,J),I=1,NND),J=1,NNB) PRINT*,'EFFICIENCY OF DOM : ',((EFFIDOM(I,J),I=1,NNM),J=1,NNB) PRINT*,'EFFICIENCY OF NUTRIENT : ', ((EFFIN(I,J),I=1,NNN),J=1,NNB) PRINT*,'RESPIRATION : ',(R_B(I),I=1,NNB) PRINT*,'PREFERENCE ON DETRITUS : ',((SIGMA_BD(I,J),I=1,NND),J=1,NNB) PRINT*,'PREFERENCE ON DOM : ',((SIGMA_DOM(I,J),I=1,NNM),J=1,NNB) PRINT*,'PREFERENCE ON NUTRIENT : ',((SIGMA_N(I,J),I=1,NNN),J=1,NNB) PRINT*,'OPTIMAL TEMPERATURE : ',(T_OPTB(I),I=1,NNB) PRINT*,'MAXIMUM GROWTH RATE : ',(UBMAX(I),I=1,NNB) PRINT* END IF IF (NND.GE.1) THEN PRINT*, '******** DETRITUS PARAMETERS *************' PRINT* IF (NNB.GE.1) THEN PRINT*,'GRAZING ON B TO D : ', (((ALPHA_BD(I,J,K),I=1,NND),J=1,NNB),K=1,NNZ) END IF PRINT*,'AGGREGATION : ', (ALPHA_DAG(I),I=1,NND) PRINT*,'GRAZING LOSS ON D TO D : ', (((ALPHA_DD(I,J,K),I=1,NND),J=1,NND),K=1,NNZ) PRINT*,'DISAGGREGATION : ', (ALPHA_DAG(I),I=1,NND) PRINT*,'GRAZING LOSS ON P TO D : ', (((ALPHA_PD(I,J,K),I=1,NND),J=1,NNP),K=1,NNZ) PRINT*,'GRAZING LOSS ON Z TO D : ', (((ALPHA_ZD(I,J,K),I=1,NND),J=1,NNZ),K=1,NNZ) IF (NNM.GE.1) THEN PRINT*,'DISSOLUTION : ', (D_DOM(I),I=1,NND) END IF PRINT*,'REMINERALIZATION : ', (D_RN(I),I=1,NND) PRINT*,'THRESHOLD : ', (D_0(I),I=1,NND) PRINT*,'P MORTALITY TO DETRITUS: ', ((EPSILON_PD(I,J),I=1,NND),J=1,NNP) PRINT*,'Z MORTALITY TO DETRITUS: ', ((EPSILON_ZD(I,J),I=1,NND),J=1,NNZ) PRINT*,'SINING VELOCITY : ', (W_D(I),I=1,NND) PRINT* END IF IF (NNM.GE.1) THEN PRINT*,'********* DOM PARAMETERS *************' PRINT* PRINT*,'DOM AGEING COEFFICIENT : ', (ALPHA_DOM(I),I=1,NNM) PRINT*,'PHYTO EXUDATION : ', ((ALPHA_PDOM(I,J),I=1,NNM),J=1,NNP) PRINT*,'DETRITUS DISSOLUTION : ', ((ALPHA_DDOM(I,J),I=1,NNM),J=1,NND) IF (NNB.GE.1) THEN PRINT*,'GRAZING LOSS ON B > DOM: ', (((ALPHA_ZBDOM(I,J,K),I=1,NNM),J=1,NNB),K=1,NNZ) END IF IF (NND.GE.1) THEN PRINT*,'GRAZING LOSS ON D > DOM: ', (((ALPHA_ZDDOM(I,J,K),I=1,NNM),J=1,NND),K=1,NNZ) END IF PRINT*,'GRAZING LOSS ON P > DOM: ', (((ALPHA_ZPDOM(I,J,K),I=1,NNM),J=1,NNP),K=1,NNZ) PRINT*,'GRAZING LOSS ON Z > DOM: ', (((ALPHA_ZZDOM(I,J,K),I=1,NNM),J=1,NNZ),K=1,NNZ) PRINT*,'THRESHOLD : ', (DOM_0(I),I=1,NNM) PRINT* END IF PRINT* PRINT*,'*****************************************************' PRINT*,'********* END OF BIOLOGICAL MODEL ************' PRINT*,'*****************************************************' PRINT* ENDIF RETURN END SUBROUTINE GET_PARAMETER SUBROUTINE GET_PARAMETER_NEW(fname) character(len=*) :: fname logical :: fexist INTEGER :: I,J,K integer :: linenum,k1,iscan real(spp),allocatable :: tmp(:) logical :: MULTIPLE_PRINT !************************ BEGINNING EXECUTABLE ********************** KBVM1=KBV-1 !ensure sediment parameter file exists inquire(file=trim(fname),exist=fexist) if(.not.fexist)then write(*,*)'biological parameter file: ',trim(fname),' does not exist' write(*,*)'stopping' stop end if ! OPEN (1, FILE='bio_model_new.in') ! biofile='bio_model_new.in' OPEN (1, FILE=trim(fname),status='old') biofile = trim(fname) !read in model struture Call Get_Val(MODEL_STRUCTURE,biofile,'STRUCTURE',line=linenum,echo=.true.) SELECT CASE (MODEL_STRUCTURE) CASE ('NPZ') NNN=1 NNP=1 NNZ=1 NNM=0 NNB=0 NND=0 NNA=0 NTT=NNN+NNP+NNZ+NNM+NNB+NND+NNA !TOTAL VARIABLE NUMBER FOR VERTICAL MIXING INN=1 INP=INN+NNN INZ=INP+NNP INM=INZ+NNZ INB=INM+NNM IND=INB+NNB INA=IND+NND ALLOCATE (NUTRIENT_NAME(NNN)) ALLOCATE (NUTRIENT_UNIT(NNN)) ALLOCATE (PHYTO_NAME(NNP)) ALLOCATE (PHYTO_UNIT(NNP)) ALLOCATE (ZOO_NAME(NNZ)) ALLOCATE (ZOO_UNIT(NNZ)) NUTRIENT_NAME(1) = 'Nitrogen' NUTRIENT_UNIT(1) = 'mmole N m-3' PHYTO_NAME(1) = 'Phytoplankton' PHYTO_UNIT(1) = 'mmole C m-3' ZOO_NAME(1) = 'Zooplankton' ZOO_UNIT(1) = 'mmole C m-3' CASE ('NPZD') NNN=1 NNP=1 NNZ=1 NNM=0 NNB=0 NND=1 NNA=0 NTT=NNN+NNP+NNZ+NNM+NNB+NND+NNA !TOTAL VARIABLE NUMBER FOR VERTICAL MIXING INN=1 INP=INN+NNN INZ=INP+NNP INM=INZ+NNZ INB=INM+NNM IND=INB+NNB INA=IND+NND ALLOCATE (NUTRIENT_NAME(NNN)) ALLOCATE (NUTRIENT_UNIT(NNN)) ALLOCATE (PHYTO_NAME(NNP)) ALLOCATE (PHYTO_UNIT(NNP)) ALLOCATE (ZOO_NAME(NNZ)) ALLOCATE (ZOO_UNIT(NNZ)) ALLOCATE (DETRITUS_NAME(NND)) ALLOCATE (DETRITUS_UNIT(NND)) NUTRIENT_NAME(1) = 'Nitrogen' NUTRIENT_UNIT(1) = 'mmole N m-3' PHYTO_NAME(1) = 'Phytoplankton' PHYTO_UNIT(1) = 'mmole C m-3' ZOO_NAME(1) = 'Zooplankton' ZOO_UNIT(1) = 'mmole C m-3' DETRITUS_NAME(1) = 'Detritus' DETRITUS_UNIT(1) = 'mmole C m-3' CASE ('FASHAM') NNN=2 NNP=1 NNZ=1 NNM=1 NNB=1 NND=1 NNA=0 NTT=NNN+NNP+NNZ+NNM+NNB+NND+NNA !TOTAL VARIABLE NUMBER FOR VERTICAL MIXING INN=1 INP=INN+NNN INZ=INP+NNP INM=INZ+NNZ INB=INM+NNM IND=INB+NNB INA=IND+NND ALLOCATE (NUTRIENT_NAME(NNN)) ALLOCATE (NUTRIENT_UNIT(NNN)) ALLOCATE (PHYTO_NAME(NNP)) ALLOCATE (PHYTO_UNIT(NNP)) ALLOCATE (ZOO_NAME(NNZ)) ALLOCATE (ZOO_UNIT(NNZ)) ALLOCATE (DETRITUS_NAME(NND)) ALLOCATE (DETRITUS_UNIT(NND)) ALLOCATE (DOM_NAME(NNM)) ALLOCATE (DOM_UNIT(NNM)) ALLOCATE (BACTERIA_NAME(NNB)) ALLOCATE (BACTERIA_UNIT(NNB)) NUTRIENT_NAME(1) = 'NH4' NUTRIENT_UNIT(1) = 'mmole N m-3' NUTRIENT_NAME(2) = 'NO3' NUTRIENT_UNIT(2) = 'mmole N m-3' PHYTO_NAME(1) = 'Phytoplankton' PHYTO_UNIT(1) = 'mmole C m-3' ZOO_NAME(1) = 'Zooplankton' ZOO_UNIT(1) = 'mmole C m-3' DETRITUS_NAME(1) = 'Detritus' DETRITUS_UNIT(1) = 'mmole C m-3' DOM_NAME(1) = 'DOM' DOM_UNIT(1) = 'mmole C m-3' BACTERIA_NAME(1) = 'Bacteria' BACTERIA_UNIT(1) = 'mmole C m-3' CASE ('N2P2Z2D2') NNN=3 NNP=2 NNZ=2 NNM=0 NNB=0 NND=2 NNA=0 NTT=NNN+NNP+NNZ+NNM+NNB+NND+NNA !TOTAL VARIABLE NUMBER FOR VERTICAL MIXING INN=1 INP=INN+NNN INZ=INP+NNP INM=INZ+NNZ INB=INM+NNM IND=INB+NNB INA=IND+NND ALLOCATE (NUTRIENT_NAME(NNN)) ALLOCATE (NUTRIENT_UNIT(NNN)) ALLOCATE (PHYTO_NAME(NNP)) ALLOCATE (PHYTO_UNIT(NNP)) ALLOCATE (ZOO_NAME(NNZ)) ALLOCATE (ZOO_UNIT(NNZ)) ALLOCATE (DETRITUS_NAME(NND)) ALLOCATE (DETRITUS_UNIT(NND)) NUTRIENT_NAME(1) = 'NH4' NUTRIENT_UNIT(1) = 'mmole N m-3' NUTRIENT_NAME(2) = 'NO3' NUTRIENT_UNIT(2) = 'mmole N m-3' NUTRIENT_NAME(3) = 'SiO3' NUTRIENT_UNIT(3) = 'mmole Si m-3' PHYTO_NAME(1) = 'Small_phyto' PHYTO_UNIT(1) = 'mmole C m-3' PHYTO_NAME(2) = 'Large_phyto' PHYTO_UNIT(2) = 'mmole C m-3' ZOO_NAME(1) = 'Microzooplankton' ZOO_UNIT(1) = 'mmole C m-3' ZOO_NAME(2) = 'Mesozooplankton' ZOO_UNIT(2) = 'mmole C m-3' DETRITUS_NAME(1) = 'Detritus_N' DETRITUS_UNIT(1) = 'mmole N m-3' DETRITUS_NAME(2) = 'Detritus_Si' DETRITUS_UNIT(2) = 'mmole Si m-3' CASE ('N2P2Z2D2B') NNN=2 NNP=2 NNZ=2 NNM=0 NNB=1 NND=2 NNA=0 NTT=NNN+NNP+NNZ+NNM+NNB+NND+NNA !TOTAL VARIABLE NUMBER FOR VERTICAL MIXING INN=1 INP=INN+NNN INZ=INP+NNP INM=INZ+NNZ INB=INM+NNM IND=INB+NNB INA=IND+NND ALLOCATE (NUTRIENT_NAME(NNN)) ALLOCATE (NUTRIENT_UNIT(NNN)) ALLOCATE (PHYTO_NAME(NNP)) ALLOCATE (PHYTO_UNIT(NNP)) ALLOCATE (ZOO_NAME(NNZ)) ALLOCATE (ZOO_UNIT(NNZ)) ALLOCATE (DETRITUS_NAME(NND)) ALLOCATE (DETRITUS_UNIT(NND)) ALLOCATE (BACTERIA_NAME(NNB)) ALLOCATE (BACTERIA_UNIT(NNB)) NUTRIENT_NAME(1) = 'PO4' NUTRIENT_UNIT(1) = 'mmole P m-3' NUTRIENT_NAME(2) = 'SiO3' NUTRIENT_UNIT(2) = 'mmole Si m-3' PHYTO_NAME(1) = 'Small_phyto' PHYTO_UNIT(1) = 'mmole C m-3' PHYTO_NAME(2) = 'Large_phyto' PHYTO_UNIT(2) = 'mmole C m-3' ZOO_NAME(1) = 'Microzooplankton' ZOO_UNIT(1) = 'mmole C m-3' ZOO_NAME(2) = 'Mesozooplankton' ZOO_UNIT(2) = 'mmole C m-3' DETRITUS_NAME(1) = 'Detritus_P' DETRITUS_UNIT(1) = 'mmole P m-3' DETRITUS_NAME(2) = 'Detritus_Si' DETRITUS_UNIT(2) = 'mmole Si m-3' BACTERIA_NAME(1) = 'Bacteria' BACTERIA_UNIT(1) = 'mmole C m-3' CASE ('N2P2Z2D2SB') NNN=2 NNP=2 NNZ=2 NNM=1 NNB=2 NND=2 NNA=0 NTT=NNN+NNP+NNZ+NNM+NNB+NND+NNA !TOTAL VARIABLE NUMBER FOR VERTICAL MIXING INN=1 INP=INN+NNN INZ=INP+NNP INM=INZ+NNZ INB=INM+NNM IND=INB+NNB INA=IND+NND ALLOCATE (NUTRIENT_NAME(NNN)) ALLOCATE (NUTRIENT_UNIT(NNN)) ALLOCATE (PHYTO_NAME(NNP)) ALLOCATE (PHYTO_UNIT(NNP)) ALLOCATE (ZOO_NAME(NNZ)) ALLOCATE (ZOO_UNIT(NNZ)) ALLOCATE (DETRITUS_NAME(NND)) ALLOCATE (DETRITUS_UNIT(NND)) ALLOCATE (DOM_NAME(NNM)) ALLOCATE (DOM_UNIT(NNM)) ALLOCATE (BACTERIA_NAME(NNB)) ALLOCATE (BACTERIA_UNIT(NNB)) NUTRIENT_NAME(1) = 'NH4' NUTRIENT_UNIT(1) = 'mmole N m-3' NUTRIENT_NAME(2) = 'NO3' NUTRIENT_UNIT(2) = 'mmole N m-3' PHYTO_NAME(1) = 'Small_phyto' PHYTO_UNIT(1) = 'mmole C m-3' PHYTO_NAME(2) = 'Large_phyto' PHYTO_UNIT(2) = 'mmole C m-3' ZOO_NAME(1) = 'Microzooplankton' ZOO_UNIT(1) = 'mmole C m-3' ZOO_NAME(2) = 'Mesozooplankton' ZOO_UNIT(2) = 'mmole C m-3' DETRITUS_NAME(1) = 'Small_detritus' DETRITUS_UNIT(1) = 'mmole C m-3' DETRITUS_NAME(2) = 'Large_detritus' DETRITUS_UNIT(2) = 'mmole C m-3' DOM_NAME(1) = 'DOM' DOM_UNIT(1) = 'mmole C m-3' BACTERIA_NAME(1) = 'Bacteria' BACTERIA_UNIT(1) = 'mmole C m-3' CASE('NEW') !ASSIGNMENT FOR NEW MODEL !read in number of PHYTOPLANKTON Call Get_Val(NNP,biofile,'PHYTOPLANKTON_NUM',line=linenum,echo=.true.) ALLOCATE (PHYTO_NAME(NNP), PHYTO_UNIT(NNP)) !read in PHYTOPLANKTON names and units Call Get_Val_Array(PHYTO_NAME,biofile,'PHYTOPLANKTON_NAME',NNP,echo=.true.) Call Get_Val_Array(PHYTO_UNIT,biofile,'PHYTOPLANKTON_UNIT',NNP,echo=.true.) !read in number of ZOOPLANKTON Call Get_Val(NNZ,biofile,'ZOOPLANKTON_NUM',line=linenum,echo=.true.) ALLOCATE (ZOO_NAME(NNZ), ZOO_UNIT(NNZ)) !read in ZOOPLANKTON names and units Call Get_Val_Array(ZOO_NAME,biofile,'ZOOPLANKTON_NAME',NNZ,echo=.true.) Call Get_Val_Array(ZOO_UNIT,biofile,'ZOOPLANKTON_UNIT',NNZ,echo=.true.) !read in number of NUTRIENT Call Get_Val(NNN,biofile,'NUTRIENT_NUM',line=linenum,echo=.true.) ALLOCATE (NUTRIENT_NAME(NNN), NUTRIENT_UNIT(NNN)) !read in NUTRIENT names and units Call Get_Val_Array(NUTRIENT_NAME,biofile,'NUTRIENT_NAME',NNN,echo=.true.) Call Get_Val_Array(NUTRIENT_UNIT,biofile,'NUTRIENT_UNIT',NNN,echo=.true.) !read in number of BACTERIA Call Get_Val(NNB,biofile,'BACTERIA_NUM',line=linenum,echo=.true.) ALLOCATE (BACTERIA_NAME(NNB), BACTERIA_UNIT(NNB)) !read in BACTERIA names and units Call Get_Val_Array(BACTERIA_NAME,biofile,'BACTERIA_NAME',NNB,echo=.true.) Call Get_Val_Array(BACTERIA_UNIT,biofile,'BACTERIA_UNIT',NNB,echo=.true.) !read in number of DETRITUS Call Get_Val(NND,biofile,'DETRITUS_NUM',line=linenum,echo=.true.) ALLOCATE (DETRITUS_NAME(NND), DETRITUS_UNIT(NND)) !read in DETRITUS names and units Call Get_Val_Array(DETRITUS_NAME,biofile,'DETRITUS_NAME',NND,echo=.true.) Call Get_Val_Array(DETRITUS_UNIT,biofile,'DETRITUS_UNIT',NND,echo=.true.) !read in number of DOM Call Get_Val(NNM,biofile,'DOM_NUM',line=linenum,echo=.true.) ALLOCATE (DOM_NAME(NNM),DOM_UNIT(NNM)) !read in DOM names and units Call Get_Val_Array(DOM_NAME,biofile,'DOM_NAME',NNM,echo=.true.) Call Get_Val_Array(DOM_UNIT,biofile,'DOM_UNIT',NNM,echo=.true.) !read in number of AUXILIARY Call Get_Val(NNA,biofile,'AUXILIARY_NUM',line=linenum,echo=.true.) ALLOCATE (AUX_NAME(NNA),AUX_UNIT(NNA)) !read in AUXILIARY names and units Call Get_Val_Array(AUX_NAME,biofile,'AUXILIARY_NAME',NNA,echo=.true.) Call Get_Val_Array(AUX_UNIT,biofile,'AUXILIARY_UNIT',NNA,echo=.true.) NTT=NNN+NNP+NNZ+NNM+NNB+NND+NNA !TOTAL VARIABLE NUMBER FOR VERTICAL MIXING INN=1 INP=INN+NNN INZ=INP+NNP INM=INZ+NNZ INB=INM+NNM IND=INB+NNB INA=IND+NND END SELECT !******************* BIO_NAME ASSIGNMENT FOR NETCDF OUT PUT *************** ALLOCATE (BIO_NAME(NTT,4)) BIO_NAME(:,3) = 'Concentration' BIO_NAME(:,4) = 'Array' DO J=INN,NNN BIO_NAME(J,1)=NUTRIENT_NAME(J) BIO_NAME(J,2)=NUTRIENT_UNIT(J) END DO DO J=INP,INP+NNP-1 BIO_NAME(J,1)=PHYTO_NAME(J-INP+1) BIO_NAME(J,2)=PHYTO_UNIT(J-INP+1) END DO DO J=INZ,INZ+NNZ-1 BIO_NAME(J,1)=ZOO_NAME(J-INZ+1) BIO_NAME(J,2)=ZOO_UNIT(J-INZ+1) END DO DO J=INM,INM+NNM-1 BIO_NAME(J,1)=DOM_NAME(J-INM+1) BIO_NAME(J,2)=DOM_UNIT(J-INM+1) END DO DO J=INB,INB+NNB-1 BIO_NAME(J,1)=BACTERIA_NAME(J-INB+1) BIO_NAME(J,2)=BACTERIA_UNIT(J-INB+1) END DO DO J=IND,IND+NND-1 BIO_NAME(J,1)=DETRITUS_NAME(J-IND+1) BIO_NAME(J,2)=DETRITUS_UNIT(J-IND+1) END DO DO J=INA,INA+NNA-1 BIO_NAME(J,1)=AUX_NAME(J-INA+1) BIO_NAME(J,2)=AUX_UNIT(J-INA+1) END DO NO3_ON = .FALSE. !NH4 INHIBITION PO4_ON = .FALSE. !BAC UPTAKE ON PO4 DOCDON = .FALSE. !BOTH CONSIDERED IF(NNN.GT.1) THEN IF(NUTRIENT_NAME(2).EQ.'NO3') NO3_ON = .TRUE. ENDIF IF(NNM.GE.2) THEN IF(DOM_NAME(1).EQ.'DOC'.AND.DOM_NAME(2).EQ.'DON') DOCDON = .TRUE. END IF IF(NUTRIENT_NAME(1).EQ.'PO4') PO4_ON = .TRUE. !************* ALLOCATING GLOBAL PARAMETERS AND INITIALIZAITON ALLOCATE (BIO_VAR(KBV,NTT)) ; BIO_VAR = 0.0_SPP !ENSEMBLE VARIABLES FOR MIXING ALLOCATE (DELTA_D(KBV)) ; DELTA_D = 1.0_SPP !LAYER THICKNESS ALLOCATE (DELTA_Z(KBV)) ; DELTA_Z = 1.0_SPP !THICKNESS BETWEEN LAYER CENTRE ALLOCATE (DEPTH_Z(KBV)) ; DEPTH_Z = 1.0_SPP !DEPTH AT EACH LAYER CENTER ALLOCATE (KM_BIO(KBV)) ; KM_BIO = 0.0_SPP !DIFFUSIVITY ALLOCATE (T_BIO(KBV)) ; T_BIO = 0.0_SPP !TEMPERATURE !************* ALLOCATING PHYTOPLANKTON AND INITIALIZAITON ************* ALLOCATE (ALPHAP(NNP)) ; ALPHAP = 0.0_SPP !LIGHT FUNCTION COEFFICIENT ALLOCATE (ALPHA_U(NNP)) ; ALPHA_U = 0.5_SPP !COEFFICIENT BETWEEN MULTIPLICAITON & MINIMUM ALLOCATE (A_TP(NNP)) ; A_TP = 0.0_SPP !EXPONENTIAL FOR T FORCING ; ATANU_C = 0.03_SPP !ATTENUATION COEFFICIENT OF CHLOROPHYLL ; ATANU_D = 0.01_SPP !ATTENUATION COEFFICIENT OF DETRITUS ; ATANU_W = 0.04_SPP !ATTENUATION COEFFICIENT OF WATER ALLOCATE (BETAP(NNP)) ; BETAP = 0.0_SPP !PHOTOINHIBITION COEFFICIENT ALLOCATE (BIO_P(KBV,NNP)) ; BIO_P = 0.0_SPP !PHYTO BIOMASS ALLOCATE (CHL2C(NNP)) ; CHL2C = 0.24_SPP !CHLOROPHYLL TO CARBON RATIO IN PHYTO ALLOCATE (D_DOM(NNP)) ; D_DOM = 0.0_SPP !ACTIVE EXUDATION COEFFICIENT ALLOCATE (DPDOM(NNP)) ; DPDOM = 0.0_SPP !COEFFICIENT OF PHYTO EXUDATION ALLOCATE (FVP(KBV,NNP)) ; FVP = 0.0_DPP !PHYTO AFTER THRESHOLD SUBSTRACTION ALLOCATE (I_OPT(NNP)) ; I_OPT = 100._SPP !OPTIMAL LIGHT FOR PHYTO ; IRRAD0 = 200._SPP !IRRADIANCE AT THE SEA SURFACE ALLOCATE (K_LIGHT(NNP)) ; K_LIGHT = 50._SPP !HALF_SATURATION OF LIGHT FUNCTIONS ALLOCATE (MPD(NNP)) ; MPD = 0.0_SPP !PHYTO MORTALITY EOFFICIENT ALLOCATE (M_P(NNP)) ; M_P = 1.0_SPP !PHYTO MORTALITY ORDER ALLOCATE (N_P(NNP)) ; N_P = 1.0_SPP !POWER OF LIGHT FUNCTIONS ; PARFRAC = 0.43_SPP ALLOCATE (P_D(KBV,NNP)) ; P_D = 0.0_SPP !PHYTO MORTALITY ALLOCATE (P_DOM(KBV,NNP)) ; P_DOM = 0.0_SPP !PHYTO EXUDATION OF DOM ALLOCATE (P_N(KBV,NNP)) ; P_N = 0.0_SPP !PHYTO RESPIRATION ALLOCATE (P_0(NNP)) ; P_0 = 0.0_SPP !PHYTO THRESHOLD ; RP_T = 0.0_SPP !EXPONENTIAL FOR T FORCING ON RESPIRATION ALLOCATE (R_P(NNP)) ; R_P = 1.0E-7_SPP !PHYTO RESPIRATION COEFFICIENT ALLOCATE (T_OPTP(NNP)) ; T_OPTP = 20._SPP !OPTIMAL TEMPERATURE FOR PHYTO ALLOCATE (ULR(NNP)) ; ULR = 0.0_SPP !LIGHT GROWHT FACTOR FOR PHYTO ALLOCATE (UMAX(NNP)) ; UMAX = 1.16E-5_SPP !PHYTO MAXIMUM GROWTH RATE ALLOCATE (UNR(NNP,NNN+1)) ; UNR = 1.0_SPP !NUTRIENT GROWTH FACTOR FOR PHYTO ALLOCATE (UNRMIN(NNP)) ; UNRMIN = 1.0_SPP !MINIMUM NUTRIENT FACTOR FOR PHYTO ALLOCATE (U_P(KBV,NNP)) ; U_P = 0.0_SPP !PHYTO GROWTH ALLOCATE (UTR(NNP)) ; UTR = 1.0_SPP !T GORWTH FACTOR FOR PHYTO ALLOCATE (W_P(NNP)) ; W_P = 1.0_DPP !SINKING VELOCITY OF PHYTO ALLOCATE (WSNK_P(KBV,NNP)) ; WSNK_P = 0.0_DPP !SINKING FLUX OF PHYTO !**************ALLOCATING ZOOPLANKTON AND INITIALIZATION ***************** ALLOCATE (ACTIVE_R(NNZ)) ; ACTIVE_R = 0.0_SPP !ZOO ACTIVE RESPIRATION COEFFICIENT ALLOCATE (A_TZ(NNZ)) ; A_TZ = 0.0_SPP !T EXPONENTAIL COEFFICIENT ALLOCATE (BIO_Z(KBV,NNZ)) ; BIO_Z = 0.0_SPP !ZOOPLANKTON BIOMASS ALLOCATE (EFFIB(NNB,NNZ)) ; EFFIB = 0.3_SPP !GROWTH EFFICIENCY ON BACTERIA ALLOCATE (EFFID(NND,NNZ)) ; EFFID = 0.3_SPP !GROWTH EFFICIENCY ON DETRITUS ALLOCATE (EFFIP(NNP,NNZ)) ; EFFIP = 0.3_SPP !GROWTH EFFICIENCY ON PHYTO ALLOCATE (EFFIZ(NNZ,NNZ)) ; EFFIZ = 0.3_SPP !GROWTH EFFICIENCY ON ZOOPLANKTON ALLOCATE (FVZ(KBV,NNP)) ; FVZ = 0.0_SPP !ZOOPLANKTON SUBSTRACTED OF THRESHOLD ALLOCATE (G_B(KBV,NNB,NNZ)) ; G_B = 0.0_SPP !PREDATION ON BACTERIA ALLOCATE (G_D(KBV,NND,NNZ)) ; G_D = 0.0_SPP !GRAZING ON DETRITUS ALLOCATE (G_MAX(NNZ)) ; G_MAX = 1.16E-5_SPP !MAXIMUM GRAZING RATE ALLOCATE (G_P(KBV,NNP,NNZ)) ; G_P = 0.0_SPP !GRAZING ON PHYTOPLANKTON ALLOCATE (G_RATE(NNZ)) ; G_RATE = 0.0_SPP !GRAZING RATE ALLOCATE (G_Z(KBV,NNZ,NNZ)) ; G_Z = 0.0_SPP !PREDATION OF ZOOPLANKTON ALLOCATE (K_ZG(NNZ)) ; K_ZG = 1.0_SPP !HALF-SATURATION FOR ZOO GRAZING ALLOCATE (M_G(NNZ)) ; M_G = 1.0_SPP !ZOOPLANKTON GRAZING POWER ALLOCATE (MZD(NNZ)) ; MZD = 0.0_SPP !ZOOPLANKTON MORTALITY COEFFICIENT ALLOCATE (M_Z(NNZ)) ; M_Z = 1.0_SPP !ZOOPLANKTON MORTALITY POWER ALLOCATE (P_C(NNZ)) ; P_C = 0.0_SPP !GRAZING THRESHOLD ALLOCATE (RECRUIT_LOSS(0:NNZ)) ; RECRUIT_LOSS= 0.0_SPP !RECRUITMENT LOSS ALLOCATE (R_RECRUIT(NNZ)) ; R_RECRUIT = 0.0_SPP !RECRUIT COEFFICIENT ALLOCATE (R_Z(NNZ)) ; R_Z = 1.E-7_SPP !ZOOPLANKTON RESPIRATION COEFFICIENT ALLOCATE (SIGMA_B(NNB,NNZ)) ; SIGMA_B = 1.0_SPP !PREFERENCE ON BACTERIA ALLOCATE (SIGMA_D(NND,NNZ)) ; SIGMA_D = 1.0_SPP !PREFERENCE ON DETRITUS ALLOCATE (SIGMA_P(NNP,NNZ)) ; SIGMA_P = 1.0_SPP !PREFERENCE ON PHYTO ALLOCATE (SIGMA_Z(NNZ,NNZ)) ; SIGMA_Z = 1.0_SPP !PREFERENCE ON ZOOPLANKTON ALLOCATE (T_OPTZ(NNZ)) ; T_OPTZ = 20._SPP !OPTIMAL TEMPERATURE FOR ZOOPLANKTON ALLOCATE (Z_D(KBV,NNZ)) ; Z_D = 0.0_SPP !ZOOPANKTON MORTALITY ALLOCATE (Z_N(KBV,NNZ)) ; Z_N = 0.0_SPP !ZOOPLANKTON RESPIRATION ALLOCATE (Z_0(NNZ)) ; Z_0 = 0.0_SPP !ZOOPLANKTO THRESHOLLD !************ ALLOCATING BACTERIA AND INITIALIZATION ************* ALLOCATE (A_TB(NNB)) ; A_TB = 0.0_SPP !T EXPONENTAIL COEFFICIENT ALLOCATE (BIO_B(KBV,NNB)) ; BIO_B = 0.0_SPP !BACTERIA BIOMASS ALLOCATE (B_0(NNB)) ; B_0 = 0.0_SPP !BACTERIA THRESHOLD ALLOCATE (DELTA_B(NNB)) ; DELTA_B = 0.4_SPP !RATIO BETWEEN NH4 AND DON UPTAKE ALLOCATE (EFFIBD(NND,NNB)) ; EFFIBD = 0.3_SPP !GROWTH EFFICIENCY ON DETRITUS ALLOCATE (EFFIDOM(NNM,NNB)) ; EFFIDOM = 0.3_SPP !GROWTH EFFICIENCY ON DOM ALLOCATE (EFFIN(NNN,NNB)) ; EFFIN = 1.0_SPP !GROWTH EFFICIENCY ON NH4 ALLOCATE (FVB(KBV,NNB)) ; FVB = 0.0_SPP !BACTERIA SUBSTRACTED OF THRESHOLD ALLOCATE (R_B(NNB)) ; R_B = 1.E-6_SPP !BACTERIA RESPIRATION ALLOCATE (RESPIRATION_B(KBV,NNB)) ; RESPIRATION_B= 0.0_SPP !BACTERIA RESPIRATION ALLOCATE (SIGMA_BD(NND,NNB)) ; SIGMA_BD = 0.2_SPP !PREFERENCE ON DETRITUS ALLOCATE (SIGMA_DOM(NNM,NNB)) ; SIGMA_DOM = 0.2_SPP !PREFERENCE ON DOM ALLOCATE (SIGMA_N(NNN,NNB)) ; SIGMA_N = 1.0_SPP !PREFERENCE ON DON ALLOCATE (T_OPTB(NNB)) ; T_OPTB = 20._SPP !OPTIMAL TEMPERATURE FOR BACTERIA ALLOCATE (U_B(NNB)) ; U_B = 0.0_SPP !BACTERIA GROWTH RATE ALLOCATE (UBMAX(NNB)) ; UBMAX = 1.E-5_SPP !MAXIMUM GROWTH RATE OF BACTERIA ALLOCATE (UPTAKE_BD(KBV,NND,NNB)) ; UPTAKE_BD = 0.0_SPP !DETRITUS UPTAKE BY BACTERI ALLOCATE (UPTAKE_BN(KBV,NNN,NNB)) ; UPTAKE_BN = 0.0_SPP !NUTRIENT UPTAKE BY BACTERIA ALLOCATE (UPTAKE_DOM(KBV,NNM,NNB)) ; UPTAKE_DOM = 0.0_SPP !DOM UPTAKE BY BACTERIA ALLOCATE (UPTAKE_DON(KBV,NNB)) ; UPTAKE_DON = 0.0_SPP !DON UPTAKE BY BACTERIA !****************** ALLOCATING DETRITUS AND INITIALIZATION ************************* ALLOCATE (AGGREGATION(KBV,0:NND)) ;AGGREGATION = 0.0_SPP !AGGREGATION ALLOCATE (ALPHA_BD(NND,NNB,NNZ)) ; ALPHA_BD = 0.0_SPP !FEEDING LOSS FROM BACTERIA TO DETRITUS ALLOCATE (ALPHA_DAG(NND)) ; ALPHA_DAG = 0.0_SPP !AGGREGATION COEFFICIENT ALLOCATE (ALPHA_DD(NND,NND,NNZ)) ; ALPHA_DD = 0.0_SPP !FEEDING LOSS FROM DETRITUS TO DETRITUS ALLOCATE (ALPHA_DDG(NND)) ; ALPHA_DDG = 0.0_SPP !DISAGGREGATION COEFFICIENT ALLOCATE (ALPHA_PD(NND,NNP,NNZ)) ; ALPHA_PD = 0.0_SPP !FEEDING LOSS FROM PHYTO TO DETRITUS ALLOCATE (ALPHA_ZD(NND,NNZ,NNZ)) ; ALPHA_ZD = 0.0_SPP !FEEDING LOSS FROM ZOO TO DETRITUS ALLOCATE (BIO_D(KBV,NND)) ; BIO_D = 0.0_SPP !DETRITUS ABUNDANCE ALLOCATE (DETRITE(KBV,NND)) ; DETRITE = 0.0_DPP !DETRITUS CONCENTRATION ALLOCATE (D_D(NND)) ; D_D = 0.0_SPP !DISSOLUTION COEFFICIENT ALLOCATE (D_0(NND)) ; D_0 = 0.0_SPP !DETRITUS THRESHOLD ALLOCATE (D_RN(NND)) ; D_RN = 0.0_SPP !REMINERALIZATION COEFFICIENT ALLOCATE (DISAGGREGATION(KBV,NND+1)); DISAGGREGATION = 0.0_SPP !DISAGGREGATION ALLOCATE (D_SINK(KBV,NND)) ; D_SINK = 0.0_DPP !DETRITUS SINKING FLUX ALLOCATE (D_SINK1(KBV)) ; D_SINK1 = 0.0_DPP !SINKING FLUX WITHIN 1 ITERATION ALLOCATE (DISSOLUTION(KBV,NND)) ; DISSOLUTION = 0.0_SPP !DISSOLUTION ALLOCATE (EPSILON_PD(NND,NNP)) ; EPSILON_PD = 0.0_SPP !PHYTO MORTALITY TO DETRITUS ALLOCATE (EPSILON_ZD(NND,NNZ)) ; EPSILON_ZD = 0.0_SPP !ZOO MORTALTIY TO DETRITUS ALLOCATE (FVD(KBV,NND)) ; FVD = 0.0_SPP !DETRITUS AFTER THRESHOLD SUBSTRACTION ALLOCATE (REMINERALIZATION(KBV,NND)); REMINERALIZATION=0.0_SPP !REMINERALIZATION ALLOCATE (W_D(NND)) ; W_D = 0.0_SPP !DETRITUS SINKING VELOCITY ALLOCATE (W_D_TOTAL(NND)) ; W_D_TOTAL = 0.0_SPP !SINKING DISTANCE WITIN 1 T_STEP !****************** ALLOCATING DOM AND INITIALIZATION ***************** ALLOCATE (AGE_DOM(0:NNM)) ; AGE_DOM = 0.0_SPP !DOM AGEING ALLOCATE (ALPHA_DOM(NNM)) ; ALPHA_DOM = 0.0_SPP !DOM AGEING COEFFICIENT ALLOCATE (ALPHA_PDOM(NNM,NNP)) ; ALPHA_PDOM = 0.0_SPP !PHYTO EXUDATION TO DOM ALLOCATE (ALPHA_DDOM(NNM,NND)) ; ALPHA_DDOM = 0.0_SPP !DETRITUS DISSOLUTION TO DOM ALLOCATE (ALPHA_ZPDOM(NNM,NNP,NNZ)); ALPHA_ZPDOM = 0.0_SPP !FEEDING LOSS FROM PHYTO TO DOM ALLOCATE (ALPHA_ZDDOM(NNM,NNP,NNZ)); ALPHA_ZDDOM = 0.0_SPP !FEEDING LOSS FROM DETRITUS TO DOM ALLOCATE (ALPHA_ZZDOM(NNM,NNZ,NNZ)); ALPHA_ZZDOM = 0.0_SPP !FEEDING LOSS FROM ZOO TO DOM ALLOCATE (ALPHA_ZBDOM(NNM,NNB,NNZ)); ALPHA_ZBDOM = 0.0_SPP !FEEDING LOSS FROM BACTERIA TO DOM ALLOCATE (BIO_DOM(KBV,NNM)) ; BIO_DOM = 0.0_SPP !DOM CONCENTRATION ALLOCATE (DOM_0(NNM)) ; DOM_0 = 0.0_SPP !DOM THRESHOLD ALLOCATE (FVDOM(KBV,NNM)) ; FVDOM = 0.0_SPP !DOM SUBSTRACTED BY THRESHOLD !************* ALLOCATING NUTRIENT AND INITIALIZATION ****************** ALLOCATE (BIO_N(KBV,NNN)) ; BIO_N = 0.0_SPP !NUTRIENT CONCENTRATION ALLOCATE (FVNN(KBV,NNN)) ; FVNN = 0.0_SPP !NUTRIENT BUSTRACTED BY THRESHOLD ALLOCATE (KSN(NNN,NNP)) ; KSN = 0.0_SPP !HALF-SATURAITON OF NUTRIENT ; L_NH4N = 0.0_SPP !CRITICL LIGHT FOR NITRIFICATION ALLOCATE (NH4_NO3(KBV)) ; NH4_NO3 = 0.0_SPP !NITRIFICATION ALLOCATE (N2CB(NNN,NNB)) ; N2CB = 1.0_SPP !ELEMENT RATIO IN BACTERIA ALLOCATE (N2CD(NNN,NND)) ; N2CD = 1.0_SPP !ELEMENT RATIO IN DETRITUS ALLOCATE (N2CP(NNN,NNP)) ; N2CP = 1.0_SPP !ELEMENT RATIO IN PHYTO ALLOCATE (N2CZ(NNN,NNZ)) ; N2CZ = 1.0_SPP !ELEMENT RATIO IN ZOOPLANKTON ALLOCATE (N2CDOM(NNN,NNM)) ; N2CDOM = 1.0_SPP !ELEMENT RATIO IN DOM ALLOCATE (N2CZB(NNN,NNB,NNZ)) ; N2CZB = 1.0_SPP !ELEM. RATIO IN ACTIVE RESPIR. FROM GRAZING ON BACTERIA ALLOCATE (N2CZD(NNN,NND,NNZ)) ; N2CZD = 1.0_SPP !ELEM. RATIO IN ACTIVE RESPIR. FROM GRAZING ON DETRITUS ALLOCATE (N2CZP(NNN,NNP,NNZ)) ; N2CZP = 1.0_SPP !ELEM. RATIO IN ACTIVE RESPIR. FROM GRAZING ON PHYTO ALLOCATE (N2CZZ(NNN,NNZ,NNZ)) ; N2CZZ = 1.0_SPP !ELEM. RATIO IN ACTIVE RESPIR. FROM PREDATION ON ZOO ALLOCATE (N_0(NNN)) ; N_0 = 0.0_SPP !NUTRIENT THRESHOLD ; R_AN = 0.0_SPP !NITRIFICATION COEFFICIENT ALLOCATE (UPTAKE_PN(KBV,NNN,NNP)) ; UPTAKE_PN = 0.0_SPP !NUTRIENT UPTAKE BY PHYTO !************************* FUNCTIONS AND PARAMETER VALUES *************** !************************* PHYTOPLANKTON PARAMETERS ****************************! !read in light function Call Get_Val(L_FUNCTION,biofile,'L_FUNCTION',line=linenum,echo=.true.) !read in zooplankton grazing function Call Get_Val(G_FUNCTION,biofile,'G_FUNCTION',line=linenum,echo=.true.) !read in LIGHT FUNCTION COEFFICIENT Call Get_Val_Array(ALPHAP,biofile,'ALPHAP',NNP,echo=.true.) !read in COEFFICIENT BETWEEN MULTIPLICATION & MINIMUM Call Get_Val_Array(ALPHA_U,biofile,'ALPHA_U',NNP,echo=.true.) !read in EXPONENTIAL FOR T FORCING Call Get_Val_Array(A_TP,biofile,'A_TP',NNP,echo=.true.,option=.true.) !read in ATTENUATION COEFFICIENT OF CHLOROPHYLL Call Get_Val(ATANU_C,biofile,'ATANU_C',line=linenum,echo=.true.) !read in ATTENUATION COEFFICIENT OF DETRITUS Call Get_Val(ATANU_D,biofile,'ATANU_D',line=linenum,echo=.true.) !read in ATTENUATION COEFFICIENT OF WATER Call Get_Val(ATANU_W,biofile,'ATANU_W',line=linenum,echo=.true.) !read in PHOTOINHIBITION COEFFICIENT Call Get_Val_Array(BETAP,biofile,'BETAP',NNP,echo=.true.) !read in CHLOROPHYLL TO CARBON RATIO IN PHYTO Call Get_Val_Array(CHL2C,biofile,'CHL2C',NNP,echo=.true.) !read in ACTIVE EXUDATION COEFFICIENT Call Get_Val_Array(D_DOM,biofile,'D_DOM',NNP,echo=.true.) !read in PASSIVE PHYTO EXUDATION COEFFICIENT Call Get_Val_Array(DPDOM,biofile,'DPDOM',NNP,echo=.true.) !read in OPTIMAL LIGHT FOR PHYTO Call Get_Val_Array(I_OPT,biofile,'I_OPT',NNP,echo=.true.) !read in HALF_SATURATION OF LIGHT FUNCTIONS Call Get_Val_Array(K_LIGHT,biofile,'K_LIGHT',NNP,echo=.true.) !read in PHYTO MORTALITY EOFFICIENT Call Get_Val_Array(MPD,biofile,'MPD',NNP,echo=.true.) !read in PHYTO MORTALITY ORDER Call Get_Val_Array(M_P,biofile,'M_P',NNP,echo=.true.) !read in POWER OF LIGHT FUNCTIONS Call Get_Val_Array(N_P,biofile,'N_P',NNP,echo=.true.) !read in PAR FRACTION Call Get_Val(PARFRAC,biofile,'PARFRAC',line=linenum,echo=.true.) !read in PHYTOPANKTON THRESHOLDS Call Get_Val_Array(P_0,biofile,'P_0',NNP,echo=.true.,option=.true.) !read in EXPONENTIAL FOR T FORCING ON RESPIRATION Call Get_Val(RP_T,biofile,'RP_T',line=linenum,echo=.true.,option=.true.) !read in PHYTO RESPIRATION COEFFICIENT Call Get_Val_Array(R_P,biofile,'R_P',NNP,echo=.true.) !read in OPTIMAL TEMPERATURE FOR PHYTO Call Get_Val_Array(T_OPTP,biofile,'T_OPTP',NNP,echo=.true.,option=.true.) !read in PHYTO MAXIMUM GROWTH RATE Call Get_Val_Array(UMAX,biofile,'UMAX',NNP,echo=.true.) !read in SINKING VELOCITY OF PHYTO Call Get_Val_Array(W_P,biofile,'W_P',NNP,echo=.true.) !******************** ZOOPLANKTON PARAMETERS **********************! !read in ACTIVE RESPIRATION COEFFICIENT Call Get_Val_Array(ACTIVE_R,biofile,'ACTIVE_R',NNZ,echo=.true.) !read in EXPONENTIAL FOR T FORCING Call Get_Val_Array(A_TZ,biofile,'A_TZ',NNZ,echo=.true.,option=.true.) !read in GROWTH EFFICIENCY ON BACTERIA if(NNB*NNZ/=0)then allocate(tmp(NNB*NNZ)) ; tmp = 0.0 Call Get_Val_Array(tmp,biofile,'EFFIB',NNB*NNZ,echo=.true.) do J=1,NNZ EFFIB(1:NNB,J)=tmp(1+(J-1)*NNB:NNB+(J-1)*NNB) end do deallocate(tmp) endif !read in GROWTH EFFICIENCY ON DETRITUS if(NND*NNZ/=0)then allocate(tmp(NND*NNZ)) ; tmp = 0.0 Call Get_Val_Array(tmp,biofile,'EFFID',NND*NNZ,echo=.true.) do J=1,NNZ EFFID(1:NND,J)=tmp(1+(J-1)*NND:NND+(J-1)*NND) end do deallocate(tmp) endif !read in GROWTH EFFICIENCY ON PHYTO if(NNP*NNZ/=0)then allocate(tmp(NNP*NNZ)) ; tmp = 0.0 Call Get_Val_Array(tmp,biofile,'EFFIP',NNP*NNZ,echo=.true.) do J=1,NNZ EFFIP(1:NNP,J)=tmp(1+(J-1)*NNP:NNP+(J-1)*NNP) end do deallocate(tmp) endif !read in GROWTH EFFICIENCY ON ZOOPLANKTON if(NNZ*NNZ/=0)then allocate(tmp(NNZ*NNZ)) ; tmp = 0.0 Call Get_Val_Array(tmp,biofile,'EFFIZ',NNZ*NNZ,echo=.true.) do J=1,NNZ EFFIZ(1:NNZ,J)=tmp(1+(J-1)*NNZ:NNZ+(J-1)*NNZ) end do deallocate(tmp) endif !read in MAXIMUM GRAZING RATE Call Get_Val_Array(G_MAX,biofile,'G_MAX',NNZ,echo=.true.) !read in HALF-SATURATION FOR ZOO GRAZING Call Get_Val_Array(K_ZG,biofile,'K_ZG',NNZ,echo=.true.) !read in ZOOPLANKTON GRAZING POWER Call Get_Val_Array(M_G,biofile,'M_G',NNZ,echo=.true.) !read in ZOOPLANKTON MORTALITY COEFFICIENT Call Get_Val_Array(MZD,biofile,'MZD',NNZ,echo=.true.) !read in ZOOPLANKTON MORTALITY POWER Call Get_Val_Array(M_Z,biofile,'M_Z',NNZ,echo=.true.,option=.true.) !read in GRAZING THRESHOLD Call Get_Val_Array(P_C,biofile,'P_C',NNZ,echo=.true.) !read in RECRUIT COEFFICIENT Call Get_Val_Array(R_RECRUIT,biofile,'R_RECRUIT',NNZ,echo=.true.) !read in ZOO PASSIVE RESPIRATION COEFFICIENT Call Get_Val_Array(R_Z,biofile,'R_Z',NNZ,echo=.true.) !read in PREFERENCE ON BACTERIA if(NNB*NNZ)then allocate(tmp(NNB*NNZ)) ; tmp = 0.0 Call Get_Val_Array(tmp,biofile,'SIGMA_B',NNB*NNZ,echo=.true.) do j=1,nnz SIGMA_B(1:nnb,j)=tmp(1+(j-1)*nnb:nnb+(j-1)*nnb) end do deallocate(tmp) endif !read in PREFERENCE ON DETRITUS if(NNZ*NND/=0)then allocate(tmp(NNZ*NND)) ; tmp = 0.0 Call Get_Val_Array(tmp,biofile,'SIGMA_D',NNZ*NND,echo=.true.) do j=1,nnz SIGMA_D(1:nnd,j)=tmp(1+(j-1)*nnd:nnd+(j-1)*nnd) end do deallocate(tmp) endif !read in PREFERENCE ON PHYTO if(NNZ*NNP/=0)then allocate(tmp(NNZ*NNP)) ; tmp = 0.0 Call Get_Val_Array(tmp,biofile,'SIGMA_P',NNZ*NNP,echo=.true.) do j=1,nnz SIGMA_P(1:nnp,j)=tmp(1+(j-1)*nnp:nnp+(j-1)*nnp) end do deallocate(tmp) endif !read in PREFERENCE ON ZOOPLANKTON if(NNZ*NNZ)then allocate(tmp(NNZ*NNZ)) ; tmp = 0.0 Call Get_Val_Array(tmp,biofile,'SIGMA_Z',NNZ*NNZ,echo=.true.) do j=1,nnz SIGMA_Z(1:nnz,j)=tmp(1+(j-1)*nnz:nnz+(j-1)*nnz) end do deallocate(tmp) endif !read in OPTIMAL TEMPERATURE FOR ZOOPLANKTON Call Get_Val_Array(T_OPTZ,biofile,'T_OPTZ',NNZ,echo=.true.,option=.true.) !read in ZOOPLANKTON THRESHOLLD Call Get_Val_Array(Z_0,biofile,'Z_0',NNZ,echo=.true.,option=.true.) !********************* BACTERIA PARAMETERS **********************! !read in EXPONENTAIL FOR T FORCING Call Get_Val_Array(A_TB,biofile,'A_TB',NNB,echo=.true.) !read in BACTERIA THRESHOLLD Call Get_Val_Array(B_0,biofile,'B_0',NNB,echo=.true.,option=.true.) !read in RATIO BETWEEN NH4 AND DON UPTAKE Call Get_Val_Array(DELTA_B,biofile,'DELTA_B',NNB,echo=.true.) !read in GROWTH EFFICIENCY ON DETRITUS if(NNB*NND/=0)then allocate(tmp(NNB*NND)) ; tmp = 0.0 Call Get_Val_Array(tmp,biofile,'EFFIBD',NNB*NND,echo=.true.) do j=1,nnb EFFIBD(1:nnd,j)=tmp(1+(j-1)*nnd:nnd+(j-1)*nnd) end do deallocate(tmp) endif !read in GROWTH EFFICIENCY ON DOM if(NNB*NNM/=0)then allocate(tmp(NNB*NNM)) ; tmp = 0.0 Call Get_Val_Array(tmp,biofile,'EFFIDOM',NNB*NNM,echo=.true.) do j=1,nnb EFFIDOM(1:nnm,j)=tmp(1+(j-1)*nnm:nnm+(j-1)*nnm) end do deallocate(tmp) endif !read in GROWTH EFFICIENCY ON NH4 if(NNB*NNN/=0)then allocate(tmp(NNB*NNN)) ; tmp = 0.0 Call Get_Val_Array(tmp,biofile,'EFFIN',NNB*NNN,echo=.true.) do j=1,nnb EFFIN(1:nnn,j)=tmp(1+(j-1)*nnn:nnn+(j-1)*nnn) end do deallocate(tmp) endif !read in BACTERIA RESPIRATION COEFFICIENT Call Get_Val_Array(R_B,biofile,'R_B',NNB,echo=.true.) !read in PREFERENCE ON DOM if(NNB*NND/=0)then allocate(tmp(NNB*NND)) ; tmp = 0.0 Call Get_Val_Array(tmp,biofile,'SIGMA_BD',NNB*NND,echo=.true.) do j=1,nnb SIGMA_BD(1:nnd,j)=tmp(1+(j-1)*nnd:nnd+(j-1)*nnd) end do deallocate(tmp) endif !read in PREFERENCE ON DOM if(NNB*NNM/=0)then allocate(tmp(NNB*NNM)) ; tmp = 0.0 Call Get_Val_Array(tmp,biofile,'SIGMA_DOM',NNB*NNM,echo=.true.) do j=1,nnb SIGMA_DOM(1:nnm,j)=tmp(1+(j-1)*nnm:nnm+(j-1)*nnm) end do deallocate(tmp) endif !read in PREFERENCE ON DON if(NNB*NNN/=0)then allocate(tmp(NNB*NNN)) ; tmp = 0.0 Call Get_Val_Array(tmp,biofile,'SIGMA_N',NNB*NNN,echo=.true.) do j=1,nnb SIGMA_N(1:nnn,j)=tmp(1+(j-1)*nnn:nnn+(j-1)*nnn) end do deallocate(tmp) endif !read in OPTIMAL T FOR BACTERIA Call Get_Val_Array(T_OPTB,biofile,'T_OPTB',NNB,echo=.true.) !read in MAXIMUM GROWTH RATE OF BACTERIA Call Get_Val_Array(UBMAX,biofile,'UBMAX',NNB,echo=.true.) !*********************** DETRITUS PARAMETERS ********************** !read in FEEDING LOSS FROM BACTERIA TO DETRITUS if(NND*NNB*NNZ/=0)then allocate(tmp(NND*NNB*NNZ)) ; tmp = 0.0 Call Get_Val_Array(tmp,biofile,'ALPHA_BD',NND*NNB*NNZ,echo=.true.) do K=1,NNZ do J=1,NNB ALPHA_BD(1:NND,J,K)=tmp(1+(J-1)*NND*(K-1):NND+(J-1)*NND*(K-1)) end do end do deallocate(tmp) endif !read in AGGREGATION COEFFICIENT Call Get_Val_Array(ALPHA_DAG,biofile,'ALPHA_DAG',NND,echo=.true.,option=.true.) !read in FEEDING LOSS FROM DETRITUS TO DETRITUS if(NND*NND*NNZ/=0)then allocate(tmp(NND*NND*NNZ)) ; tmp = 0.0 Call Get_Val_Array(tmp,biofile,'ALPHA_DD',NND*NND*NNZ,echo=.true.) do K=1,NNZ do J=1,NND ALPHA_DD(1:NND,J,K)=tmp(1+(J-1)*NND*(K-1):NND+(J-1)*NND*(K-1)) end do end do deallocate(tmp) endif !read in DISAGGREGATION COEFFICIENT Call Get_Val_Array(ALPHA_DDG,biofile,'ALPHA_DDG',NND,echo=.true.,option=.true.) !read in FEEDING LOSS FROM PHYTO TO DETRITU if(NND*NNP*NNZ/=0)then allocate(tmp(NND*NNP*NNZ)) ; tmp = 0.0 Call Get_Val_Array(tmp,biofile,'ALPHA_PD',NND*NNP*NNZ,echo=.true.) do K=1,NNZ do J=1,NNP ALPHA_PD(1:NND,J,K)=tmp(1+(J-1)*NND*(K-1):NND+(J-1)*NND*(K-1)) end do end do deallocate(tmp) endif !read in FEEDING LOSS FROM ZOO TO DETRITUS if(NND*NNZ*NNZ/=0)then allocate(tmp(NND*NNZ*NNZ)) ; tmp = 0.0 Call Get_Val_Array(tmp,biofile,'ALPHA_ZD',NND*NNZ*NNZ,echo=.true.) do K=1,NNZ do J=1,NNZ ALPHA_ZD(1:NND,J,K)=tmp(1+(J-1)*NND*(K-1):NND+(J-1)*NND*(K-1)) end do end do deallocate(tmp) endif !read in DISSOLUTION COEFFICIENT Call Get_Val_Array(D_D,biofile,'D_D',NND,echo=.true.) !read in DETRITUS THRESHOLD Call Get_Val_Array(D_0,biofile,'D_0',NND,echo=.true.,option=.true.) !read in REMINERALIZATION COEFFICIENT Call Get_Val_Array(D_RN,biofile,'D_RN',NND,echo=.true.) !read in PHYTO MORTALITY TO DETRITUS if(NND*NNP/=0)then allocate(tmp(NND*NNP)) ; tmp = 0.0 Call Get_Val_Array(tmp,biofile,'EPSILON_PD',NND*NNP,echo=.true.) do j=1,NNP EPSILON_PD(1:NND,j)=tmp(1+(J-1)*NND:NND+(J-1)*NND) end do deallocate(tmp) endif !read in ZOO MORTALTIY TO DETRITU if(NND*NNZ/=0)then allocate(tmp(NND*NNZ)) ; tmp = 0.0 Call Get_Val_Array(tmp,biofile,'EPSILON_ZD',NND*NNZ,echo=.true.) do j=1,NNZ EPSILON_ZD(1:NND,j)=tmp(1+(J-1)*NND:NND+(J-1)*NND) end do deallocate(tmp) endif !read in DETRITUS SINKING VELOCITY Call Get_Val_Array(W_D,biofile,'W_D',NND,echo=.true.) !********************** DOM PARAMETERS *************************! !read in DOM AGEING COEFFICIENT Call Get_Val_Array(ALPHA_DOM,biofile,'ALPHA_DOM',NNM,echo=.true.) !read in PHYTO EXUDATION TO DOM if(NNM*NNP/=0)then allocate(tmp(NNM*NNP)) ; tmp = 0.0 Call Get_Val_Array(tmp,biofile,'ALPHA_PDOM',NNM*NNP,echo=.true.) do j=1,NNP ALPHA_PDOM(1:NNM,j)=tmp(1+(J-1)*NNM:NNM+(J-1)*NNM) end do deallocate(tmp) endif !read in DETRITUS DISSOLUTION TO DOM if(NNM*NND/=0)then allocate(tmp(NNM*NND)) ; tmp = 0.0 Call Get_Val_Array(tmp,biofile,'ALPHA_DDOM',NNM*NND,echo=.true.) do j=1,NND ALPHA_DDOM(1:NNM,j)=tmp(1+(J-1)*NNM:NNM+(J-1)*NNM) end do deallocate(tmp) endif !read in FEEDING LOSS FROM PHYTO TO DOM if(NNM*NNP*NNZ/=0)then allocate(tmp(NNM*NNP*NNZ)) ; tmp = 0.0 Call Get_Val_Array(tmp,biofile,'ALPHA_ZPDOM',NNM*NNP*NNZ,echo=.true.) do K=1,NNZ do J=1,NNP ALPHA_ZPDOM(1:NNM,J,K)=tmp(1+(J-1)*NNM*(K-1):NNM+(J-1)*NNM*(K-1)) end do end do deallocate(tmp) endif !read in FEEDING LOSS FROM DETRITUS TO DOM if(NNM*NND*NNZ/=0)then allocate(tmp(NNM*NND*NNZ)) ; tmp = 0.0 Call Get_Val_Array(tmp,biofile,'ALPHA_ZDDOM',NNM*NND*NNZ,echo=.true.) do K=1,NNZ do J=1,NND ALPHA_ZDDOM(1:NNM,J,K)=tmp(1+(J-1)*NNM*(K-1):NNM+(J-1)*NNM*(K-1)) end do end do deallocate(tmp) endif !read in FEEDING LOSS FROM ZOO TO DOM if(NNM*NNZ*NNZ/=0)then allocate(tmp(NNM*NNZ*NNZ)) ; tmp = 0.0 Call Get_Val_Array(tmp,biofile,'ALPHA_ZZDOM',NNM*NNZ*NNZ,echo=.true.) do K=1,NNZ do J=1,NNZ ALPHA_ZZDOM(1:NNM,J,K)=tmp(1+(J-1)*NNM*(K-1):NNM+(J-1)*NNM*(K-1)) end do end do deallocate(tmp) endif !read in FEEDING LOSS FROM BACTERIA TO DOM if(NNM*NNB*NNZ/=0)then allocate(tmp(NNM*NNB*NNZ)) ; tmp = 0.0 Call Get_Val_Array(tmp,biofile,'ALPHA_ZZDOM',NNM*NNB*NNZ,echo=.true.) do K=1,NNZ do J=1,NNB ALPHA_ZZDOM(1:NNM,J,K)=tmp(1+(J-1)*NNM*(K-1):NNM+(J-1)*NNM*(K-1)) end do end do deallocate(tmp) endif !read in DOM THRESHOLLD Call Get_Val_Array(DOM_0,biofile,'DOM_0',NNM,echo=.true.,option=.true.) !***************** NUTRIENT PARAMETERS *******************! !read in HALF-SATURATION OF NUTRIENT if(NNN*NNP/=0)then allocate(tmp(NNN*NNP)) ; tmp = 0.0 Call Get_Val_Array(tmp,biofile,'KSN',NNN*NNP,echo=.true.) do j=1,NNP KSN(1:NNN,j)=tmp(1+(J-1)*NNN:NNN+(J-1)*NNN) end do deallocate(tmp) endif !read in ELEMENT RATIO IN BACTERIA if(NNN*NNB/=0)then allocate(tmp(NNN*NNB)) ; tmp = 0.0 Call Get_Val_Array(tmp,biofile,'N2CB',NNN*NNB,echo=.true.) do j=1,NNB N2CB(1:NNN,j)=tmp(1+(J-1)*NNN:NNN+(J-1)*NNN) end do deallocate(tmp) endif !read in ELEMENT RATIO IN DETRITUS if(NNN*NND/=0)then allocate(tmp(NNN*NND)) ; tmp = 0.0 Call Get_Val_Array(tmp,biofile,'N2CD',NNN*NND,echo=.true.) do j=1,NND N2CD(1:NNN,j)=tmp(1+(J-1)*NNN:NNN+(J-1)*NNN) end do deallocate(tmp) endif !read in ELEMENT RATIO IN PHYTO if(NNN*NNP/=0)then allocate(tmp(NNN*NNP)) ; tmp = 0.0 Call Get_Val_Array(tmp,biofile,'N2CP',NNN*NNP,echo=.true.) do j=1,NNP N2CP(1:NNN,j)=tmp(1+(J-1)*NNN:NNN+(J-1)*NNN) end do deallocate(tmp) endif !read in ELEMENT RATIO IN ZOOPLANKTON if(NNN*NNZ/=0)then allocate(tmp(NNN*NNZ)) ; tmp = 0.0 Call Get_Val_Array(tmp,biofile,'N2CZ',NNN*NNZ,echo=.true.) do j=1,NNZ N2CZ(1:NNN,j)=tmp(1+(J-1)*NNN:NNN+(J-1)*NNN) end do deallocate(tmp) endif !read in ELEMENT RATIO IN DOM if(NNN*NNM/=0)then allocate(tmp(NNN*NNM)) ; tmp = 0.0 Call Get_Val_Array(tmp,biofile,'N2CDOM',NNN*NNM,echo=.true.) do j=1,NNM N2CDOM(1:NNN,j)=tmp(1+(J-1)*NNN:NNN+(J-1)*NNN) end do deallocate(tmp) endif !read in NUTRIENT THRESHOLD Call Get_Val_Array(N_0,biofile,'N_0',NNM,echo=.true.,option=.true.) !read in NITRIFICATION COEFFICIENT Call Get_Val(R_AN,biofile,'R_AN',line=linenum,echo=.true.) !*******************************************************************! ! ********* CHECKING GROWTH EFFICIENCY AND FEEDLING LOSSES ****! !*******************************************************************! DO I=1,NNZ DO J=1,NNP !FOR GRAZING ON PHYTO TOTALL=ACTIVE_R(I)+EFFIP(J,I) print*,totall,active_r(i),effip(j,i),nnp,nnz,nnd IF(NND.GT.1) THEN IF (DETRITUS_NAME(2)=='Detritus_Si') THEN DO K=1,1 TOTALL=TOTALL+ALPHA_PD(K,J,I) END DO ELSE DO K=1,NND TOTALL=TOTALL+ALPHA_PD(K,J,I) END DO END IF ELSE DO K=1,NND TOTALL=TOTALL+ALPHA_PD(K,J,I) END DO ENDIF print*,totall,alpha_pd(1,j,i),nnm DO K=1,NNM TOTALL=TOTALL+ALPHA_ZPDOM(K,J,I) END DO IF(TOTALL .NE. 1.) THEN PRINT*,'EFFICIENCY+LOSS OF ZOO ',I,' GRAZING ON PHYTO ',J,' UNEQUAL TO 1',TOTALL STOP END IF END DO DO J=1,NND !FOR GRAZING ON DETRITUS TOTALL=ACTIVE_R(I)+EFFID(J,I) IF(NND.GT.1) THEN IF (DETRITUS_NAME(2)=='Detritus_Si') THEN DO K=1,1 TOTALL=TOTALL+ALPHA_DD(K,J,I) END DO ELSE DO K=1,NND TOTALL=TOTALL+ALPHA_DD(K,J,I) END DO END IF ENDIF DO K=1,NNM TOTALL=TOTALL+ALPHA_ZDDOM(K,J,I) END DO IF(TOTALL > 1.) THEN PRINT*,'EFFICIENCY+LOSS OF ZOO ',I,' GRAZING ON DETRITUS ',J,' UNEQUAL TO 1',TOTALL STOP END IF END DO DO J=1,NNZ !FOR PREDATION ON ZOO TOTALL=ACTIVE_R(I)+EFFIZ(J,I) IF(NND.GT.1) THEN IF (DETRITUS_NAME(2)=='Detritus_Si') THEN DO K=1,1 TOTALL=TOTALL+ALPHA_ZD(K,J,I) END DO ELSE DO K=1,NND TOTALL=TOTALL+ALPHA_ZD(K,J,I) END DO END IF ENDIF DO K=1,NNM TOTALL=TOTALL+ALPHA_ZZDOM(K,J,I) END DO IF(TOTALL > 1.) THEN PRINT*,'EFFICIENCY+LOSS OF ZOO ',I,' PREDATION ON ZOO ',J,' UNEQUAL TO 1',TOTALL STOP END IF END DO DO J=1,NNB !FOR PREDATION ON BACTERIA TOTALL=ACTIVE_R(I)+EFFIB(J,I) IF(NND.GT.1) THEN IF (DETRITUS_NAME(2)=='Detritus_Si') THEN DO K=1,1 TOTALL=TOTALL+ALPHA_PD(K,J,I) END DO ELSE DO K=1,NND TOTALL=TOTALL+ALPHA_BD(K,J,I) END DO END IF ENDIF DO K=1,NNM TOTALL=TOTALL+ALPHA_ZBDOM(K,J,I) END DO IF(TOTALL > 1.) THEN PRINT*,'EFFICIENCY+LOSS OF ZOO ',I,' PREDATION ON BAC ',J,' UNEQUAL TO 1',TOTALL STOP END IF END DO TOTALL=0. DO J=1,NND !ZOO MORTALITY TO DETRITUS TOTALL=TOTALL+EPSILON_ZD(J,I) END DO IF(TOTALL > 1.) THEN PRINT*,'MORTALITY OF ZOO ',I,' TO DETRITUS DOES NOT EQUAL TO 1',TOTALL STOP END IF END DO !I=1,NNZ DO I=1,NNP TOTALL=0. IF(NND.GT.1) THEN IF (DETRITUS_NAME(2)=='Detritus_Si') THEN DO J=1,1 !PHYTO MORTALITY TO DETRITUS TOTALL=TOTALL+EPSILON_PD(J,I) END DO ELSE DO J=1,NND !PHYTO MORTALITY TO DETRITUS TOTALL=TOTALL+EPSILON_PD(J,I) END DO END IF ENDIF IF(TOTALL > 1.) THEN PRINT*,'MORTALITY OF PHYTO ',I,' TO DETRITUS DOES NOT EQUAL TO 1',TOTALL STOP END IF END DO !I=1,NNP MULTIPLE_PRINT = .false. IF(MULTIPLE_PRINT) THEN !MOVED TO BIO_INITIAL TO PREVENT MULTIPLE PRINT !*******************************************************************! ! ********* PRINT OUT MODEL SETUP AND PARAMETER VALUES ****! !*******************************************************************! PRINT* PRINT*,'*****************************************************' PRINT*,'** STRUCTURE AND FUNCTION OF THE BIOLOGICAL MODEL **' PRINT*,'*****************************************************' PRINT* PRINT*,'MODEL STRUCTURE : ', MODEL_STRUCTURE DO I=1,NNN PRINT*,' ', NUTRIENT_NAME(I) END DO DO I=1,NNP PRINT*,' ', PHYTO_NAME(I) END DO DO I=1,NNZ PRINT*,' ', ZOO_NAME(I) END DO DO I=1,NND PRINT*,' ', DETRITUS_NAME(I) END DO DO I=1,NNM PRINT*,' ', DOM_NAME(I) END DO DO I=1,NNB PRINT*,' ', BACTERIA_NAME(I) END DO WRITE(*,'(A26,A20)')' LIGHT FUNCTION : ', L_FUNCTION WRITE(*,'(A26,A20)')' GRAZING FUNCTION : ', G_FUNCTION PRINT* PRINT*,'********* PHYTOPLANTON PARAMETERS **************' PRINT* IF(L_FUNCTION.NE.'EXP_LIGHT'.AND.L_FUNCTION.NE.'SL62_LIGHT') THEN PRINT*,'ALPHA : ' , (ALPHAP(I),I=1,NNP) END IF PRINT*,'L_N COMBINE : ' , (ALPHA_U(I),I=1,NNP) PRINT*,'T FORCING : ' , (A_TP(I),I=1,NNP) PRINT*,'CHL ATTANUATION : ' , ATANU_C PRINT*,'D ATTANUATION : ', ATANU_D PRINT*,'WATER ATTANUATION : ', ATANU_W IF(L_FUNCTION.EQ.'PGH80_LIGHT'.OR.L_FUNCTION.EQ.'V65_LIGHT'.OR. & L_FUNCTION.EQ.'BWDC9_LIGHT') THEN PRINT*,'BETAP : ', (BETAP(I),I=1,NNP) END IF PRINT*,'CHL:C : ',(CHL2C(I),I=1,NNP) PRINT*,'ACTIVE DOM EXUD. : ',(D_DOM(I),I=1,NNP) PRINT*,'PASSIVE DOM EXUD. : ', (DPDOM(I),I=1,NNP) IF(L_FUNCTION.EQ.'SL62_LIGHT'.OR.L_FUNCTION.EQ.'V65_LIGHT'.OR. & L_FUNCTION.EQ.'PE78_LIGHT') THEN PRINT*,'OPTIMAL LIGHT : ',(I_OPT(I),I=1,NNP) END IF IF(L_FUNCTION.EQ.'MM_LIGHT'.OR.L_FUNCTION.EQ.'LB_LIGHT') THEN PRINT*,'LIGHT HALF SATURATTION : ', (K_LIGHT(I),I=1,NNP) END IF PRINT*,'MORTALITY : ', (MPD(I),I=1,NNP) PRINT*,'MORTALITY POWER : ', (M_P(I),I=1,NNP) IF(L_FUNCTION.EQ.'LB_LIGHT'.OR.L_FUNCTION.EQ.'V65_LIGHT') THEN PRINT*,'POWER OF LIGHT : ', (N_P(I),I=1,NNP) END IF PRINT*,'THRESHOLD : ', (P_0(I),I=1,NNP) PRINT*,'T ON RESPIRATION : ', RP_T PRINT*,'RESPIRATION : ', (R_P(I),I=1,NNP) PRINT*,'OPTIMAL T : ', (T_OPTP(I),I=1,NNP) PRINT*,'MAXIMUM GROWTH : ', (UMAX(I),I=1,NNP) PRINT*,'SINKING VELOCITY : ', (W_P(I),I=1,NNP) PRINT* PRINT*,'******** ZOOPLANKTON PARAMETERS ****************' PRINT* PRINT*,'ACTIVE RESPIRATION : ', (ACTIVE_R(I),I=1,NNZ) PRINT*,'T FORCING EXPONENTIAL : ', (A_TZ(I),I=1,NNZ) IF (NNB.GE.1) THEN PRINT*,'EFFICIENCY ON BACTERIA : ',((EFFIB(I,J),I=1,NNB),J=1,NNZ) END IF IF (NND.GE.1) THEN PRINT*,'EFFICIENCY ON DETRITUS : ',((EFFID(I,J),I=1,NND),J=1,NNZ) END IF PRINT*,'EFFICIENCY ON PHYTO : ',((EFFIP(I,J),I=1,NNP),J=1,NNZ) PRINT*,'EFFICIENCY ON ZOO : ',((EFFIZ(I,J),I=1,NNZ),J=1,NNZ) PRINT*,'MAX GRAIZING RATE : ',(G_MAX(I),I=1,NNZ) IF(G_FUNCTION.EQ.'RECTI_G'.OR.G_FUNCTION.EQ.'MM1_G' .AND. & G_FUNCTION.EQ.'MM2_G') THEN PRINT*,'HALF SATURATION : ', (K_ZG(I),I=1,NNZ) END IF PRINT*,'GRAZING POWER : ',(M_G(I),I=1,NNZ) PRINT*,'MORALITY : ',(MZD(I),I=1,NNZ) PRINT*,'MORTALITY POWER : ',(M_Z(I),I=1,NNZ) IF(G_FUNCTION.EQ.'MM2_G') THEN PRINT*,'GRAZING THRESHOLD : ',(P_C(I),I=1,NNZ) END IF IF (NNZ.GE.1) THEN PRINT*,'RECRUITMENT : ',(R_RECRUIT(I),I=1,NNZ) END IF PRINT*,'RESPIRATION : ',(R_Z(I),I=1,NNZ) IF (NNB.GE.1) THEN PRINT*,'PREFERENCE ON BACTERIA : ',((SIGMA_B(I,J),I=1,NNB),J=1,NNZ) END IF IF (NND.GE.1) THEN PRINT*,'PREFERENCE ON DETRITUS : ',((SIGMA_D(I,J),I=1,NND),J=1,NNZ) END IF PRINT*,'PREFERENCE ON PHYTO : ',((SIGMA_P(I,J),I=1,NNP),J=1,NNZ) PRINT*,'PREFERENCE ON ZOO : ',((SIGMA_Z(I,J),I=1,NNZ),J=1,NNZ) PRINT*,'OPTIMAL T : ',(T_OPTZ(I),I=1,NNZ) PRINT*,'ZOO THRESHOLD : ',(Z_0(I),I=1,NNZ) PRINT* PRINT*,'********* NUTRIENT PARAMETERS ***********' PRINT* PRINT*,'HALF-SATURATION',((KSN(I,J),I=1,NNN),J=1,NNP) IF (NNB.GE.1) THEN PRINT*,'ELEMENT RATIO IN BAC. : ',((N2CB(I,J),I=1,NNN),J=1,NNB) END IF IF (NND.GE.1) THEN PRINT*,'ELEMENT RATIO IN D : ',((N2CD(I,J),I=1,NNN),J=1,NND) END IF PRINT*,'ELEMENT RATIO IN PHYTO : ',((N2CP(I,J),I=1,NNN),J=1,NNP) PRINT*,'ELEMENT RATIO IN ZOO : ',((N2CZ(I,J),I=1,NNN),J=1,NNZ) IF (NNM.GE.1) THEN PRINT*,'ELEMENT RATIO IN DOM : ', ((N2CDOM(I,J),I=1,NNN),J=1,NNM) END IF PRINT*,'THRESHOLD : ', (N_0(I),I=1,NNN) IF (NO3_ON) THEN PRINT*,'NITRIFICATION RATE : ', R_AN END IF PRINT* IF (NNB.GE.1) THEN PRINT*,'********* BACTERIA PARAMETERS ************' PRINT* PRINT*,'T_FORCING : ',(A_TB(I),I=1,NNB) PRINT*,'THRESHOLD : ', (B_0(I),I=1,NNB) PRINT*,'RATIO OF NH4 VS DON : ',(DELTA_B(I),I=1,NNB) PRINT*,'EFFICIENCY OF DETRITUS : ',((EFFIBD(I,J),I=1,NND),J=1,NNB) PRINT*,'EFFICIENCY OF DOM : ',((EFFIDOM(I,J),I=1,NNM),J=1,NNB) PRINT*,'EFFICIENCY OF NUTRIENT : ', ((EFFIN(I,J),I=1,NNN),J=1,NNB) PRINT*,'RESPIRATION : ',(R_B(I),I=1,NNB) PRINT*,'PREFERENCE ON DETRITUS : ',((SIGMA_BD(I,J),I=1,NND),J=1,NNB) PRINT*,'PREFERENCE ON DOM : ',((SIGMA_DOM(I,J),I=1,NNM),J=1,NNB) PRINT*,'PREFERENCE ON NUTRIENT : ',((SIGMA_N(I,J),I=1,NNN),J=1,NNB) PRINT*,'OPTIMAL TEMPERATURE : ',(T_OPTB(I),I=1,NNB) PRINT*,'MAXIMUM GROWTH RATE : ',(UBMAX(I),I=1,NNB) PRINT* END IF IF (NND.GE.1) THEN PRINT*, '******** DETRITUS PARAMETERS *************' PRINT* IF (NNB.GE.1) THEN PRINT*,'GRAZING ON B TO D : ', (((ALPHA_BD(I,J,K),I=1,NND),J=1,NNB),K=1,NNZ) END IF PRINT*,'AGGREGATION : ', (ALPHA_DAG(I),I=1,NND) PRINT*,'GRAZING LOSS ON D TO D : ', (((ALPHA_DD(I,J,K),I=1,NND),J=1,NND),K=1,NNZ) PRINT*,'DISAGGREGATION : ', (ALPHA_DAG(I),I=1,NND) PRINT*,'GRAZING LOSS ON P TO D : ', (((ALPHA_PD(I,J,K),I=1,NND),J=1,NNP),K=1,NNZ) PRINT*,'GRAZING LOSS ON Z TO D : ', (((ALPHA_ZD(I,J,K),I=1,NND),J=1,NNZ),K=1,NNZ) IF (NNM.GE.1) THEN PRINT*,'DISSOLUTION : ', (D_DOM(I),I=1,NND) END IF PRINT*,'REMINERALIZATION : ', (D_RN(I),I=1,NND) PRINT*,'THRESHOLD : ', (D_0(I),I=1,NND) PRINT*,'P MORTALITY TO DETRITUS: ', ((EPSILON_PD(I,J),I=1,NND),J=1,NNP) PRINT*,'Z MORTALITY TO DETRITUS: ', ((EPSILON_ZD(I,J),I=1,NND),J=1,NNZ) PRINT*,'SINING VELOCITY : ', (W_D(I),I=1,NND) PRINT* END IF IF (NNM.GE.1) THEN PRINT*,'********* DOM PARAMETERS *************' PRINT* PRINT*,'DOM AGEING COEFFICIENT : ', (ALPHA_DOM(I),I=1,NNM) PRINT*,'PHYTO EXUDATION : ', ((ALPHA_PDOM(I,J),I=1,NNM),J=1,NNP) PRINT*,'DETRITUS DISSOLUTION : ', ((ALPHA_DDOM(I,J),I=1,NNM),J=1,NND) IF (NNB.GE.1) THEN PRINT*,'GRAZING LOSS ON B > DOM: ', (((ALPHA_ZBDOM(I,J,K),I=1,NNM),J=1,NNB),K=1,NNZ) END IF IF (NND.GE.1) THEN PRINT*,'GRAZING LOSS ON D > DOM: ', (((ALPHA_ZDDOM(I,J,K),I=1,NNM),J=1,NND),K=1,NNZ) END IF PRINT*,'GRAZING LOSS ON P > DOM: ', (((ALPHA_ZPDOM(I,J,K),I=1,NNM),J=1,NNP),K=1,NNZ) PRINT*,'GRAZING LOSS ON Z > DOM: ', (((ALPHA_ZZDOM(I,J,K),I=1,NNM),J=1,NNZ),K=1,NNZ) PRINT*,'THRESHOLD : ', (DOM_0(I),I=1,NNM) PRINT* END IF PRINT* PRINT*,'*****************************************************' PRINT*,'********* END OF BIOLOGICAL MODEL ************' PRINT*,'*****************************************************' PRINT* END IF RETURN END SUBROUTINE GET_PARAMETER_NEW END MODULE MOD_PARAMETER