surface_field.F90       coverage:  100.00 %func     65.12 %block


     1) module Surface_Field_module
     2) 
     3) ! IMPORTANT NOTE: This module can have no dependencies on other modules!!!
     4)  
     5)   use PFLOTRAN_Constants_module
     6) 
     7)   implicit none
     8) 
     9)   private
    10) 
    11) #include "petsc/finclude/petscsys.h"
    12) #include "petsc/finclude/petscvec.h"
    13) #include "petsc/finclude/petscvec.h90"
    14) 
    15)   type, public :: surface_field_type
    16) 
    17)     Vec :: mannings0, mannings_loc
    18) 
    19)     Vec :: work, work_loc
    20) 
    21)     Vec :: area
    22)     
    23)     Vec :: press_subsurf         ! MPI
    24)     Vec :: temp_subsurf          ! MPI
    25) 
    26)     Vec :: subsurf_temp_vec_1dof ! MPI
    27)     Vec :: subsurf_temp_vec_ndof ! MPI
    28)     Vec :: subsurf_avg_vdarcy    ! MPI +ve value => Flow from surface to subsurface
    29) 
    30)     ! residual vectors
    31)     Vec :: flow_r
    32) 
    33)     ! Solution vectors (yy = previous solution, xx = current iterate)
    34)     Vec :: flow_xx, flow_xx_loc, flow_dxx, flow_yy, flow_accum
    35) 
    36)     ! vectors to save temporally average quantities
    37)     Vec, pointer :: avg_vars_vec(:)
    38)     PetscInt :: nvars
    39) 
    40)     ! vectors to save temporally average flowrates
    41)     Vec :: flowrate_inst
    42)     Vec :: flowrate_aveg
    43) 
    44)   end type surface_field_type
    45) 
    46)   public :: SurfaceFieldCreate, &
    47)             SurfaceFieldDestroy
    48) 
    49) contains
    50) 
    51) ! ************************************************************************** !
    52) 
    53) function SurfaceFieldCreate()
    54)   ! 
    55)   ! Allocates and initializes a new surface Field object
    56)   ! 
    57)   ! Author: Gautam Bisht
    58)   ! Date: 01/17/2012
    59)   ! 
    60) 
    61)   implicit none
    62)   
    63)   type(surface_field_type), pointer :: SurfaceFieldCreate
    64)   
    65)   type(surface_field_type), pointer :: surface_field
    66)   
    67)   allocate(surface_field)
    68) 
    69)   ! nullify PetscVecs
    70)   surface_field%mannings0 = 0
    71)   surface_field%mannings_loc = 0
    72) 
    73)   surface_field%work = 0
    74)   surface_field%work_loc = 0
    75) 
    76)   surface_field%area = 0
    77)   
    78)   surface_field%flow_r = 0
    79)   surface_field%flow_xx = 0
    80)   surface_field%flow_xx_loc = 0
    81)   surface_field%flow_dxx = 0
    82)   surface_field%flow_yy = 0
    83)   surface_field%flow_accum = 0
    84)   
    85)   surface_field%press_subsurf = 0
    86) 
    87)   surface_field%subsurf_temp_vec_1dof = 0
    88)   surface_field%subsurf_temp_vec_ndof = 0
    89) 
    90)   nullify(surface_field%avg_vars_vec)
    91)   surface_field%nvars = 0
    92) 
    93)   surface_field%flowrate_inst = 0
    94)   surface_field%flowrate_aveg = 0
    95) 
    96)   surface_field%temp_subsurf = 0
    97) 
    98)   SurfaceFieldCreate => surface_field
    99) 
   100) end function SurfaceFieldCreate
   101) 
   102) ! ************************************************************************** !
   103) 
   104) subroutine SurfaceFieldDestroy(surface_field)
   105)   ! 
   106)   ! Deallocates a field object
   107)   ! 
   108)   ! Author: Gautam Bisht
   109)   ! Date: 01/17/2012
   110)   ! 
   111) 
   112)   implicit none
   113)   
   114)   type(surface_field_type), pointer :: surface_field
   115)   
   116)   PetscErrorCode :: ierr
   117)   PetscInt :: ivar
   118) 
   119)   ! Destroy PetscVecs
   120)   if (surface_field%mannings0 /= 0) then
   121)     call VecDestroy(surface_field%mannings0,ierr);CHKERRQ(ierr)
   122)   endif
   123)   if (surface_field%mannings_loc /= 0) then
   124)     call VecDestroy(surface_field%mannings_loc,ierr);CHKERRQ(ierr)
   125)   endif
   126) 
   127)   if (surface_field%work /= 0) then
   128)     call VecDestroy(surface_field%work,ierr);CHKERRQ(ierr)
   129)   endif
   130)   if (surface_field%work_loc  /= 0) then
   131)     call VecDestroy(surface_field%work_loc,ierr);CHKERRQ(ierr)
   132)   endif
   133) 
   134)   if (surface_field%area  /= 0) then
   135)     call VecDestroy(surface_field%area,ierr);CHKERRQ(ierr)
   136)   endif
   137)   
   138)   if (surface_field%press_subsurf /= 0) then
   139)     call VecDestroy(surface_field%press_subsurf,ierr);CHKERRQ(ierr)
   140)   endif
   141) 
   142)   if (surface_field%flow_r /= 0) then
   143)     call VecDestroy(surface_field%flow_r,ierr);CHKERRQ(ierr)
   144)   endif
   145)   if (surface_field%flow_xx /= 0) then
   146)     call VecDestroy(surface_field%flow_xx,ierr);CHKERRQ(ierr)
   147)   endif
   148)   if (surface_field%flow_xx_loc /= 0) then
   149)     call VecDestroy(surface_field%flow_xx_loc,ierr);CHKERRQ(ierr)
   150)   endif
   151)   if (surface_field%flow_dxx /= 0) then
   152)     call VecDestroy(surface_field%flow_dxx,ierr);CHKERRQ(ierr)
   153)   endif
   154)   if (surface_field%flow_yy /= 0) then
   155)     call VecDestroy(surface_field%flow_yy,ierr);CHKERRQ(ierr)
   156)   endif
   157)   if (surface_field%flow_accum /= 0) then
   158)     call VecDestroy(surface_field%flow_accum,ierr);CHKERRQ(ierr)
   159)   endif
   160)   
   161)   if (surface_field%subsurf_temp_vec_1dof/=0) then
   162)     call VecDestroy(surface_field%subsurf_temp_vec_1dof,ierr);CHKERRQ(ierr)
   163)   endif
   164)   if (surface_field%subsurf_temp_vec_ndof/=0) then
   165)     call VecDestroy(surface_field%subsurf_temp_vec_ndof,ierr);CHKERRQ(ierr)
   166)   endif
   167) 
   168)   do ivar = 1,surface_field%nvars
   169)     call VecDestroy(surface_field%avg_vars_vec(ivar),ierr);CHKERRQ(ierr)
   170)   enddo
   171) 
   172)   if (surface_field%flowrate_inst/=0) then
   173)     call VecDestroy(surface_field%flowrate_inst,ierr);CHKERRQ(ierr)
   174)   endif
   175)   if (surface_field%flowrate_aveg/=0) then
   176)     call VecDestroy(surface_field%flowrate_aveg,ierr);CHKERRQ(ierr)
   177)   endif
   178) 
   179)   if (surface_field%temp_subsurf /=0 ) then
   180)     call VecDestroy(surface_field%temp_subsurf,ierr);CHKERRQ(ierr)
   181)   endif
   182) 
   183)   if (associated(surface_field)) deallocate(surface_field)
   184)   nullify(surface_field)
   185) 
   186) end subroutine SurfaceFieldDestroy
   187) 
   188) end module Surface_Field_module

generated by
Intel(R) C++/Fortran Compiler code-coverage tool
Web-Page Owner: Nobody