intro story D-Flow FM

 

D-Flow Flexible Mesh

D-Flow Flexible Mesh (D-Flow FM) is the new software engine for hydrodynamical simulations on unstructured grids in 1D-2D-3D. Together with the familiar curvilinear meshes from Delft3D 4, the unstructured grid can consist of triangles, pentagons (etc.) and 1D channel networks, all in one single mesh. It combines proven technology from the hydrodynamic engines of Delft3D 4 and SOBEK 2 and adds flexible administration, resulting in:

  • Easier 1D-2D-3D model coupling, intuitive setup of boundary conditions and meteorological forcings (amongst others).
  • More flexible 2D gridding in delta regions, river junctions, harbours, intertidal flats and more.
  • High performance by smart use of multicore architectures, and grid computing clusters.
An overview of the current developments can be found here.
 
The D-Flow FM - team would be delighted if you would participate in discussions on the generation of meshes, the specification of boundary conditions, the running of computations, and all kinds of other relevant topics. Feel free to share your smart questions and/or brilliant solutions! 

 

=======================================================
We have launched a new website (still under construction so expect continuous improvements) and a new forum dedicated to Delft3D Flexible Mesh.

Please follow this link to the new forum: 
/web/delft3dfm/forum

Post your questions, issues, suggestions, difficulties related to our Delft3D Flexible Mesh Suite on the new forum.

=======================================================

** PLEASE TAG YOUR POST! **

 

 

Sub groups
D-Flow Flexible Mesh
DELWAQ
Cohesive sediments & muddy systems

 


Message Boards

User defined output in u_ppr (user postprocessing) subroutine

MC
Michael Clarke, modified 5 Years ago.

User defined output in u_ppr (user postprocessing) subroutine

Youngling Posts: 5 Join Date: 11/11/11 Recent Posts
I am playing with code to figure out how to output water surface elevation, depth and dye concentration from the model.

I found out that the variables that I should be working on are :
s1 : Water level
dps : depth in water level points
r1(n,m, k, l)

I modified the subroutine u_ppr.f90 and called another subroutine from u_ppr.f90 as follows:

subroutine u_jdmap(lundat    ,header    ,runid     ,itime     ,idate     , &
                & timnow    ,mmax      ,nmax      ,kmax      ,nmaxus    , &
                & nsrc      ,ltur      ,lmaxd     ,lstsci    ,lsal      , &
                & ltem, nostat, r1, dps)
!----- GPL ---------------------------------------------------------------------
!                                                                              
!  Copyright (C)  Stichting Deltares, 2011-2014.                               
!                                                                              
!  This program is free software: you can redistribute it and/or modify         
!  it under the terms of the GNU General Public License as published by         
!  the Free Software Foundation version 3.                                     
!                                                                              
!  This program is distributed in the hope that it will be useful,             
!  but WITHOUT ANY WARRANTY; without even the implied warranty of               
!  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               
!  GNU General Public License for more details.                                 
!                                                                              
!  You should have received a copy of the GNU General Public License            
!  along with this program.  If not, see <http://www.gnu.org/licenses/>.       
!                                                                              
!  contact: delft3d.support@deltares.nl                                        
!  Stichting Deltares                                                          
!  P.O. Box 177                                                                
!  2600 MH Delft, The Netherlands                                              
!                                                                              
!  All indications and logos of, and references to, "Delft3D" and "Deltares"   
!  are registered trademarks of Stichting Deltares, and remain the property of 
!  Stichting Deltares. All rights reserved.                                    
!                                                                              
!-------------------------------------------------------------------------------
!  $Id: u_wmap.f90 3291 2014-01-07 09:37:32Z mourits $
!  $HeadURL: https://svn.oss.deltares.nl/repos/delft3d/tags/3574/src/engines_gpl/flow2d3d/packages/plugin_user/src/u_wmap.f90 $
!!--description-----------------------------------------------------------------
!
! Example routine to write vertical eddy viscosity at
! layer=ILAY, water elevation + height at all waterlevel
! points (map) to a user defined output file
!
! Eddy viscosity are averaged to centre of the cell
! Values of KCx: 0= inactive;      1= active; 2= open boundary
! Values of KFx: 0= temporary dry; 1= wet
! WARNING: RBUFF0 and RBUFF1 uses the same memory location
! see call in postpr
!
!!--pseudo code and references--------------------------------------------------
! NONE
!!--declarations----------------------------------------------------------------
    use precision
   !
    implicit none

