SUBROUTINE read_BioPar (model, inp, out, Lwrite) ! !======================================================================= ! ! ! This routine reads in biological model input parameters. ! ! ! !======================================================================= ! USE mod_param USE mod_parallel USE mod_biology USE mod_ncparam USE mod_scalars ! implicit none ! ! Imported variable declarations ! logical, intent(in) :: Lwrite integer, intent(in) :: model, inp, out ! ! Local variable declarations. ! integer :: Npts, Nval integer :: iTrcStr, iTrcEnd integer :: i, ifield, igrid, is, itracer, itrc, ng, nline, status integer :: decode_line, load_i, load_l, load_r logical, dimension(NBT,Ngrids) :: Ltrc #ifdef ICE_BIO logical, dimension(NIB,Ngrids) :: LtrcI #endif real(r8), dimension(NBT,Ngrids) :: Rbio real(r8), dimension(200) :: Rval character (len=40 ) :: KeyWord character (len=256) :: line character (len=256), dimension(200) :: Cval ! !----------------------------------------------------------------------- ! Initialize. !----------------------------------------------------------------------- ! igrid=1 ! nested grid counter itracer=0 ! LBC tracer counter iTrcStr=1 ! first LBC tracer to process iTrcEnd=NBT ! last LBC tracer to process nline=0 ! LBC multi-line counter ! ==================================================================== ! ! READ Bering Sea BEST_NPZ PARAMS ! ==================================================================== ! DO WHILE (.TRUE.) READ (inp,'(a)',ERR=10,END=20) line status=decode_line(line, KeyWord, Nval, Cval, Rval) IF (status.gt.0) THEN IF (TRIM(KeyWord).eq.'Lbiology') THEN Npts=load_l(Nval, Cval, Ngrids, Lbiology) ELSE IF (TRIM(KeyWord).eq.'BioIter') THEN Npts=load_i(Nval, Rval, Ngrids, BioIter) ELSE IF (TRIM(KeyWord).eq.'PARfrac') THEN Npts=load_r(Nval, Rval, Ngrids, Parfrac) !---------------------------------- ! Vertical mixing tuning parameter !---------------------------------- ELSE IF (TRIM(KeyWord).eq.'VertMixIncr') THEN Npts=load_r(Nval, Rval, 1, VertMixIncr) !------------------ ! Bio- conversions !------------------ ELSE IF (TRIM(KeyWord).eq.'xi') THEN Npts=load_r(Nval, Rval, 1, xi) ELSE IF (TRIM(KeyWord).eq.'ccr') THEN Npts=load_r(Nval, Rval, 1, ccr) ELSE IF (TRIM(KeyWord).eq.'ccrPhL') THEN Npts=load_r(Nval, Rval, 1, ccrPhL) !------------------------- ! extinction coefficients !------------------------- ELSE IF (TRIM(KeyWord).eq.'k_ext') THEN Npts=load_r(Nval, Rval, 1, k_ext) ELSE IF (TRIM(KeyWord).eq.'k_chl') THEN Npts=load_r(Nval, Rval, 1, k_chl) !------------------- ! PhS growth params !------------------- ELSE IF (TRIM(KeyWord).eq.'DiS') THEN Npts=load_r(Nval, Rval, 1, DiS) ELSE IF (TRIM(KeyWord).eq.'DpS') THEN Npts=load_r(Nval, Rval, 1, DpS) ELSE IF (TRIM(KeyWord).eq.'alphaPhS') THEN Npts=load_r(Nval, Rval, 1, alphaPhS) ELSE IF (TRIM(KeyWord).eq.'psiPhS') THEN Npts=load_r(Nval, Rval, 1, psiPhS) ELSE IF (TRIM(KeyWord).eq.'k1PhS') THEN Npts=load_r(Nval, Rval, 1, k1PhS) ELSE IF (TRIM(KeyWord).eq.'k2PhS') THEN Npts=load_r(Nval, Rval, 1, k2PhS) ELSE IF (TRIM(KeyWord).eq.'aPS') THEN Npts=load_r(Nval, Rval, 1, aPS) !------------------- ! PhL growth params !------------------- ELSE IF (TRIM(KeyWord).eq.'DiL') THEN Npts=load_r(Nval, Rval, 1, DiL) ELSE IF (TRIM(KeyWord).eq.'DpL') THEN Npts=load_r(Nval, Rval, 1, DpL) ELSE IF (TRIM(KeyWord).eq.'alphaPhL') THEN Npts=load_r(Nval, Rval, 1, alphaPhL) ELSE IF (TRIM(KeyWord).eq.'psiPhL') THEN Npts=load_r(Nval, Rval, 1, psiPhL) ELSE IF (TRIM(KeyWord).eq.'k1PhL') THEN Npts=load_r(Nval, Rval, 1, k1PhL) ELSE IF (TRIM(KeyWord).eq.'k2PhL') THEN Npts=load_r(Nval, Rval, 1, k2PhL) ELSE IF (TRIM(KeyWord).eq.'aPL') THEN Npts=load_r(Nval, Rval, 1, aPL) !----------------------- ! MZS preference params !----------------------- ELSE IF (TRIM(KeyWord).eq.'fpPhSMZS') THEN Npts=load_r(Nval, Rval, 1, fpPhSMZS) ELSE IF (TRIM(KeyWord).eq.'fpPhLMZS') THEN Npts=load_r(Nval, Rval, 1, fpPhLMZS) !------------------------------- ! MZS growth and feeding params !------------------------------- ELSE IF (TRIM(KeyWord).eq.'eMZS') THEN Npts=load_r(Nval, Rval, 1, eMZS) ELSE IF (TRIM(KeyWord).eq.'Q10MZS') THEN Npts=load_r(Nval, Rval, 1, Q10MZS) ELSE IF (TRIM(KeyWord).eq.'Q10MZST') THEN Npts=load_r(Nval, Rval, 1, Q10MZST) ELSE IF (TRIM(KeyWord).eq.'fMZS') THEN Npts=load_r(Nval, Rval, 1, fMZS) ELSE IF (TRIM(KeyWord).eq.'kMZS') THEN Npts=load_r(Nval, Rval, 1, kMZS) ELSE IF (TRIM(KeyWord).eq.'gammaMZS') THEN Npts=load_r(Nval, Rval, 1, gammaMZS) !----------------------- ! MZL preference params !----------------------- ELSE IF (TRIM(KeyWord).eq.'fpPhSMZL') THEN Npts=load_r(Nval, Rval, 1, fpPhSMZL) ELSE IF (TRIM(KeyWord).eq.'fpPhLMZL') THEN Npts=load_r(Nval, Rval, 1, fpPhLMZL) !------------------------------- ! MZL growth and feeding params !------------------------------- ELSE IF (TRIM(KeyWord).eq.'eMZL') THEN Npts=load_r(Nval, Rval, 1, eMZL) ELSE IF (TRIM(KeyWord).eq.'Q10MZL') THEN Npts=load_r(Nval, Rval, 1, Q10MZL) ELSE IF (TRIM(KeyWord).eq.'Q10MZLT') THEN Npts=load_r(Nval, Rval, 1, Q10MZLT) ELSE IF (TRIM(KeyWord).eq.'fMZL') THEN Npts=load_r(Nval, Rval, 1, fMZL) ELSE IF (TRIM(KeyWord).eq.'kMZL') THEN Npts=load_r(Nval, Rval, 1, kMZL) ELSE IF (TRIM(KeyWord).eq.'gammaMZL') THEN Npts=load_r(Nval, Rval, 1, gammaMZL) !----------------------- ! Cop preference params !----------------------- ELSE IF (TRIM(KeyWord).eq.'fpPhSCop') THEN Npts=load_r(Nval, Rval, 1, fpPhSCop) ELSE IF (TRIM(KeyWord).eq.'fpPhLCop') THEN Npts=load_r(Nval, Rval, 1, fpPhLCop) ELSE IF (TRIM(KeyWord).eq.'fpMZSCop') THEN Npts=load_r(Nval, Rval, 1, fpMZSCop) ELSE IF (TRIM(KeyWord).eq.'fpMZLCop') THEN Npts=load_r(Nval, Rval, 1, fpMZLCop) !------------------------------- ! Cop growth and feeding params !------------------------------- ELSE IF (TRIM(KeyWord).eq.'eCop') THEN Npts=load_r(Nval, Rval, 1, eCop) ELSE IF (TRIM(KeyWord).eq.'Q10Cop') THEN Npts=load_r(Nval, Rval, 1, Q10Cop) ELSE IF (TRIM(KeyWord).eq.'Q10CopT') THEN Npts=load_r(Nval, Rval, 1, Q10CopT) ELSE IF (TRIM(KeyWord).eq.'fCop') THEN Npts=load_r(Nval, Rval, 1, fCop) ELSE IF (TRIM(KeyWord).eq.'gammaCop') THEN Npts=load_r(Nval, Rval, 1, gammaCop) ELSE IF (TRIM(KeyWord).eq.'kCop') THEN Npts=load_r(Nval, Rval, 1, kCop) !----------------------- ! NCa preference params !----------------------- ELSE IF (TRIM(KeyWord).eq.'fpPhSNCa') THEN Npts=load_r(Nval, Rval, 1, fpPhSNCa) ELSE IF (TRIM(KeyWord).eq.'fpPhLNCa') THEN Npts=load_r(Nval, Rval, 1, fpPhLNCa) ELSE IF (TRIM(KeyWord).eq.'fpMZSNCa') THEN Npts=load_r(Nval, Rval, 1, fpMZSNCa) ELSE IF (TRIM(KeyWord).eq.'fpMZLNCa') THEN Npts=load_r(Nval, Rval, 1, fpMZLNCa) !------------------------------- ! NCa growth and feeding params !------------------------------- ELSE IF (TRIM(KeyWord).eq.'eNCa') THEN Npts=load_r(Nval, Rval, 1, eNCa) ELSE IF (TRIM(KeyWord).eq.'Q10NCa') THEN Npts=load_r(Nval, Rval, 1, Q10NCa) ELSE IF (TRIM(KeyWord).eq.'Q10NCaT') THEN Npts=load_r(Nval, Rval, 1, Q10NCaT) ELSE IF (TRIM(KeyWord).eq.'fNCa') THEN Npts=load_r(Nval, Rval, 1, fNCa) ELSE IF (TRIM(KeyWord).eq.'gammaNCa') THEN Npts=load_r(Nval, Rval, 1, gammaNCa) ELSE IF (TRIM(KeyWord).eq.'kNCa') THEN Npts=load_r(Nval, Rval, 1, kNCa) !----------------------- ! Eup preference params !----------------------- ELSE IF (TRIM(KeyWord).eq.'fpPhSEup') THEN Npts=load_r(Nval, Rval, 1, fpPhSEup) ELSE IF (TRIM(KeyWord).eq.'fpPhLEup') THEN Npts=load_r(Nval, Rval, 1, fpPhLEup) ELSE IF (TRIM(KeyWord).eq.'fpMZSEup') THEN Npts=load_r(Nval, Rval, 1, fpMZSEup) ELSE IF (TRIM(KeyWord).eq.'fpMZLEup') THEN Npts=load_r(Nval, Rval, 1, fpMZLEup) ELSE IF (TRIM(KeyWord).eq.'fpCopEup') THEN Npts=load_r(Nval, Rval, 1, fpCopEup) !------------------------------- ! Eup growth and feeding params !------------------------------- ELSE IF (TRIM(KeyWord).eq.'eEup') THEN Npts=load_r(Nval, Rval, 1, eEup) ELSE IF (TRIM(KeyWord).eq.'Q10Eup') THEN Npts=load_r(Nval, Rval, 1, Q10Eup) ELSE IF (TRIM(KeyWord).eq.'Q10EupT') THEN Npts=load_r(Nval, Rval, 1, Q10EupT) ELSE IF (TRIM(KeyWord).eq.'fEup') THEN Npts=load_r(Nval, Rval, 1, fEup) ELSE IF (TRIM(KeyWord).eq.'gammaEup') THEN Npts=load_r(Nval, Rval, 1, gammaEup) ELSE IF (TRIM(KeyWord).eq.'kEup') THEN Npts=load_r(Nval, Rval, 1, kEup) #if defined JELLY !-------------------------- ! Jellyfish param !-------------------------- ELSE IF (TRIM(KeyWord).eq.'fpCopJel') THEN Npts=load_r(Nval, Rval, 1, fpCopJel) ELSE IF (TRIM(KeyWord).eq.'fpEupJel') THEN Npts=load_r(Nval, Rval, 1, fpEupJel) ELSE IF (TRIM(KeyWord).eq.'fpNCaJel') THEN Npts=load_r(Nval, Rval, 1, fpNCaJel) ELSE IF (TRIM(KeyWord).eq.'eJel') THEN Npts=load_r(Nval, Rval, 1, eJel) ELSE IF (TRIM(KeyWord).eq.'Q10Jelr') THEN Npts=load_r(Nval, Rval, 1, Q10Jelr) ELSE IF (TRIM(KeyWord).eq.'Q10JelTr') THEN Npts=load_r(Nval, Rval, 1, Q10JelTr) ELSE IF (TRIM(KeyWord).eq.'Q10Jele') THEN Npts=load_r(Nval, Rval, 1, Q10Jele) ELSE IF (TRIM(KeyWord).eq.'Q10JelTe') THEN Npts=load_r(Nval, Rval, 1, Q10JelTe) ELSE IF (TRIM(KeyWord).eq.'gammaJel') THEN Npts=load_r(Nval, Rval, 1, gammaJel) ELSE IF (TRIM(KeyWord).eq.'mpredJel') THEN Npts=load_r(Nval, Rval, 1, mpredJel) ELSE IF (TRIM(KeyWord).eq.'respJel') THEN Npts=load_r(Nval, Rval, 1,respJel) ELSE IF (TRIM(KeyWord).eq.'bmJ') THEN Npts=load_r(Nval, Rval, 1,bmJ) ELSE IF (TRIM(KeyWord).eq.'ktbmJ') THEN Npts=load_r(Nval, Rval, 1,ktbmJ) ELSE IF (TRIM(KeyWord).eq.'TrefJ') THEN Npts=load_r(Nval, Rval, 1,TrefJ) ELSE IF (TRIM(KeyWord).eq.'fJel') THEN Npts=load_r(Nval, Rval, 1,fJel) #endif !-------------------------- ! Phytoplankton senescence !-------------------------- ELSE IF (TRIM(KeyWord).eq.'mPhS') THEN Npts=load_r(Nval, Rval, 1, mPhS) ELSE IF (TRIM(KeyWord).eq.'mPhL') THEN Npts=load_r(Nval, Rval, 1, mPhL) ELSE IF (TRIM(KeyWord).eq.'NcritPhS') THEN Npts=load_r(Nval, Rval, 1, NcritPhS) ELSE IF (TRIM(KeyWord).eq.'minmPhL') THEN Npts=load_r(Nval, Rval, 1, minmPhL) ELSE IF (TRIM(KeyWord).eq.'maxmPhL') THEN Npts=load_r(Nval, Rval, 1, maxmPhL) ELSE IF (TRIM(KeyWord).eq.'NcritPhL') THEN Npts=load_r(Nval, Rval, 1, NcritPhL) !----------------------- ! Zoopkankton mortality !----------------------- ELSE IF (TRIM(KeyWord).eq.'mMZS') THEN Npts=load_r(Nval, Rval, 1, mMZS) ELSE IF (TRIM(KeyWord).eq.'mMZL') THEN Npts=load_r(Nval, Rval, 1, mMZL) ELSE IF (TRIM(KeyWord).eq.'mCop') THEN Npts=load_r(Nval, Rval, 1, mCop) ELSE IF (TRIM(KeyWord).eq.'mNCa') THEN Npts=load_r(Nval, Rval, 1, mNCa) ELSE IF (TRIM(KeyWord).eq.'mEup') THEN Npts=load_r(Nval, Rval, 1, mEup) !------------------- ! predation closure !------------------- ELSE IF (TRIM(KeyWord).eq.'mpredMZL') THEN Npts=load_r(Nval, Rval, 1, mpredMZL) ELSE IF (TRIM(KeyWord).eq.'mpredCop') THEN Npts=load_r(Nval, Rval, 1, mpredCop) ELSE IF (TRIM(KeyWord).eq.'mpredNCa') THEN Npts=load_r(Nval, Rval, 1, mpredNCa) ELSE IF (TRIM(KeyWord).eq.'mpredEup') THEN Npts=load_r(Nval, Rval, 1, mpredEup) !-------------------------------- ! sinking !-------------------------------- ELSE IF (TRIM(KeyWord).eq.'wPhS') THEN Npts=load_r(Nval, Rval, 1, wPhS) ELSE IF (TRIM(KeyWord).eq.'wPhL') THEN Npts=load_r(Nval, Rval, 1, wPhL) ELSE IF (TRIM(KeyWord).eq.'wDet') THEN Npts=load_r(Nval, Rval, 1, wDet) ELSE IF (TRIM(KeyWord).eq.'wDetF') THEN Npts=load_r(Nval, Rval, 1, wDetF) !------------------------ ! Respiration parameters !------------------------ ELSE IF (TRIM(KeyWord).eq.'respMZS') THEN Npts=load_r(Nval, Rval, 1, respMZS) ELSE IF (TRIM(KeyWord).eq.'respMZL') THEN Npts=load_r(Nval, Rval, 1, respMZL) ELSE IF (TRIM(KeyWord).eq.'respPhS') THEN Npts=load_r(Nval, Rval, 1, respPhS) ELSE IF (TRIM(KeyWord).eq.'respPhL') THEN Npts=load_r(Nval, Rval, 1, respPhL) ELSE IF (TRIM(KeyWord).eq.'respCop') THEN Npts=load_r(Nval, Rval, 1, respCop) ELSE IF (TRIM(KeyWord).eq.'respNCa') THEN Npts=load_r(Nval, Rval, 1, respNCa) ELSE IF (TRIM(KeyWord).eq.'respEup') THEN Npts=load_r(Nval, Rval, 1, respEup) ELSE IF (TRIM(KeyWord).eq.'ktbmC') THEN Npts=load_r(Nval, Rval, 1,ktbmC) ELSE IF (TRIM(KeyWord).eq.'TrefC') THEN Npts=load_r(Nval, Rval, 1,TrefC) ELSE IF (TRIM(KeyWord).eq.'ktbmN') THEN Npts=load_r(Nval, Rval, 1,ktbmN) ELSE IF (TRIM(KeyWord).eq.'TrefN') THEN Npts=load_r(Nval, Rval, 1,TrefN) ELSE IF (TRIM(KeyWord).eq.'ktbmE') THEN Npts=load_r(Nval, Rval, 1,ktbmE) ELSE IF (TRIM(KeyWord).eq.'TrefE') THEN Npts=load_r(Nval, Rval, 1,TrefE) ELSE IF (TRIM(KeyWord).eq.'TmaxPhS') THEN Npts=load_r(Nval, Rval, 1, TmaxPhS) ELSE IF (TRIM(KeyWord).eq.'TminPhS') THEN Npts=load_r(Nval, Rval, 1,TminPhS) ELSE IF (TRIM(KeyWord).eq.'Topt_PhS') THEN Npts=load_r(Nval, Rval, 1, Topt_PhS) ELSE IF (TRIM(KeyWord).eq.'KtBm_PhS') THEN Npts=load_r(Nval, Rval, 1,KtBm_PhS) ELSE IF (TRIM(KeyWord).eq.'TmaxPhL') THEN Npts=load_r(Nval, Rval, 1, TmaxPhL) ELSE IF (TRIM(KeyWord).eq.'TminPhL') THEN Npts=load_r(Nval, Rval, 1,TminPhL) ELSE IF (TRIM(KeyWord).eq.'Topt_PhL') THEN Npts=load_r(Nval, Rval, 1, Topt_PhL) ELSE IF (TRIM(KeyWord).eq.'KtBm_PhL') THEN Npts=load_r(Nval, Rval, 1,KtBm_PhL) ELSE IF (TRIM(KeyWord).eq.'TmaxMZS') THEN Npts=load_r(Nval, Rval, 1, TmaxMZS) ELSE IF (TRIM(KeyWord).eq.'KtBm_MZS') THEN Npts=load_r(Nval, Rval, 1,KtBm_MZS) ELSE IF (TRIM(KeyWord).eq.'TmaxMZL') THEN Npts=load_r(Nval, Rval, 1, TmaxMZL) ELSE IF (TRIM(KeyWord).eq.'KtBm_MZL') THEN Npts=load_r(Nval, Rval, 1,KtBm_MZL) !------------------------ ! Iron climatology terms !------------------------ ELSE IF (TRIM(KeyWord).eq.'Feinlo') THEN Npts=load_r(Nval, Rval, 1, Feinlo) ELSE IF (TRIM(KeyWord).eq.'Feinhi') THEN Npts=load_r(Nval, Rval, 1, Feinhi) ELSE IF (TRIM(KeyWord).eq.'Feinh') THEN Npts=load_r(Nval, Rval, 1, Feinh) ELSE IF (TRIM(KeyWord).eq.'Feofflo') THEN Npts=load_r(Nval, Rval, 1, Feofflo) ELSE IF (TRIM(KeyWord).eq.'Feoffhi') THEN Npts=load_r(Nval, Rval, 1, Feoffhi) ELSE IF (TRIM(KeyWord).eq.'Feoffh') THEN Npts=load_r(Nval, Rval, 1, Feoffh) !----------------------- ! Iron limitation terms !----------------------- ELSE IF (TRIM(KeyWord).eq.'kfePhS') THEN Npts=load_r(Nval, Rval, 1, kfePhS) ELSE IF (TRIM(KeyWord).eq.'kfePhL') THEN Npts=load_r(Nval, Rval, 1, kfePhL) ELSE IF (TRIM(KeyWord).eq.'FeC') THEN Npts=load_r(Nval, Rval, 1, FeC) !---------- ! Diapause !---------- ELSE IF (TRIM(KeyWord).eq.'NCmaxz') THEN Npts=load_r(Nval, Rval, 1, NCmaxz) ELSE IF (TRIM(KeyWord).eq.'wNCrise') THEN Npts=load_r(Nval, Rval, 1, wNCrise) ELSE IF (TRIM(KeyWord).eq.'wNCsink') THEN Npts=load_r(Nval, Rval, 1, wNCsink) ELSE IF (TRIM(KeyWord).eq.'RiseStart') THEN Npts=load_r(Nval, Rval, 1, RiseStart) ELSE IF (TRIM(KeyWord).eq.'RiseEnd') THEN Npts=load_r(Nval, Rval, 1, RiseEnd) ELSE IF (TRIM(KeyWord).eq.'SinkStart') THEN Npts=load_r(Nval, Rval, 1, SinkStart) ELSE IF (TRIM(KeyWord).eq.'SinkEnd') THEN Npts=load_r(Nval, Rval, 1, SinkEnd) !----------------------------------- !Remineralization and Nitrification !---------------------------------- ELSE IF (TRIM(KeyWord).eq.'regen') THEN Npts=load_r(Nval, Rval, 1, regen) ELSE IF (TRIM(KeyWord).eq.'dgrad') THEN Npts=load_r(Nval, Rval, 1, dgrad) ELSE IF (TRIM(KeyWord).eq.'Pv0') THEN Npts=load_r(Nval, Rval, 1, Pv0) ELSE IF (TRIM(KeyWord).eq.'PvT') THEN Npts=load_r(Nval, Rval, 1, PvT) ELSE IF (TRIM(KeyWord).eq.'Nitr0') THEN Npts=load_r(Nval, Rval, 1,Nitr0) ELSE IF (TRIM(KeyWord).eq.'KnT') THEN Npts=load_r(Nval, Rval, 1,KnT) ELSE IF (TRIM(KeyWord).eq.'ToptNtr') THEN Npts=load_r(Nval, Rval, 1,ToptNtr) ELSE IF (TRIM(KeyWord).eq.'ktntr') THEN Npts=load_r(Nval, Rval, 1,ktntr) ELSE IF (TRIM(KeyWord).eq.'KNH4Nit') THEN Npts=load_r(Nval, Rval, 1,KNH4Nit) ELSE IF (TRIM(KeyWord).eq.'tI0') THEN Npts=load_r(Nval, Rval, 1,tI0) ELSE IF (TRIM(KeyWord).eq.'KI') THEN Npts=load_r(Nval, Rval, 1,KI) !------------------- !Benthic Parameters !------------------- #ifdef BENTHIC ELSE IF (TRIM(KeyWord).eq.'Hout(idBeTvar)') THEN Npts=load_l(Nval, Cval,NBEN*Ngrids, Ltrc) DO ng=1,Ngrids DO itrc=1,NBEN i=idBeTvar(idben(itrc)) Hout(i,ng)=Ltrc(itrc,ng) END DO END DO ELSE IF (TRIM(KeyWord).eq.'iremin') THEN Npts=load_r(Nval, Rval, 1, iremin) ELSE IF (TRIM(KeyWord).eq.'q10') THEN Npts=load_r(Nval, Rval, 1, q10) ELSE IF (TRIM(KeyWord).eq.'q10r') THEN Npts=load_r(Nval, Rval, 1, q10r) ELSE IF (TRIM(KeyWord).eq.'Rup') THEN Npts=load_r(Nval, Rval, 1, Rup) ELSE IF (TRIM(KeyWord).eq.'KupD') THEN Npts=load_r(Nval, Rval, 1, KupD) ELSE IF (TRIM(KeyWord).eq.'KupP') THEN Npts=load_r(Nval, Rval, 1, KupP) ELSE IF (TRIM(KeyWord).eq.'LupD') THEN Npts=load_r(Nval, Rval, 1, LupD) ELSE IF (TRIM(KeyWord).eq.'LupP') THEN Npts=load_r(Nval, Rval, 1, LupP) ELSE IF (TRIM(KeyWord).eq.'Qres') THEN Npts=load_r(Nval, Rval, 1, Qres) ELSE IF (TRIM(KeyWord).eq.'Rres') THEN Npts=load_r(Nval, Rval, 1, Rres) ELSE IF (TRIM(KeyWord).eq.'rmort') THEN Npts=load_r(Nval, Rval, 1, rmort) ELSE IF (TRIM(KeyWord).eq.'eex') THEN Npts=load_r(Nval, Rval, 1, eex) ELSE IF (TRIM(KeyWord).eq.'eexD') THEN Npts=load_r(Nval, Rval, 1, eexD) ELSE IF (TRIM(KeyWord).eq.'prefD') THEN Npts=load_r(Nval, Rval, 1, prefD) ELSE IF (TRIM(KeyWord).eq.'prefPL') THEN Npts=load_r(Nval, Rval, 1, prefPL) ELSE IF (TRIM(KeyWord).eq.'prefPS') THEN Npts=load_r(Nval, Rval, 1, prefPS) ELSE IF (TRIM(KeyWord).eq.'T0ben') THEN Npts=load_r(Nval, Rval, 1, T0ben) ELSE IF (TRIM(KeyWord).eq.'T0benr') THEN Npts=load_r(Nval, Rval, 1, T0benr) ELSE IF (TRIM(KeyWord).eq.'BenPred') THEN Npts=load_r(Nval, Rval, 1, BenPred) ELSE IF (TRIM(KeyWord).eq.'bmB') THEN Npts=load_r(Nval, Rval, 1,bmB) ELSE IF (TRIM(KeyWord).eq.'ktbmB') THEN Npts=load_r(Nval, Rval, 1,ktbmB) ELSE IF (TRIM(KeyWord).eq.'TrefB') THEN Npts=load_r(Nval, Rval, 1,TrefB) #endif !-------------- !ice bio params !-------------- #ifdef ICE_BIO # ifdef CLIM_ICE_1D ELSE IF (TRIM(KeyWord).eq.'Hout(idIceBvar)') THEN Npts=load_l(Nval, Cval,NIB*Ngrids, Ltrc) DO ng=1,Ngrids DO itrc=1,NIB i=idIceBvar(idice(itrc)) Hout(i,ng)=Ltrc(itrc,ng) END DO END DO # elif defined BERING_10K ELSE IF (TRIM(KeyWord).eq.'Hout(idIcePhL)') THEN Npts=load_l(Nval, Cval,NIB*Ngrids, LtrcI) DO ng=1,Ngrids !g Hout(idIcePhL,ng)=LtrcI(idIcePhL,ng) Hout(idIcePhL,ng)=LtrcI(1,ng) END DO ELSE IF (TRIM(KeyWord).eq.'Hout(idIceNO3)') THEN ! Npts=load_l(Nval, Cval,NIB*Ngrids, LtrcI) DO ng=1,Ngrids Hout(idIceNO3,ng)=LtrcI(2,ng) !g Hout(idIceNO3,ng)=LtrcI(idIceNO3,ng) END DO ELSE IF (TRIM(KeyWord).eq.'Hout(idIceNH4)') THEN ! Npts=load_l(Nval, Cval,NIB*Ngrids, LtrcI) DO ng=1,Ngrids !g Hout(idIceNH4,ng)=LtrcI(idIceNH4,ng) Hout(idIceNH4,ng)=LtrcI(3,ng) END DO ELSE IF (TRIM(KeyWord).eq.'Hout(idIceLog)') THEN ! Npts=load_l(Nval, Cval,NIB*Ngrids, LtrcI) DO ng=1,Ngrids ! Hout(idIceLog,ng)=LtrcI(idIceLog,ng) Hout(idIceLog,ng)=LtrcI(4,ng) END DO # endif ELSE IF (TRIM(KeyWord).eq.'alphaIb') THEN Npts=load_r(Nval, Rval, 1,alphaIb) ELSE IF (TRIM(KeyWord).eq.'betaI') THEN Npts=load_r(Nval, Rval, 1,betaI) ELSE IF (TRIM(KeyWord).eq.'inhib') THEN Npts=load_r(Nval, Rval, 1,inhib) ELSE IF (TRIM(KeyWord).eq.'ksnut1') THEN Npts=load_r(Nval, Rval, 1,ksnut1) ELSE IF (TRIM(KeyWord).eq.'ksnut2') THEN Npts=load_r(Nval, Rval, 1,ksnut2) ELSE IF (TRIM(KeyWord).eq.'mu0') THEN Npts=load_r(Nval, Rval, 1,mu0) ELSE IF (TRIM(KeyWord).eq.'R0i') THEN Npts=load_r(Nval, Rval, 1,R0i) ELSE IF (TRIM(KeyWord).eq.'rg0') THEN Npts=load_r(Nval, Rval, 1,rg0) ELSE IF (TRIM(KeyWord).eq.'rg') THEN Npts=load_r(Nval, Rval, 1,rg) ELSE IF (TRIM(KeyWord).eq.'annit') THEN Npts=load_r(Nval, Rval, 1,annit) ELSE IF (TRIM(KeyWord).eq.'aidz') THEN Npts=load_r(Nval, Rval, 1,aidz) #endif ELSE IF (TRIM(KeyWord).eq.'TNU2') THEN Npts=load_r(Nval, Rval, NBT*Ngrids, Rbio) DO ng=1,Ngrids DO itrc=1,NBT i=idbio(itrc) tnu2(i,ng)=Rbio(itrc,ng) END DO END DO ELSE IF (TRIM(KeyWord).eq.'TNU4') THEN Npts=load_r(Nval, Rval, NBT*Ngrids, Rbio) DO ng=1,Ngrids DO itrc=1,NBT i=idbio(itrc) tnu4(i,ng)=Rbio(itrc,ng) END DO END DO ELSE IF (TRIM(KeyWord).eq.'AKT_BAK') THEN Npts=load_r(Nval, Rval, NBT*Ngrids, Rbio) DO ng=1,Ngrids DO itrc=1,NBT i=idbio(itrc) Akt_bak(i,ng)=Rbio(itrc,ng) END DO END DO ELSE IF (TRIM(KeyWord).eq.'TNUDG') THEN Npts=load_r(Nval, Rval, NBT*Ngrids, Rbio) ! Hard wired this in for now as wasnt reading correctly from input file Rbio(15,1)=360_r8 DO ng=1,Ngrids DO itrc=1,NBT i=idbio(itrc) Tnudg(i,ng)=Rbio(itrc,ng) END DO END DO CASE ('LBC(isTvar)') IF (itracer.lt.NBT) THEN itracer=itracer+1 ELSE itracer=1 ! next nested grid END IF ifield=isTvar(idbio(itracer)) Npts=load_lbc(Nval, Cval, line, nline, ifield, igrid, & & idbio(iTrcStr), idbio(iTrcEnd), & & Vname(1,idTvar(idbio(itracer))), LBC) #ifdef TCLIMATOLOGY CASE ('LtracerCLM') Npts=load_l(Nval, Cval, NBT*Ngrids, Ltrc) DO ng=1,Ngrids DO itrc=1,NBT i=idbio(itrc) LtracerCLM(i,ng)=Ltrc(itrc,ng) END DO END DO #endif #ifdef TS_PSOURCE CASE ('LtracerSrc') Npts=load_l(Nval, Cval, NBT*Ngrids, Ltrc) DO ng=1,Ngrids DO itrc=1,NBT i=idbio(itrc) LtracerSrc(i,ng)=Ltrc(itrc,ng) END DO END DO #endif ELSE IF (TRIM(KeyWord).eq.'Hout(idTvar)') THEN Npts=load_l(Nval, Cval, NBT*Ngrids, Ltrc) DO ng=1,Ngrids DO itrc=1,NBT i=idTvar(idbio(itrc)) Hout(i,ng)=Ltrc(itrc,ng) END DO END DO #ifdef AVERAGES ELSE IF (TRIM(KeyWord).eq.'Aout(idTvar)') THEN Npts=load_l(Nval, Cval, NBT*Ngrids, Ltrc) DO ng=1,Ngrids DO itrc=1,NBT i=idTvar(idbio(itrc)) Aout(i,ng)=Ltrc(itrc,ng) END DO END DO # ifdef BENTHIC ELSE IF (TRIM(KeyWord).eq.'Aout(idBeTvar)') THEN Npts=load_l(Nval, Cval,NBEN*Ngrids, Ltrc) DO ng=1,Ngrids DO itrc=1,NBEN i=idBeTvar(idben(itrc)) Aout(i,ng)=Ltrc(itrc,ng) END DO END DO # endif # ifdef ICE_BIO # ifdef CLIM_ICE_1D ELSE IF (TRIM(KeyWord).eq.'Aout(idIceBvar)') THEN Npts=load_l(Nval, Cval,NIB*Ngrids, Ltrc) DO ng=1,Ngrids DO itrc=1,NIB i=idIceBvar(idice(itrc)) Aout(i,ng)=Ltrc(itrc,ng) END DO END DO # elif defined BERING_10K ELSE IF (TRIM(KeyWord).eq.'Aout(idIcePhL)') THEN Npts=load_l(Nval, Cval,NIB*Ngrids, LtrcI) DO ng=1,Ngrids !g Aout(idIcePhL,ng)=LtrcI(idIcePhL,ng) Aout(idIcePhL,ng)=LtrcI(1,ng) END DO ELSE IF (TRIM(KeyWord).eq.'Aout(idIceNO3)') THEN ! Npts=load_l(Nval, Cval,NIB*Ngrids, LtrcI) DO ng=1,Ngrids Aout(idIceNO3,ng)=LtrcI(2,ng) !g Aout(idIceNO3,ng)=LtrcI(idIceNO3,ng) END DO ELSE IF (TRIM(KeyWord).eq.'Aout(idIceNH4)') THEN ! Npts=load_l(Nval, Cval,NIB*Ngrids, LtrcI) DO ng=1,Ngrids !g Aout(idIceNH4,ng)=LtrcI(idIceNH4,ng) Aout(idIceNH4,ng)=LtrcI(3,ng) END DO ELSE IF (TRIM(KeyWord).eq.'Aout(idIceLog)') THEN ! Npts=load_l(Nval, Cval,NIB*Ngrids, LtrcI) DO ng=1,Ngrids ! Aout(idIceLog,ng)=LtrcI(idIceLog,ng) Aout(idIceLog,ng)=LtrcI(4,ng) END DO # endif # endif #endif #ifdef STATIONARY ELSE IF (TRIM(KeyWord).eq.'Hout(idTSvar)') THEN Npts=load_l(Nval, Cval, NTS*Ngrids, Ltrc) DO ng=1,Ngrids DO itrc=1, NBTS i=idTSvar(itrc) Hout(i,ng)=Ltrc(itrc,ng) END DO END DO #endif #ifdef BIOFLUX ELSE IF (TRIM(KeyWord).eq.'Hout(idTBFvar)') THEN Npts=load_l(Nval, Cval, NT*Ngrids, Ltrc) DO ng=1,Ngrids ! DO itrc=1, NT(ng) i=idTBFvar(iBF) Hout(i,ng)=Ltrc(iBF,ng) ! END DO END DO #endif #ifdef STATIONARY2 ELSE IF (TRIM(KeyWord).eq.'Hout(idTS2var)') THEN Npts=load_l(Nval, Cval, NTS2*Ngrids, Ltrc) DO ng=1,Ngrids DO itrc=1, NBTS2 i=idTS2var(itrc) Hout(i,ng)=Ltrc(itrc,ng) END DO END DO #endif #ifdef PROD3 ELSE IF (TRIM(KeyWord).eq.'Hout(idPT3var)') THEN Npts=load_l(Nval, Cval, NPT3*Ngrids, Ltrc) DO ng=1,Ngrids DO itrc=1, NBPT3 i=idPT3var(itrc) Hout(i,ng)=Ltrc(itrc,ng) END DO END DO #endif #ifdef PROD2 ELSE IF (TRIM(KeyWord).eq.'Hout(idPT2var)') THEN Npts=load_l(Nval, Cval, NPT2*Ngrids, Ltrc) DO ng=1,Ngrids DO itrc=1, NBPT2 i=idPT2var(itrc) Hout(i,ng)=Ltrc(itrc,ng) END DO END DO #endif END IF IF ( Lwrite .and. & & TRIM(KeyWord).ne.'TNU2' .and. & & TRIM(KeyWord).ne.'TNU4' .and. & & TRIM(KeyWord).ne.'AKT_BAK' .and. & & TRIM(KeyWord).ne.'TNUDG' .and. & & TRIM(KeyWord).ne.'Hout(idTvar)' ) THEN write(6,'(a15,i3,20e12.5)') TRIM(KeyWord),Nval,Rval(1:Nval) END IF END IF END DO 10 IF (Master) WRITE (out,30) line exit_flag=4 RETURN 20 CLOSE (inp) ! !----------------------------------------------------------------------- ! Report input parameters. !----------------------------------------------------------------------- ! IF (Lwrite) THEN DO ng=1,Ngrids IF (Lbiology(ng)) THEN WRITE (out,40) ng WRITE (out,50) BioIter(ng), 'BioIter', & & 'Number of iterations for nonlinear convergence.' #ifdef TS_DIF2 DO itrc=1,NBT i=idbio(itrc) WRITE (out,90) tnu2(i,ng), 'tnu2', i, & & 'Horizontal, harmonic mixing coefficient (m2/s)', & & 'for tracer ', i, TRIM(Vname(1,idTvar(i))) END DO #endif #ifdef TS_DIF4 DO itrc=1,NBT i=idbio(itrc) WRITE (out,90) tnu4(i,ng), 'tnu4', i, & & 'Horizontal, biharmonic mixing coefficient (m4/s)', & & 'for tracer ', i, TRIM(Vname(1,idTvar(i))) END DO #endif DO itrc=1,NBT i=idbio(itrc) WRITE(out,90) Akt_bak(i,ng), 'Akt_bak', i, & & 'Background vertical mixing coefficient (m2/s)', & & 'for tracer ', i, TRIM(Vname(1,idTvar(i))) END DO DO itrc=1,NBT i=idbio(itrc) WRITE (out,90) Tnudg(i,ng), 'Tnudg', i, & & 'Nudging/relaxation time scale (days)', & & 'for tracer ', i, TRIM(Vname(1,idTvar(i))) END DO #ifdef TCLIMATOLOGY DO itrc=1,NBT i=idbio(itrc) IF (LtracerCLM(i,ng)) THEN WRITE (out,110) LtracerCLM(i,ng), 'LtracerCLM', i, & & 'Turning ON processing of climatology tracer ', i, & & TRIM(Vname(1,idTvar(i))) ELSE WRITE (out,110) LtracerCLM(i,ng), 'LtracerCLM', i, & & 'Turning OFF processing of climatology tracer ', i, & & TRIM(Vname(1,idTvar(i))) END IF END DO DO itrc=1,NBT i=idbio(itrc) IF (LnudgeTCLM(i,ng)) THEN WRITE (out,110) LnudgeTCLM(i,ng), 'LnudgeTCLM', i, & & 'Turning ON nudging of climatology tracer ', i, & & TRIM(Vname(1,idTvar(i))) ELSE WRITE (out,110) LnudgeTCLM(i,ng), 'LnudgeTCLM', i, & & 'Turning OFF nudging of climatology tracer ', i, & & TRIM(Vname(1,idTvar(i))) END IF END DO #endif #ifdef TS_PSOURCE DO itrc=1,NBT i=idbio(itrc) WRITE (out,100) LtracerSrc(i,ng), 'LtracerSrc', & & i, 'Processing point sources/Sink on tracer ', i, & & TRIM(Vname(1,idTvar(i))) END DO #endif DO itrc=1,NBT i=idbio(itrc) IF (Hout(idTvar(i),ng)) WRITE (out,60) & & Hout(idTvar(i),ng), 'Hout(idTvar)', & & 'Write out tracer ', i, TRIM(Vname(1,idTvar(i))) END DO #ifdef AVERAGES WRITE (out,'(1x)') DO itrc=1,NBT i=idbio(itrc) IF (Aout(idTvar(i),ng)) WRITE (out,110) & & Aout(idTvar(i),ng), 'Aout(idTvar)', & & 'Write out averaged tracer ', i, & & TRIM(Vname(1,idTvar(i))) END DO #endif END IF END DO END IF DO ng=1,Ngrids DO itrc=1,NBT i=idbio(itrc) tnu4(i,ng)=SQRT(ABS(tnu4(i,ng))) ! ! Compute inverse nudging coefficients (1/s) used in various tasks. ! IF (Tnudg(i,ng).gt.0.0_r8) THEN Tnudg(i,ng)=1.0_r8/(Tnudg(i,ng)*86400.0_r8) ELSE Tnudg(i,ng)=0.0_r8 END IF END DO END DO 30 FORMAT (/,' READ_BioPar - Error while processing line: ',/,a) 40 FORMAT (/,/,' Biology Parameters, Grid: ',i2.2, & & /, ' ============================',/) 50 FORMAT (1x,i10,2x,a,t28,a) 60 FORMAT (10x,l1,2x,a,t28,a,i2.2,':',1x,a) 90 FORMAT (1p,e11.4,2x,a,'(',i2.2,')',t28,a,/,t30,a,i2.2,':',1x,a) 100 FORMAT (10x,l1,2x,a,'(',i2.2,')',t30,a,i2.2,':',1x,a) 110 FORMAT (10x,l1,2x,a,t30,a,i2.2,':',1x,a) RETURN END SUBROUTINE read_BioPar �