Units of ExternalVar%Mass in Modules WaterQuality & Benthos

Information about Programming in the MOHID Framework
mo@fggm.uni-hannover.de
MOHID Insider
Posts: 75
Joined: Thu Jan 01, 1970 00:00

Units of ExternalVar%Mass in Modules WaterQuality & Benthos

Postby mo@fggm.uni-hannover.de » Fri May 05, 2006 11:37

Hi,
I have a question about the calculation of ExternalVar%Mass in the benthos module.
I learned that ExternalVar%Mass is concentration of the respective property in the waterphase within ModuleWaterquality, but it is total Mass in kg for the ModuleBenthos.
or soluble properties this is the total mass, I suppose, but does it either refer to the total mass or to the total settled (bottom_) mass for particulates?

luis_at_mohid.com
MOHID Developer
Posts: 553
Joined: Thu Jan 01, 1970 00:00
Location: Instituto Superior Técnico - Technical University of Lisbon
Contact:

Postby luis_at_mohid.com » Mon May 08, 2006 16:44

Hi Mathias,

The \"%Mass\" array is called like this for historical reasons but it's really not a very good name.

In module WaterQuality the array is relative to the water column concentrations (mass per unit of volume).

In module Benthos, where the processes regarding deposited properties are computed the array is given kg. Properties involved in Benthos are the deposited ones (expressed in kg/m2). There's a underlying principle that when deposited properties mineralise (for example) they became nutrients are directly \"injected\" in the water column. In the case of Mohid Water (3D model) this occurs in the bottom layer. In Mohid River this occurs directly to the all water column. Thus, as in Module Benthos the deposited properties distribuition (kg/m2) and the bottom layer water concentrations are needed, they are converted into kg so that the biogeochemical reactions can be applied all in the same units (kg).

I hope this helped. Please tell me if you have any questions. Best regards,
Luis

mo@fggm.uni-hannover.de
MOHID Insider
Posts: 75
Joined: Thu Jan 01, 1970 00:00

Postby mo@fggm.uni-hannover.de » Mon May 15, 2006 11:48

Dear Luis,
thanks for your answer.
I have another question:
I try to include bacteria growth in benthos and I wanted them (the bacteria) to consume both DONnr and PON. I implemeted a subroutine in benthos and oriented on the processes in waterquality. My problem is that, if I only take PON as substrate, everything is fine. If I also want to take DONnr, the concentration will get negative under certain cirumstances (I could not reproduce it in my test example, I only got this in the application of my whole rivernetwork).

I added if-statements in the module, so that if the bottom_concentration is below the defined minimum substrate concentration, there will be no uptake (like in waterquality).


Code: Select all

    subroutine ComputeBenthicBact(Index)

        !Arguments-------------------------------------------------------------
        integer, intent(IN)                         :: Index

        !Local-----------------------------------------------------------------
        integer                                     :: PON
        integer                                     :: BAC
        integer                                     :: DONnr
        integer                                     :: PONr
