Skip to content

modifications to ROMS/Nonlinear and SWAN/Src for purposes of modeling a marsh

Allen, Rachel M requested to merge rallen/COAWST:v3.7-marsh into v3.7-marsh

Coding notes

ROMS/Nonlinear/Vegetation/vegetation_drag.F:

ifdef WET_DRY

! ! Set limiting factor for drag force. The drag force is adjusted ! to not change the direction of momentum. It only should slow down ! to zero. The value of 0.75 is arbitrary limitation assigment ! (same as for bottom stress). ! cff=0.25_r8/dt(ng) !Yiyang

endif

…… ……

ifdef WET_DRY

          cff4=cff*0.5_r8*(Hz(i-1,j,k)+Hz(i,j,k))
          ru_veg(i,j,k)=SIGN(1.0_r8, ru_veg(i,j,k))*                &
 &                           MIN(ABS(ru_veg(i,j,k)),                &
 &                               ABS(u(i,j,k,nrhs))*cff4)

endif

This is limiting the maximum value of friction the vegetation can produce as a whole based on CFL to make the model stable. Since the original friction has similar kind of fixing (cff=0.75), we are adjusting this limit to 1-0.75 so the friction don’t change the direction of the flow.

ROMS/Nonlinear/Vegetation/marsh_vert_growth.F:

    Dmin=-1.0_r8*marsh_high_water(i,j)    !Yiyang
      Dmax=Par_fac1(ng)*2.0_r8*Dmin+Par_fac2(ng)+Dmin

! ! ! Colonization only for desired region ! ! Yiyang modified for colonization only while drying !

if defined WET_DRY && defined MARSH_COLONIZE

    IF(j.lt.51) THEN

      IF((h(i,j).lt.Dmax).AND.(rmask_wet(i,j).eq.0_r8)) THEN
        marsh_mask(i,j)=1.0_r8
      ELSE
      marsh_mask(i,j)=marsh_mask(i,j)*rmask_wet(i,j)
      ENDIF

    ELSE
         marsh_mask(i,j)=0.0_r8
    ENDIF

endif

      depth=h(i,j)  !Yiyang

! depth=ABS(h(i,j))

…… ……

First we change the sign of Dmin and thus Dmax. This makes Dmin the marsh_high_water in actual sign of h since variable marsh_high_water is always positive and any value of h(i,j) above MSL will be negative. We put negative to marsh_high_water so Dmin is the minimum value of h that a marsh can grow. Consequently, Dmax is the maximum value of h where the marsh starts.

Then, we specify marsh colonization only when a cell is dry

Finally, variable depth, which all the biomass calculation was based on was set equal to h(I,j)

! ! put minimum biomass for high marsh (Yiyang) ! IF(depth.lt.0) THEN Bpeak=MAX(Bpeak,0.4_r8)*ramp ELSE Bpeak=MAX(Bpeak,0.0_r8)*ramp ENDIF ……. …….

This is making sure the biomass don’t drop to zero since in reality the drop of alterniflora biomass simply means the transition to another species (high marsh).

! Yiyang De-colonize IF(Bpeak.lt.0.0_r8) THEN marsh_mask(i,j)=0.0_r8 END IF

Since biomass don’t go to anything below 0.4 anymore, this prevents decolonization.

ROMS/Nonlinear/set_depth.F:

!Yiyang added SLR IF (MOD(time(ng),36d224d0)==0) THEN h(i,j)=h(i,j)+0.0_r830_r8/365_r8 END IF ! 15 mm/yr ! 30 is morph_fac; water depth is adjusted by SLR every 24 hrs

Adding SLR to bathymetry changes every 24 hrs since SLR for every time step is too small for fortran to recognize as a real number. We are not doing this in ana_fsobc.h because changing tide will disturb the marsh high water calculation and result in unrealistic growth range.

ROMS/Nonlinear/Sediment/sed_settling.F:

         IF (j.le.50) THEN
         settling_flux(i,j,ised)=FC(i,0)
         ELSE IF (j.le.55) THEN
         settling_flux(i,j,ised)=0.2_r8*(55.0_r8-j)*FC(i,0)
         ELSE
         settling_flux(i,j,ised)=0.0_r8       !Yiyang ramping deposition(settling?)
         END IF

For area close to OBC, we put settling_flux to zero in order to keep sediment in the water and deliver them in and out the inlet. When it’s closer to the inlet, we ramp the settling to what it should be by distance so it will have a gradual change between the no settling zone near OBC to full settling zone in the bay.

Merge request reports