Opened 12 years ago

Closed 12 years ago

#553 closed upgrade (Done)

Added biological behavior to Langrangian Drifters: Oyster Model — at Version 1

Reported by: arango Owned by: arango
Priority: major Milestone: Release ROMS/TOMS 3.6
Component: Nonlinear Version: 3.6
Keywords: Cc:

Description (last modified by arango)

A new option FLOAT_OYSTER has been added to model the swimming, sinking, and settlement of planktonic oyster larvae. This development includes the infrastructure to add different behaviors to the Lagrangian drifters (FLOATS). The design is similar to that of the ecosystem models in ROMS and includes several header files, as described below. This option is under the umbrella of internal C-preprocessing flag FLOAT_BIOLOGY, which is defined in globaldefs.h.

The biological behavior for the floats is achieved by interpolating additional variables using interp_floats in step_floats.F and then calling biology_floats in the predictor and corrector steps:

# ifdef FLOAT_BIOLOGY
!
!-----------------------------------------------------------------------
!  Compute biological float behavior, corrector step.
!-----------------------------------------------------------------------
!
      CALL biology_floats (ng, Lstr, Lend, .FALSE., my_thread)
# endif

The planktonic behavior is based on the model of Dekshenieks et al. (1993; 1996; 1997). It calculates the size (length) and development of oyster larvae. This model was implement in ROMS with the help of Diego Narvaez as part of his Ph.D. dissertation. Many thanks to John Klinck for his suggestions about the numerical implementation using the predictor/corrector scheme of the floats. Results about this oyster model can be found in Narvaez et al. 2012 a,b (J. Mar. Res., in review).

This model includes the following files:

  • ROMS/Modules/mod_behavior.F: module declaring all the biological behavior model internal parameters.
          MODULE mod_behavior
    
    #if defined FLOATS && defined FLOAT_BIOLOGY
    # if defined FLOAT_OYSTER
    #  include <oyster_floats_mod.h>
    # endif
    #endif
    
          END MODULE mod_behavior
    
  • ROMS/Nonlinear/Biology/biology_floats.F: Lagrangian drifters behavior model driver.
          MODULE biology_floats_mod
    #if defined NONLINEAR && defined FLOATS && defined FLOAT_BIOLOGY
    
          implicit none
    
          PRIVATE
          PUBLIC  :: biology_floats
    
          CONTAINS
    
    # ifdef FLOAT_OYSTER
    #  include <oyster_floats.h>
    # endif
    
    #endif
    
          END MODULE biology_floats_mod
    
  • ROMS/Nonlinear/Biology/oyster_floats.h: planktonic oyster larvae model using Lagrangian particles.
  • ROMS/Nonlinear/Biology/oyster_floats_mod.h: oyster model declaration and allocation of internal parameters.
  • ROMS/Nonlinear/Biology/oyster_floats_inp.h: code to read input model parameters which is included read_fltbiopar.F.
  • ROMS/Nonlinear/Biology/oyster_floats_def.h: code to define input oyster model parameters in all output NetCDF files which is included in ROMS/Utility/def_info.F.
  • ROMS/Nonlinear/Biology/oyster_floats_wrt.h: code to write out input model parameters in all output NetCDF files which is included in ROMS/Utility/wrt_info.F.
  • ROMS/External/behavior_oyster.in: oyster model standard input parameters.
  • ROMS/Utility/read_fltbiopar.F: routine to read floats biological behavior parameters.
    #include "cppdefs.h"
    #if defined FLOATS && defined FLOAT_BIOLOGY
    
    # if defined FLOAT_OYSTER
    #  include <oyster_floats_inp.h>
    # endif
    #else
          SUBROUTINE read_FltBioPar
          END SUBROUTINE read_FltBioPar
    #endif
    

NOTES:

  • Mostly all the floats parameter are moved from mod_scalars.F to mod_floats.F. I think that it is better to have everything in a single module.
  • All the header files (*.h) above are included within <...> to allow the user to customize any of them in the project directory while keeping the distributed code intact (check the build script for details).
  • All the floats input scripts (floats_*.in) have two new keyword entries: A switch Fprint to control the printing of floats initial positions to standard out file. It can be used to turn off the printing of information when thousands of floats are released. This information is still in output floats NetCDF file.
          Fprint == T
    
    And the float's behavior model input script file name:
         FBIONAM =  behavior_oyster.in
    
  • Currently, the oyster model assumes constant food (mg Carbon/l) and turbidity (g/l). This can be changed in the future with spatial and temporal variability for either food and turbidity. If this is the case, we need to have something like:
              IF (Predictor) THEN
                Lfood=track(ifood,nf,l)
                Lturb=track(iturb,nf,l)
                ...
              ELSE
                Lfood=track(ifood,nfp1,l)
                Lturb=track(iturb,nfp1,l)
                ...
              END IF
    
    in oyster_floats.h. The food variability may be from data, ecosystem model, or analytical functions. Similarly, the turbidity may be from data, sediment model, or analytical functions.
  • A new script ROMS/External/floats_upwelling.in was added to test the oyster model in the UPWELLING example.
  • Notice that behavior_oyster.in includes three look tables to: (i) compute larvae swimming speed as a function of larvae size and temperature, (ii) larvae growth rate factor as function of salinity and temperature, and (iii) larvae growth rate as function of food supply and larvae size. I recommend extreme caution when editing this part of the input script. Otherwise, ROMS may read these value incorrectly!!!

This capability illustrates how the biological behavior kernel can be implemented in ROMS floats. It is up to the user to validate and test their own customized behavior models.

Good luck...

Change History (1)

comment:1 by arango, 12 years ago

Description: modified (diff)
Resolution: Done
Status: newclosed
Note: See TracTickets for help on using tickets.