MODULE mod_behavior ! !git $Id$ !svn $Id: oyster_floats_mod.h 1151 2023-02-09 03:08:53Z arango $ !================================================== Hernan G. Arango === ! Copyright (c) 2002-2023 The ROMS/TOMS Group Diego A. Narvaez ! ! Licensed under a MIT/X style license ! ! See License_ROMS.md ! !======================================================================= ! ! ! Parameters for oyster model (Dekshenieks et al. 1993, 1996, 1997; ! ! Narvaez et al. 2012a,b): ! ! ! ! Larvae_GR0 growth rate (um/day) ! ! Larvae_size0 size in terms of length (um) ! ! food_supply food supply (constant source; mg Carbon/l) ! ! settle_size settlement size (um) ! ! ! ! Turbidity effect parameters on planktonic larvae growth: ! ! ! ! turb_ambi ambient turbidity level (g/l) ! ! turb_axis turbidity linear axis crossing (g/l) ! ! turb_base turbidity exponential base factor (g/l) ! ! turb_crit critical turbidity value (g/l) ! ! turb_mean turbidity exponential mean (g/l) ! ! turb_rate turbidity exponential rate (1/(g/l)) ! ! turb_size minimum larvae size (um) affected by turbidity ! ! turb_slop turbidity linear slope (1/(g/l)) ! ! ! ! Planktonic larvae vertical migration (swimming) parameters: ! ! ! ! slope_Sdec coefficient due to decreasing salinity ! ! slope_Sinc coefficient due to increasing salinity ! ! swim_Sdec fraction active due to decreasing salinity ! ! swim_Sinc fraction active due to increasing salinity ! ! swim_Tmax maximum swimming time fraction ! ! swim_Tmin minimum swimming time fraction ! ! ! ! Planktonic larvae sinking parameters: ! ! ! ! sink_base exponential base factor (mm/s) ! ! sink_rate exponential rate factor (1/um) ! ! sink_size exponential mean size (um) ! ! ! ! Planktonic larvae swimming speed (mm/s) as a function of larval ! ! size (um) and temperature (Celsius), look table parameters: ! ! ! ! swim_DL larval size J-axis increment ! ! swim_DT temperature I-axis increment ! ! swim_Im number of values in temperature I-axis ! ! swim_Jm number of values in larval size J-axis ! ! swim_L0 starting value for larval size J-axis ! ! swim_T0 starting value for temperature I-axis ! ! swim_table larval swimming speed look table ! ! ! ! Planktonic larvae growth rate factor (nondimensional) as a function ! ! salinity and temperature, look table parameters: ! ! ! ! Gfactor_DS salinity I-axis increment ! ! Gfactor_DT temperature J-axis increment ! ! Gfactor_Im number of values in salinity I-axis ! ! Gfactor_Jm number of values in temperature J-axis ! ! Gfactor_S0 starting value for salinity I-axis ! ! Gfactor_T0 starting value for temperature J-axis ! ! Gfactor_table larval growth rate factor look table ! ! ! ! Planktonic larvae growth rate as a function of food supply and ! ! larval size, look table parameters: ! ! ! ! Grate_DF food supply I-axis increment ! ! Grate_DL larval size J-axis increment ! ! Grate_Im number of values in food supply I-axis ! ! Grate_Jm number of values in larval size J-axis ! ! Grate_F0 starting value for food supply I-axis ! ! Grate_L0 starting value for larval size J-axis ! ! Grate_table larval growth rate look table ! ! ! !======================================================================= ! USE mod_param ! implicit none ! ! Oyster floats model parameters. ! integer :: Gfactor_Im integer :: Gfactor_Jm integer :: Grate_Im integer :: Grate_Jm integer :: swim_Im integer :: swim_Jm ! real(r8) :: Gfactor_DS real(r8) :: Gfactor_DT real(r8) :: Gfactor_S0 real(r8) :: Gfactor_T0 real(r8) :: Grate_F0 real(r8) :: Grate_L0 real(r8) :: Grate_DF real(r8) :: Grate_DL real(r8) :: swim_DL real(r8) :: swim_DT real(r8) :: swim_L0 real(r8) :: swim_T0 ! real(r8), allocatable :: Larvae_GR0(:) ! um/day real(r8), allocatable :: Larvae_size0(:) ! um real(r8), allocatable :: food_supply(:) ! mg Carbon/l real(r8), allocatable :: settle_size(:) ! um ! real(r8), allocatable :: sink_base(:) ! mm/s real(r8), allocatable :: sink_rate(:) ! 1/um real(r8), allocatable :: sink_size(:) ! um ! real(r8), allocatable :: slope_Sinc(:) real(r8), allocatable :: slope_Sdec(:) real(r8), allocatable :: swim_Sdec(:) real(r8), allocatable :: swim_Sinc(:) real(r8), allocatable :: swim_Tmax(:) real(r8), allocatable :: swim_Tmin(:) ! real(r8), allocatable :: turb_ambi(:) ! g/l real(r8), allocatable :: turb_axis(:) ! g/l real(r8), allocatable :: turb_base(:) ! g/l real(r8), allocatable :: turb_crit(:) ! g/l real(r8), allocatable :: turb_mean(:) ! g/l real(r8), allocatable :: turb_rate(:) ! l/g real(r8), allocatable :: turb_size(:) ! um real(r8), allocatable :: turb_slop(:) ! l/g ! real(r8), allocatable :: Gfactor_table(:,:) real(r8), allocatable :: Grate_table(:,:) real(r8), allocatable :: swim_table(:,:) ! CONTAINS ! SUBROUTINE allocate_behavior ! !======================================================================= ! ! ! This routine allocates oyster model variables. ! ! ! !======================================================================= ! !----------------------------------------------------------------------- ! Allocate various module variables. !----------------------------------------------------------------------- ! IF (.not.allocated(Larvae_GR0)) THEN allocate ( Larvae_GR0(Ngrids) ) Dmem(1)=Dmem(1)+REAL(Ngrids,r8) END IF IF (.not.allocated(Larvae_size0)) THEN allocate ( Larvae_size0(Ngrids) ) Dmem(1)=Dmem(1)+REAL(Ngrids,r8) END IF IF (.not.allocated(food_supply)) THEN allocate ( food_supply(Ngrids) ) Dmem(1)=Dmem(1)+REAL(Ngrids,r8) END IF IF (.not.allocated(settle_size)) THEN allocate ( settle_size(Ngrids) ) Dmem(1)=Dmem(1)+REAL(Ngrids,r8) END IF IF (.not.allocated(sink_base)) THEN allocate ( sink_base(Ngrids) ) Dmem(1)=Dmem(1)+REAL(Ngrids,r8) END IF IF (.not.allocated(sink_rate)) THEN allocate ( sink_rate(Ngrids) ) Dmem(1)=Dmem(1)+REAL(Ngrids,r8) END IF IF (.not.allocated(sink_size)) THEN allocate ( sink_size(Ngrids) ) Dmem(1)=Dmem(1)+REAL(Ngrids,r8) END IF IF (.not.allocated(slope_Sdec)) THEN allocate ( slope_Sdec(Ngrids) ) Dmem(1)=Dmem(1)+REAL(Ngrids,r8) END IF IF (.not.allocated(slope_Sinc)) THEN allocate ( slope_Sinc(Ngrids) ) Dmem(1)=Dmem(1)+REAL(Ngrids,r8) END IF IF (.not.allocated(swim_Sdec)) THEN allocate ( swim_Sdec(Ngrids) ) Dmem(1)=Dmem(1)+REAL(Ngrids,r8) END IF IF (.not.allocated(swim_Sinc)) THEN allocate ( swim_Sinc(Ngrids) ) Dmem(1)=Dmem(1)+REAL(Ngrids,r8) END IF IF (.not.allocated(swim_Tmax)) THEN allocate ( swim_Tmax(Ngrids) ) Dmem(1)=Dmem(1)+REAL(Ngrids,r8) END IF IF (.not.allocated(swim_Tmin)) THEN allocate ( swim_Tmin(Ngrids) ) Dmem(1)=Dmem(1)+REAL(Ngrids,r8) END IF IF (.not.allocated(turb_ambi)) THEN allocate ( turb_ambi(Ngrids) ) Dmem(1)=Dmem(1)+REAL(Ngrids,r8) END IF IF (.not.allocated(turb_axis)) THEN allocate ( turb_axis(Ngrids) ) Dmem(1)=Dmem(1)+REAL(Ngrids,r8) END IF IF (.not.allocated(turb_base)) THEN allocate ( turb_base(Ngrids) ) Dmem(1)=Dmem(1)+REAL(Ngrids,r8) END IF IF (.not.allocated(turb_crit)) THEN allocate ( turb_crit(Ngrids) ) Dmem(1)=Dmem(1)+REAL(Ngrids,r8) END IF IF (.not.allocated(turb_mean)) THEN allocate ( turb_mean(Ngrids) ) Dmem(1)=Dmem(1)+REAL(Ngrids,r8) END IF IF (.not.allocated(turb_rate)) THEN allocate ( turb_rate(Ngrids) ) Dmem(1)=Dmem(1)+REAL(Ngrids,r8) END IF IF (.not.allocated(turb_size)) THEN allocate ( turb_size(Ngrids) ) Dmem(1)=Dmem(1)+REAL(Ngrids,r8) END IF IF (.not.allocated(turb_slop)) THEN allocate ( turb_slop(Ngrids) ) Dmem(1)=Dmem(1)+REAL(Ngrids,r8) END IF ! RETURN END SUBROUTINE allocate_behavior END MODULE mod_behavior