!
! Global variables
!
    integer                                         , intent(in) :: idate
    integer(pntrsize) , pointer :: gro
    integer                                         , intent(in) :: itime
    integer                                         , intent(in) :: kmax !  Description and declaration in esm_alloc_int.f90
    integer                                         , intent(in) :: lmaxd !  Description and declaration in dimens.igs
    integer                                         , intent(in) :: lsal !  Description and declaration in dimens.igs
    integer                                         , intent(in) :: lstsci !  Description and declaration in esm_alloc_int.f90
    integer                                         , intent(in) :: ltem !  Description and declaration in dimens.igs
    integer                                         , intent(in) :: ltur !  Description and declaration in esm_alloc_int.f90
    integer                                         , intent(in) :: lundat
    integer                                         , intent(in) :: mmax !  Description and declaration in esm_alloc_int.f90
    integer                                         , intent(in) :: nmax !  Description and declaration in esm_alloc_int.f90
    integer                                         , intent(in) :: nmaxus !  Description and declaration in esm_alloc_int.f90
    integer                                         , intent(in) :: nsrc !  Description and declaration in esm_alloc_int.f90
    real(fp)                                        , intent(in) :: timnow
    ! Jd added
    integer                                          :: nostat ! Number of monitoring stations
    integer(pntrsize)                               , pointer :: zdps
    !integer        , dimension(2, nostat)          , intent(in) :: mnstat !  Description and declaration in stations.igs
    real(fp), dimension(nmax, -1:mmax + 2)                   :: s1 !  Description and declaration in esm_alloc_real.f90
    real(prec), dimension(nmax, -1:mmax + 2)        , intent(in) :: dps !  Description and declaration in esm_alloc_real.f90
    real(fp), dimension(nostat)                                  :: zwl
   
    real(fp), dimension(nmax, -1:mmax + 2, kmax, lstsci), intent(in) :: r1 !  Description and declaration in esm_alloc_real.f90
   
    real(fp), dimension(nmax, -1:mmax + 2, kmax, lstsci)         :: r0 !  Description and declaration in esm_alloc_real.f90
    character(*)                                    , intent(in) :: runid
    character(131), dimension(10)                                :: header !  Description and declaration in postpr.igs
!
! Local variables
!
    integer :: i
    integer :: m
    integer :: n
    logical :: lvar
    real(fp):: vw
    real(fp):: wh
    real(fp):: xydef
    real(fp):: zdef
    integer        , dimension(2, nostat)           :: mnstat !  Description and declaration in stations.igs
!
!! executable statements -------------------------------------------------------
!
    !real(fp), dimension(nostat) :: zdps
    !zdps                => gdp%gdr_i_ch%zdps
    !
    ! Initialisation
    !
    xydef = 999999.
    zdef = 999.999
    !wh = s1(36, 32) + real(dps(37, 27),fp)
   
   
    write(lundat, *)idate, itime,  s1(36,32), s1(37, 27), r1(37,27,1,1)
    !write(lundat, *)nostat, wh, mnstat(1,2), r0(37,27,1,1)
   
   
end subroutine u_jdmap


The thing is that s1 and r1 are not updated. I always get zero values. I check that the index of n and m are correct. There is only one concentration item turned on i.e dye. So, I am wondering what modification do I need to do to output the variables properly. Currently, idate and itime are being outputted correctly.

Any help is highly appreciated.
Adri Mourits, modified 5 Years ago.

RE: User defined output in u_ppr (user postprocessing) subroutine

Yoda Posts: 1221 Join Date: 1/3/11 Recent Posts
Hi Michael,

Sorry, I missed your post.

The dimensions are wrong. Have a look to the definition of s1 in, for example, file "...\src\engines_gpl\flow2d3d\packages\io\src\output\wrtmap.f90":
real(fp)      , dimension(gdp%d%nlb:gdp%d%nub, gdp%d%mlb:gdp%d%mub)               , intent(in)  :: s1


If you don't want to pass through the gdp structure, your subroutine should look like:
subroutine u_jdmap(nlb, nub, mlb, mub, s1)
....
integer :: nlb, nub, mlb, mub
real(fp)      , dimension(nlb:nub, mlb:mub), intent(in)  :: s1
....
write(*,*) s1(36,32)


And the call in u_ppr should look like:
call u_jdmap(gdp%d%nlb, gdp%d%nub, gdp%d%mlb, gdp%d%mub, r(s1))


Regards,

Adri