modifications to ROMS/Nonlinear and SWAN/Src for purposes of modeling a 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.