!        integer                                     :: O
        real                                        :: s1, s2, xa, xb, ya, yb
        real                                        :: Mortality                        = null_real
        real                                        :: BacteriaPONUptake                = null_real
        real                                        :: BacteriaDONUptake                = null_real
        real                                        :: BacteriatotalUptake              = null_real
       
        real                                        :: BacteriatotalUptakeM             = null_real
        real                                        :: BacteriaPONUptakeM               = null_real
        real                                        :: BacteriaDONUptakeM               = null_real
        !Temporary-------------------------------------------------------------
        real                                        :: TBacteriaLimitationFactor        = null_real                         
        real                                        :: BottomPONConc                    = null_real
        real                                        :: BottomDONConc                    = null_real
       
        !Begin-----------------------------------------------------------------   

        PON   = Me%PropIndex%PON
        PONr  = Me%PropIndex%PONr
        BAC   = Me%PropIndex%Bact
        DONnr = Me%PropIndex%DONnr

        !Concentration of bottom_PON in terms of the bottom reactor
        ! 1000*3*0.05 is here for the moment for length, width and depth of the bottom reactor
        ! *1000 is the conversion from kg/m3=g/l to mg/l

        BottomPONConc       = Me%ExternalVar%Mass(PON, index)                                    &
                            /(1000.*3.*Me%Bact%BotReactorDepth)*1000.
        BottomDONConc       = Me%ExternalVar%Mass(DONnr, index)                                  &
                            /(1000.*3.*Me%Bact%BotReactorDepth)*1000.

       !TBacteriaLimitationFactor : limitation by temperature
        s1 = (1. / (Me%Bact%TOptBacteriaMin - Me%Bact%TBacteriaMin)) &
        * log((Me%Bact%BK2 * (1.0 - Me%Bact%BK1))                 &
           / (Me%Bact%BK1 * (1.0 - Me%Bact%BK2)))

        s2 = (1. / (Me%Bact%TBacteriaMax - Me%Bact%TOptBacteriaMax)) &
        * log((Me%Bact%BK3 * (1.0 - Me%Bact%BK4))                 &
           / (Me%Bact%BK4 * (1.0 - Me%Bact%BK3)))

        ya = exp(s1 * (Me%ExternalVar%Temperature(index) - Me%Bact%TBacteriaMin))
        yb = exp(s2 * (Me%Bact%TBacteriaMax - Me%ExternalVar%Temperature(index)))

        xa = (Me%Bact%BK1 * ya) / (1.0 + Me%Bact%BK1 * (ya - 1.0))
        xb = (Me%Bact%BK4 * yb) / (1.0 + Me%Bact%BK4 * (yb - 1.0))

        TBacteriaLimitationFactor = xa * xb

        if ((BottomPONConc > Me%Bact%BacMinSub) .OR.                                                 &
            (BottomDONConc > Me%Bact%BacminSub)) then         

            if (BottomPONConc > Me%Bact%BacMinSub) then         
                ! Bacteria PON uptake (1/d)
                BacteriaPONUptake   = TBacteriaLimitationFactor                                      &
                                     * Me%Bact%BacMaxUptake                                          &
                                     * BottomPONConc                                                 &
                                     / (Me%Bact%NSatConstBac                                         &
                                       + BottomPONConc)
                ! Bacteria PON uptake (kgN/d)                                   
                BacteriaPONUptakeM  = BacteriaPONUptake                                              &
                                    * Me%ExternalVar%Mass(BAC, Index)                                &
                                    * Me%Bact%NC_Ratio
            else
                BacteriaPONUptake     = 0.0
                BacteriaPONUptakeM    = 0.0
            endif

            if (BottomDONConc > Me%Bact%BacMinSub) then                                                                                                         
                ! Bacteria DON uptake (1/d)
                BacteriaDONUptake   =  TBacteriaLimitationFactor                                     &
                                    * Me%Bact%BacMaxUptake                                           &
                                    * BottomDONConc                                                  &
                                    / (Me%Bact%NSatConstBac                                          &
                                      + BottomDONConc)
                ! Bacteria DON uptake (kgN/d)   
                BacteriaDONUptakeM  = BacteriaDONUptake                                              &
                                    * Me%ExternalVar%Mass(BAC, Index)                                &
                                    * Me%Bact%NC_Ratio                                                                                                                                                     
            else
                 BacteriaDONUptake     = 0.0
                 BacteriaDONUptakeM    = 0.0
            endif
        else
            BacteriaPONUptake     = 0.0
            BacteriaPONUptakeM    = 0.0
            BacteriaDONUptake     = 0.0
            BacteriaDONUptakeM    = 0.0           
        endif

        !BacteriaTotalUptake, uptake in 1/d
        BacteriaTotalUptake = (BacteriaDONUptake                                                 &
                              + BacteriaPONUptake)                                           
                                         

        ! Bacteria total uptake in kgC/d
        BacteriatotalUptakeM= BacteriatotalUptake                                                 &
                           * Me%ExternalVar%Mass(BAC, Index)                               


        !Organic nitrogen from dead bacteria in kgC/d
        Mortality           = Me%ExternalVar%Mass(BAC, Index)                                    &
                            * Me%Bact%MortalityRate                                         
                                         


        Me%ExternalVar%Mass(BAC, Index)    = Me%ExternalVar%Mass(BAC, Index)                   &
                                           +(BacteriatotalUptakeM                              &
                                            -Mortality)                                        &
                                           * Me%DTDay


        Me%ExternalVar%Mass(PONr, Index)   = Me%ExternalVar%Mass(PONr, Index)                  &
                                           + Mortality *  Me%Bact%NC_Ratio                     &
                                           * Me%DTDay


        Me%ExternalVar%Mass(PON, Index)   = Me%ExternalVar%Mass(PON, Index)                    &
                                          - BacteriaPONUptakeM                                 &
                                          * Me%DTDay

 
        Me%ExternalVar%Mass(DONnr, Index) = Me%ExternalVar%Mass(DONnr, Index)                  &
                                          - BacteriaDONUptakeM                                 &
                                          * Me%DTDay                                   
                                   

    end subroutine ComputeBenthicBact

luis_at_mohid.com
MOHID Developer
Posts: 553
Joined: Thu Jan 01, 1970 00:00
Location: Instituto Superior Técnico - Technical University of Lisbon
Contact:

Postby luis_at_mohid.com » Mon May 22, 2006 13:30

Hi Mathias,

Sorry for the late answer, but I was in Delft, The Netherlands last week.
I think the best way for me is to look at your code. Could you send me you ModuleDrainageNetwork, ModuleInterface and ModuleBenthos please?

Best regards,
Luis

mo@fggm.uni-hannover.de
MOHID Insider
Posts: 75
Joined: Thu Jan 01, 1970 00:00

Postby mo@fggm.uni-hannover.de » Tue May 23, 2006 11:58

Hi Luis,
must be a strange manifestation of murphys law that I was in Lisbon at that time ;).
I will send you the code,
many thanks,
Matthias.

luis_at_mohid.com
MOHID Developer
Posts: 553
Joined: Thu Jan 01, 1970 00:00
Location: Instituto Superior Técnico - Technical University of Lisbon
Contact:

Postby luis_at_mohid.com » Tue May 23, 2006 12:25

Hi Matthias,

If you don't have my e-mail address just replace \"_at_\" for \"@\" in luis_at_mohid.com.
Best regards,
Luis


Return to “MOHID Programming”

Who is online

Users browsing this forum: No registered users and 1 guest