! Copyright 2014 College of William and Mary ! ! Licensed under the Apache License, Version 2.0 (the "License"); ! you may not use this file except in compliance with the License. ! You may obtain a copy of the License at ! ! http://www.apache.org/licenses/LICENSE-2.0 ! ! Unless required by applicable law or agreed to in writing, software ! distributed under the License is distributed on an "AS IS" BASIS, ! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ! See the License for the specific language governing permissions and ! limitations under the License. SUBROUTINE bio_init !!====================================================================== !! April/May, 2007 - Original code ! !!======================================================Marta Rodrigues= !! ! !! This subroutine is from ROMS (where is called ana_biology.h): ! !! ! !! February, 2009 - Extended for oxygen cycle ! !!====================================================================== !! !!====================================================================== !! Copyright (c) 2002-2007 The ROMS/TOMS Group ! !! Licensed under a MIT/X style license ! !! See License_ROMS.txt ! !! ! !======================================================================= ! ! ! This routine sets initial conditions for biological tracer fields ! ! using analytical expressions. ! ! ! !======================================================================= ! USE bio_param ! USE schism_glbl, only : trel0,nvrt,nea,tr_el,idry_e USE schism_glbl, only : tr_nd,nvrt,npa,irange_tr USE biology IMPLICIT NONE ! Imported variable declarations. ! real(r8), dimension(ntracers,nvrt,nea), intent(out) :: trel0 ! ! Local variable declarations. ! integer :: i, iseco, itrc, j, k, tmp00, tmp1, tmp2, tmp3 real(r8) :: cff1, cff2, cff3, cff4, cff5, cff6, cff7, cff8, cff9 real(r8) :: cff10, cff11, cff12, cff13, cff14, cff15 real(r8) :: salt, sftm, temp ! !--------------------------------------------------------------------- ! EcoSim initial fields. !--------------------------------------------------------------------- ! ! Assumed maximum temperature gradient. ! cff3=1.0_r8/14.0_r8 cff4=1.0_r8/16.0_r8 cff5=32.0_r8 cff7=1.0_r8/0.0157_r8 cff8=1.0_r8/6.625_r8 cff9=1.0_r8/16.0_r8 cff10=1.0_r8/15.0_r8 cff11=1.0_r8/8.0_r8 cff12=1.0_r8/128.0_r8 cff13=1.0_r8/1000.0_r8 cff14=1.0_r8/12.0_r8 cff15=cff5*cff8*cff14 ! mole N : gram Chl !Marta Rodrigues - For vertical and node DO k= nvrt, 1, -1 DO i=1, npa !if(idry_e(i)==1) cycle ! Initialization of surface chlorophyll. ! !Marta Rodrigues - temperature and salinity values sftm=tr_nd(1,nvrt,i) !tsel(1,nvrt,i) !sea surface temperature temp=tr_nd(1,k,i) !tsel(1,k,i) salt=tr_nd(2,k,i) !tsel(2,k,i) cff1=-0.0827_r8*sftm+2.6386_r8 cff2=MAX(0.00001_r8,cff1*(1.0_r8-(sftm-temp)*cff3)) ! ! Initialization of nutrients. ! tmp00 = irange_tr(1,6)-1 tmp1 = tmp00+iNH4_ tr_nd(tmp1,k,i)=0.053_r8*temp+0.7990_r8 !NH4 tmp2 = tmp00+iNO3_ tr_nd(tmp2,k,i)=8.5_r8-cff2*cff15-tr_nd(tmp1,k,i) !NO3 tmp3 = tmp00+iPO4_ tr_nd(tmp3,k,i)=(tr_nd(tmp1,k,i)+tr_nd(tmp2,k,i))*cff4 !PO4 IF(IRON==1)THEN tmp1 = tmp00+iFeO_ tr_nd(tmp1,k,i)=1.0_r8 !MFR ENDIF ! ! Assuming diatoms are 75% of initialized chlorophyll. ! tmp1 = tmp00+iSiO_ tr_nd(tmp1,k,i)=5.5_r8-(cff2*0.75_r8)*cff15*1.20_r8 tmp1 = tmp00+iDIC_ tr_nd(tmp1,k,i)=2000.0_r8 ! Marta Rodrigues - Initialization of DO and COD (oxygen) tmp1 = tmp00+iDO_ tr_nd(tmp1,k,i)=150.0_r8 tmp1 = tmp00+iCOD_ tr_nd(tmp1,k,i)=0.0_r8 ! ! Bacteria Initialization. ! DO iseco=1,Nbac tmp1 = tmp00+iBacC(iseco) tr_nd(tmp1,k,i)=0.85_r8 tmp2 = tmp00+iBacN(iseco) tr_nd(tmp2,k,i)=tr_nd(tmp1,k,i)*N2cBAC tmp2 = tmp00+iBacP(iseco) tr_nd(tmp2,k,i)=tr_nd(tmp1,k,i)*P2cBAC IF(IRON==1)THEN tmp2 = tmp00+iBacF(iseco) tr_nd(tmp2,k,i)=tr_nd(tmp1,k,i)*Fe2cBAC !MFR ENDIF END DO ! ! Marta Rodrigues ! Zooplankton initialization. DO iseco=1,Nzoo tmp1 = tmp00+iZooC(iseco) tr_nd(tmp1,k,i)=2_r8 tmp1 = tmp00+iZooN(iseco) tr_nd(tmp1,k,i)=0.2_r8 tmp1 = tmp00+iZooP(iseco) tr_nd(tmp1,k,i)=0.02_r8 END DO ! Initialize phytoplankton populations. ! ! tmp1 = tmp00+iPhyC(1) ! tr_nd(tmp1,k,i)=MAX(0.02_r8, & ! & 0.75_r8*0.75_r8*cff5*cff2*cff14) DO iseco=1,Nphy tmp1 = tmp00+iPhyC(iseco) tr_nd(tmp1,k,i)=MAX(0.02_r8, & & 0.75_r8*0.75_r8*cff5*cff2*cff14) tmp2 = tmp00+iPhyN(iseco) tr_nd(tmp2,k,i)=tr_nd(tmp1,k,i)*cff8 tmp3 = tmp00+iPhyP(iseco) tr_nd(tmp3,k,i)=tr_nd(tmp2,k,i)*cff4 IF(IRON==1)THEN tmp3 = tmp00+iPhyF(iseco) tr_nd(tmp3,k,i)=tr_nd(tmp1,k,i)*cff13 !MFR ENDIF IF (iPhyS(iseco).gt.0) THEN tmp3 = tmp00+iPhyS(iseco) tr_nd(tmp3,k,i)=tr_nd(tmp2,k,i)*1.20_r8 END IF ! Initialize Pigments in ugrams/liter (not umole/liter). ! cff6=12.0_r8/cff5 tmp2 = tmp00+iPigs(iseco,1) tr_nd(tmp2,k,i)=cff6*tr_nd(tmp1,k,i) ! ! Chlorophyll-b. ! cff6=cff5-b_C2Cl(iseco) IF (iPigs(iseco,2).gt.0) THEN tmp3 = tmp00+iPigs(iseco,2) tr_nd(tmp3,k,i)=tr_nd(tmp2,k,i)* & & (b_ChlB(iseco)+ & & mxChlB(iseco)*cff6) END IF ! ! Chlorophyll-c. ! IF (iPigs(iseco,3).gt.0) THEN tmp3 = tmp00+iPigs(iseco,3) tr_nd(tmp3,k,i)=tr_nd(tmp2,k,i)* & & (b_ChlC(iseco)+ & & mxChlC(iseco)*cff6) END IF ! ! Photosynthetic Carotenoids. ! IF (iPigs(iseco,4).gt.0) THEN tmp3 = tmp00+iPigs(iseco,4) tr_nd(tmp3,k,i)=tr_nd(tmp2,k,i)* & & (b_PSC(iseco)+ & & mxPSC(iseco)*cff6) END IF ! ! Photoprotective Carotenoids. ! IF (iPigs(iseco,5).gt.0) THEN tmp3 = tmp00+iPigs(iseco,5) tr_nd(tmp3,k,i)=tr_nd(tmp2,k,i)* & & (b_PPC(iseco)+ & & mxPPC(iseco)*cff6) END IF ! ! Low Urobilin Phycoeurythin Carotenoids. ! IF (iPigs(iseco,6).gt.0) THEN tmp3 = tmp00+iPigs(iseco,6) tr_nd(tmp3,k,i)=tr_nd(tmp2,k,i)* & & (b_LPUb(iseco)+ & & mxLPUb(iseco)*cff6) END IF ! ! High Urobilin Phycoeurythin Carotenoids. ! IF (iPigs(iseco,7).gt.0) THEN tmp3 = tmp00+iPigs(iseco,7) tr_nd(tmp3,k,i)=tr_nd(tmp2,k,i)* & & (b_HPUb(iseco)+ & & mxHPUb(iseco)*cff6) END IF END DO ! ! DOC initialization. ! cff6=MAX(0.001_r8,-0.9833_r8*salt+33.411_r8) tmp1 = tmp00+iDOMC(1) tr_nd(tmp1,k,i)=0.1_r8 tmp2 = tmp00+iDOMN(1) tr_nd(tmp2,k,i)=tr_nd(tmp1,k,i)*cff8 tmp3 = tmp00+iDOMP(1) tr_nd(tmp3,k,i)=tr_nd(tmp2,k,i)*cff9 IF(CDOC==1) THEN tmp2 = tmp00+iCDMC(1) tr_nd(tmp2,k,i)=tr_nd(tmp1,k,i)*cDOCfrac_c(1) !MFR ENDIF IF(Ndom==2)THEN !MFR tmp1 = tmp00+iDOMC(2) tr_nd(tmp1,k,i)=15.254_r8*cff6+70.0_r8 tmp2 = tmp00+iDOMN(2) tr_nd(tmp2,k,i)=tr_nd(tmp1,k,i)*cff10 tmp1 = tmp00+iDOMP(2) tr_nd(tmp1,k,i)=0.0_r8 IF(CDOC==1) THEN tmp1 = tmp00+iCDMC(2) tr_nd(tmp1,k,i)=(0.243_r8*cff6+0.055_r8)*cff7 !MFR ENDIF ENDIF ! ! Fecal Initialization. ! DO iseco=1,Nfec tmp1 = tmp00 + iFecC(iseco) tr_nd(tmp1,k,i)=0.002_r8 tmp2 = tmp00 + iFecN(iseco) tr_nd(tmp2,k,i)=tr_nd(tmp1,k,i)*cff11 tmp2 = tmp00 + iFecP(iseco) tr_nd(tmp2,k,i)=tr_nd(tmp1,k,i)*cff12 IF(IRON==1) THEN tmp2 = tmp00 + iFecF(iseco) tr_nd(tmp2,k,i)=tr_nd(tmp1,k,i)*cff13 !MFR ENDIF tmp2 = tmp00 + iFecS(iseco) tr_nd(tmp2,k,i)=tr_nd(tmp1,k,i)*cff11 END DO END DO END DO RETURN END SUBROUTINE bio_init