simulation_aux.F90       coverage:  100.00 %func     72.47 %block


     1) module Simulation_Aux_module
     2) 
     3)   use PFLOTRAN_Constants_module
     4) 
     5)   implicit none
     6) 
     7)   private
     8) 
     9) #include "petsc/finclude/petscsys.h"
    10) #include "petsc/finclude/petscvec.h"
    11) #include "petsc/finclude/petscvec.h90"
    12) 
    13)   type,public :: simulation_aux_type
    14) 
    15)     ! Note: These are GLOBAL vectors (i.e. they do not contain ghost control
    16)     !       volumes)
    17) 
    18)     ! Size of entire subsurface domain
    19)     Vec :: subsurf_pres
    20)     Vec :: subsurf_temp
    21)     Vec :: subsurf_sat
    22)     Vec :: subsurf_den
    23) 
    24)     Vec :: subsurf_por0
    25)     Vec :: subsurf_por
    26)     Vec :: subsurf_strain
    27)     Vec :: subsurf_stress
    28) 
    29)     ! Size of surface cells of subsurface domain
    30)     Vec :: subsurf_pres_top_bc
    31)     Vec :: subsurf_temp_top_bc
    32)     Vec :: subsurf_mflux_exchange_with_surf
    33)     Vec :: subsurf_hflux_exchange_with_surf
    34) 
    35) 
    36)     ! Size of entire surface domain
    37)     Vec :: surf_head
    38)     Vec :: surf_temp
    39)     Vec :: surf_mflux_exchange_with_subsurf
    40)     Vec :: surf_hflux_exchange_with_subsurf
    41) 
    42)     VecScatter :: surf_to_subsurf
    43)     VecScatter :: subsurf_to_surf
    44)     VecScatter :: subsurf_to_hydrogeophyics
    45)     VecScatter :: geomechanics_to_subsurf
    46)     VecScatter :: subsurf_to_geomechanics
    47) 
    48)   end type simulation_aux_type
    49) 
    50)   public :: SimAuxCreate, &
    51)             SimAuxCopyVecScatter, &
    52)             SimAuxCopySubsurfVec, &
    53)             SimAuxCopySubsurfTopBCVec, &
    54)             SimAuxCopySurfVec, &
    55)             SimAuxCopySubsurfGeomechVec, &
    56)             SimAuxDestroy
    57) 
    58) contains
    59) 
    60) ! ************************************************************************** !
    61) 
    62) function SimAuxCreate()
    63)   ! 
    64)   ! This routine allocates auxillary object.
    65)   ! 
    66)   ! Author: Gautam Bisht,LBNL
    67)   ! Date: 08/20/13
    68)   ! 
    69) 
    70)   use Option_module
    71) 
    72)   implicit none
    73) 
    74)   type (simulation_aux_type),pointer :: SimAuxCreate
    75) 
    76)   type (simulation_aux_type),pointer :: aux
    77) 
    78)   allocate(aux)
    79)   aux%subsurf_pres = 0
    80)   aux%subsurf_temp = 0
    81)   aux%subsurf_sat = 0
    82)   aux%subsurf_den = 0
    83)   aux%subsurf_por0 = 0
    84)   aux%subsurf_por = 0
    85)   aux%subsurf_strain = 0
    86)   aux%subsurf_stress = 0
    87)   aux%subsurf_pres_top_bc = 0
    88)   aux%subsurf_temp_top_bc = 0
    89)   aux%subsurf_mflux_exchange_with_surf = 0
    90)   aux%subsurf_hflux_exchange_with_surf = 0
    91) 
    92)   aux%surf_head = 0
    93)   aux%surf_temp = 0
    94)   aux%surf_mflux_exchange_with_subsurf = 0
    95)   aux%surf_hflux_exchange_with_subsurf = 0
    96) 
    97)   aux%surf_to_subsurf = 0
    98)   aux%subsurf_to_surf = 0
    99)   aux%subsurf_to_hydrogeophyics = 0
   100)   aux%subsurf_to_geomechanics = 0
   101)   aux%geomechanics_to_subsurf = 0
   102) 
   103)   SimAuxCreate => aux
   104) 
   105) end function SimAuxCreate
   106) 
   107) ! ************************************************************************** !
   108) 
   109) subroutine SimAuxCopyVecScatter(aux, vscat, vscat_index)
   110)   ! 
   111)   ! This routine copies VectorScatter to an appropriate context.
   112)   ! 
   113)   ! Author: Gautam Bisht,LBNL
   114)   ! Date: 10/02/13
   115)   ! 
   116) 
   117)   implicit none
   118) 
   119)   type (simulation_aux_type),pointer :: aux
   120)   VecScatter :: vscat
   121)   PetscInt :: vscat_index
   122) 
   123)   PetscErrorCode :: ierr
   124) 
   125)   select case (vscat_index)
   126)     case(SURF_TO_SUBSURF)
   127)       call VecScatterCopy(vscat, aux%surf_to_subsurf, ierr);CHKERRQ(ierr)
   128)     case(SUBSURF_TO_SURF)
   129)       call VecScatterCopy(vscat, aux%subsurf_to_surf, ierr);CHKERRQ(ierr)
   130)     case(SUBSURF_TO_HYDROGEOPHY)
   131)       call VecScatterCopy(vscat, aux%subsurf_to_hydrogeophyics,  &
   132)                           ierr);CHKERRQ(ierr)
   133)     case(SUBSURF_TO_GEOMECHANICS)
   134)       call VecScatterCopy(vscat, aux%subsurf_to_geomechanics,  &
   135)                           ierr);CHKERRQ(ierr)
   136)     case(GEOMECHANICS_TO_SUBSURF)
   137)       call VecScatterCopy(vscat, aux%geomechanics_to_subsurf,  &
   138)                           ierr);CHKERRQ(ierr)
   139)   end select  
   140) 
   141) end subroutine SimAuxCopyVecScatter
   142) 
   143) ! ************************************************************************** !
   144) 
   145) subroutine SimAuxCopySubsurfVec(aux, subsurf_vec)
   146)   ! 
   147)   ! This routine creates 3D vectors related with subsurface-flow.
   148)   ! 
   149)   ! Author: Gautam Bisht,LBNL
   150)   ! Date: 10/02/13
   151)   ! 
   152) 
   153)   implicit none
   154) 
   155)   type (simulation_aux_type),pointer :: aux
   156)   Vec :: subsurf_vec
   157) 
   158)   PetscErrorCode :: ierr
   159) 
   160)   call VecDuplicate(subsurf_vec,aux%subsurf_pres,ierr);CHKERRQ(ierr)
   161)   call VecDuplicate(subsurf_vec,aux%subsurf_temp,ierr);CHKERRQ(ierr)
   162)   call VecDuplicate(subsurf_vec,aux%subsurf_sat,ierr);CHKERRQ(ierr)
   163)   call VecDuplicate(subsurf_vec,aux%subsurf_den,ierr);CHKERRQ(ierr)
   164)   call VecDuplicate(subsurf_vec,aux%subsurf_por0,ierr);CHKERRQ(ierr)
   165)   call VecDuplicate(subsurf_vec,aux%subsurf_por,ierr);CHKERRQ(ierr)
   166) 
   167) end subroutine SimAuxCopySubsurfVec
   168) 
   169) ! ************************************************************************** !
   170) 
   171) subroutine SimAuxCopySubsurfTopBCVec(aux, subsurf_top_bc_vec)
   172)   ! 
   173)   ! This routine creates vectors associated with surface of subsurface domain
   174)   ! related with subsurface-flow.
   175)   ! 
   176)   ! Author: Gautam Bisht,LBNL
   177)   ! Date: 10/02/13
   178)   ! 
   179) 
   180)   implicit none
   181) 
   182)   type (simulation_aux_type),pointer :: aux
   183)   Vec :: subsurf_top_bc_vec
   184) 
   185)   PetscErrorCode :: ierr
   186) 
   187)   call VecDuplicate(subsurf_top_bc_vec,aux%subsurf_pres_top_bc, &
   188)                     ierr);CHKERRQ(ierr)
   189)   call VecDuplicate(subsurf_top_bc_vec,aux%subsurf_temp_top_bc, &
   190)                     ierr);CHKERRQ(ierr)
   191)   call VecDuplicate(subsurf_top_bc_vec,aux%subsurf_mflux_exchange_with_surf, &
   192)                     ierr);CHKERRQ(ierr)
   193)   call VecDuplicate(subsurf_top_bc_vec,aux%subsurf_hflux_exchange_with_surf, &
   194)                     ierr);CHKERRQ(ierr)
   195) 
   196) end subroutine SimAuxCopySubsurfTopBCVec
   197) 
   198) ! ************************************************************************** !
   199) 
   200) subroutine SimAuxCopySurfVec(aux, surf_head_vec)
   201)   ! 
   202)   ! This routine creates vectors associated with surface-flow.
   203)   ! 
   204)   ! Author: Gautam Bisht,LBNL
   205)   ! Date: 10/02/13
   206)   ! 
   207) 
   208)   implicit none
   209) 
   210)   type (simulation_aux_type),pointer :: aux
   211)   Vec :: surf_head_vec
   212) 
   213)   PetscErrorCode :: ierr
   214) 
   215)   call VecDuplicate(surf_head_vec,aux%surf_head,ierr);CHKERRQ(ierr)
   216)   call VecDuplicate(surf_head_vec,aux%surf_temp,ierr);CHKERRQ(ierr)
   217)   call VecDuplicate(surf_head_vec,aux%surf_mflux_exchange_with_subsurf, &
   218)                     ierr);CHKERRQ(ierr)
   219)   call VecDuplicate(surf_head_vec,aux%surf_hflux_exchange_with_subsurf, &
   220)                     ierr);CHKERRQ(ierr)
   221) 
   222) end subroutine SimAuxCopySurfVec
   223) 
   224) ! ************************************************************************** !
   225) 
   226) subroutine SimAuxCopySubsurfGeomechVec(aux, subsurf_geomech_vec)
   227)   ! 
   228)   ! This routine creates vectors associated with geomechanics.
   229)   ! 
   230)   ! Author: Gautam Bisht,LBNL
   231)   ! Date: 10/02/13
   232)   ! 
   233)   implicit none
   234) 
   235)   type (simulation_aux_type),pointer :: aux
   236)   Vec :: subsurf_geomech_vec
   237) 
   238)   PetscErrorCode :: ierr
   239) 
   240)   call VecDuplicate(subsurf_geomech_vec, aux%subsurf_stress,  &
   241)                     ierr);CHKERRQ(ierr)
   242)   call VecDuplicate(subsurf_geomech_vec, aux%subsurf_strain,  &
   243)                     ierr);CHKERRQ(ierr)
   244) 
   245) end subroutine SimAuxCopySubsurfGeomechVec
   246) 
   247) ! ************************************************************************** !
   248) 
   249) subroutine SimAuxDestroy(aux)
   250)   ! 
   251)   ! This routine deallocates auxillary object.
   252)   ! 
   253)   ! Author: Gautam Bisht,LBNL
   254)   ! Date: 08/20/13
   255)   ! 
   256) 
   257)   implicit none
   258) 
   259)   type(simulation_aux_type), pointer :: aux
   260) 
   261)   PetscErrorCode :: ierr
   262) 
   263)   if (.not.associated(aux)) return
   264) 
   265)   if (aux%subsurf_pres /= 0) then
   266)     call VecDestroy(aux%subsurf_pres,ierr);CHKERRQ(ierr)
   267)   endif
   268)   if (aux%subsurf_temp /= 0) then
   269)     call VecDestroy(aux%subsurf_temp,ierr);CHKERRQ(ierr)
   270)   endif
   271)   if (aux%subsurf_sat /= 0) then
   272)     call VecDestroy(aux%subsurf_sat,ierr);CHKERRQ(ierr)
   273)   endif
   274)   if (aux%subsurf_den /= 0) then
   275)     call VecDestroy(aux%subsurf_den,ierr);CHKERRQ(ierr)
   276)   endif
   277)   if (aux%subsurf_por0 /= 0) then
   278)     call VecDestroy(aux%subsurf_por0,ierr);CHKERRQ(ierr)
   279)   endif
   280)   if (aux%subsurf_por /= 0) then
   281)     call VecDestroy(aux%subsurf_por,ierr);CHKERRQ(ierr)
   282)   endif
   283)   if (aux%subsurf_stress /= 0) then
   284)     call VecDestroy(aux%subsurf_stress,ierr);CHKERRQ(ierr)
   285)   endif
   286)   if (aux%subsurf_strain /= 0) then
   287)     call VecDestroy(aux%subsurf_strain,ierr);CHKERRQ(ierr)
   288)   endif
   289) 
   290)   if (aux%subsurf_pres_top_bc /= 0) then
   291)     call VecDestroy(aux%subsurf_pres_top_bc,ierr);CHKERRQ(ierr)
   292)   endif
   293)   if (aux%subsurf_temp_top_bc /= 0) then
   294)     call VecDestroy(aux%subsurf_temp_top_bc,ierr);CHKERRQ(ierr)
   295)   endif
   296)   if (aux%subsurf_mflux_exchange_with_surf /= 0) then
   297)     call VecDestroy(aux%subsurf_mflux_exchange_with_surf,ierr);CHKERRQ(ierr)
   298)   endif
   299)   if (aux%subsurf_hflux_exchange_with_surf /= 0) then
   300)     call VecDestroy(aux%subsurf_hflux_exchange_with_surf,ierr);CHKERRQ(ierr)
   301)   endif
   302) 
   303)   if (aux%surf_head /= 0) then
   304)     call VecDestroy(aux%surf_head,ierr);CHKERRQ(ierr)
   305)   endif
   306)   if (aux%surf_temp /= 0) then
   307)     call VecDestroy(aux%surf_temp,ierr);CHKERRQ(ierr)
   308)   endif
   309)   if (aux%surf_mflux_exchange_with_subsurf /= 0) then
   310)     call VecDestroy(aux%surf_mflux_exchange_with_subsurf,ierr);CHKERRQ(ierr)
   311)   endif
   312)   if (aux%surf_hflux_exchange_with_subsurf /= 0) then
   313)     call VecDestroy(aux%surf_hflux_exchange_with_subsurf,ierr);CHKERRQ(ierr)
   314)   endif
   315) 
   316)   if (aux%surf_to_subsurf /= 0) then
   317)     call VecScatterDestroy(aux%surf_to_subsurf,ierr);CHKERRQ(ierr)
   318)   endif
   319)   if (aux%subsurf_to_surf /= 0) then
   320)     call VecScatterDestroy(aux%subsurf_to_surf,ierr);CHKERRQ(ierr)
   321)   endif
   322)   if (aux%subsurf_to_hydrogeophyics /= 0) then
   323)     call VecScatterDestroy(aux%subsurf_to_hydrogeophyics,ierr);CHKERRQ(ierr)
   324)   endif
   325)   if (aux%subsurf_to_geomechanics /= 0) then
   326)     call VecScatterDestroy(aux%subsurf_to_geomechanics, ierr);CHKERRQ(ierr)
   327)   endif
   328)   if (aux%geomechanics_to_subsurf /= 0) then
   329)     call VecScatterDestroy(aux%geomechanics_to_subsurf, ierr);CHKERRQ(ierr)
   330)   endif
   331) 
   332)   deallocate(aux)
   333)   nullify(aux)
   334) 
   335) end subroutine SimAuxDestroy
   336) 
   337) end module Simulation_Aux_module

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