global.F90       coverage:  85.71 %func     50.70 %block


     1) module Global_module
     2) 
     3)   use Global_Aux_module
     4)   
     5)   use PFLOTRAN_Constants_module
     6) 
     7)   implicit none
     8)   
     9)   private 
    10) 
    11) #include "petsc/finclude/petscsys.h"
    12)   
    13)   public GlobalSetup, &
    14)          GlobalSetAuxVarScalar, &
    15)          GlobalSetAuxVarVecLoc, &
    16)          GlobalGetAuxVarVecLoc, &
    17)          GlobalWeightAuxVars, &
    18)          GlobalUpdateState, &
    19)          GlobalUpdateAuxVars
    20) 
    21) contains
    22) 
    23) ! ************************************************************************** !
    24) 
    25) subroutine GlobalSetup(realization)
    26)   ! 
    27)   ! Author: Glenn Hammond
    28)   ! Date: 02/22/08
    29)   ! 
    30) 
    31)   use Realization_Subsurface_class
    32)   use Patch_module
    33)   use Option_module
    34)   use Coupler_module
    35)   use Connection_module
    36)   use Grid_module
    37)  
    38)   implicit none
    39)   
    40)   class(realization_subsurface_type) :: realization
    41) 
    42)   type(option_type), pointer :: option
    43)   type(patch_type),pointer :: patch
    44)   type(grid_type), pointer :: grid
    45)   type(coupler_type), pointer :: boundary_condition
    46)   type(coupler_type), pointer :: source_sink
    47) 
    48)   PetscInt :: ghosted_id, iconn, sum_connection
    49)   type(global_auxvar_type), pointer :: auxvars(:)
    50)   type(global_auxvar_type), pointer :: auxvars_bc(:)
    51)   type(global_auxvar_type), pointer :: auxvars_ss(:)
    52)   
    53)   option => realization%option
    54)   patch => realization%patch
    55)   grid => patch%grid
    56) 
    57)   patch%aux%Global => GlobalAuxCreate()
    58)   
    59)   ! allocate auxvar data structures for all grid cells  
    60) #ifdef COMPUTE_INTERNAL_MASS_FLUX
    61)   option%iflag = 1 ! allocate mass_balance array
    62) #else  
    63)   option%iflag = 0 ! be sure not to allocate mass_balance array
    64) #endif
    65)   allocate(auxvars(grid%ngmax))
    66)   do ghosted_id = 1, grid%ngmax
    67)     call GlobalAuxVarInit(auxvars(ghosted_id),option)
    68)   enddo
    69)   patch%aux%Global%auxvars => auxvars
    70)   patch%aux%Global%num_aux = grid%ngmax
    71)   
    72)   ! count the number of boundary connections and allocate
    73)   ! auxvar data structures for them  
    74)   boundary_condition => patch%boundary_condition_list%first
    75)   sum_connection = 0    
    76)   do 
    77)     if (.not.associated(boundary_condition)) exit
    78)     sum_connection = sum_connection + &
    79)                      boundary_condition%connection_set%num_connections
    80)     boundary_condition => boundary_condition%next
    81)   enddo
    82) 
    83)   if (sum_connection > 0) then
    84)     option%iflag = 1 ! enable allocation of mass_balance array 
    85)     allocate(auxvars_bc(sum_connection))
    86)     do iconn = 1, sum_connection
    87)       call GlobalAuxVarInit(auxvars_bc(iconn),option)
    88)     enddo
    89)     patch%aux%Global%auxvars_bc => auxvars_bc
    90)   endif
    91)   patch%aux%Global%num_aux_bc = sum_connection
    92) 
    93)   ! count the number of source/sink connections and allocate
    94)   ! auxvar data structures for them  
    95)   source_sink => patch%source_sink_list%first
    96)   sum_connection = 0    
    97)   do 
    98)     if (.not.associated(source_sink)) exit
    99)     sum_connection = sum_connection + &
   100)                      source_sink%connection_set%num_connections
   101)     source_sink => source_sink%next
   102)   enddo
   103) 
   104)   if (sum_connection > 0) then
   105)     option%iflag = 1 ! enable allocation of mass_balance array 
   106)     allocate(auxvars_ss(sum_connection))
   107)     do iconn = 1, sum_connection
   108)       call GlobalAuxVarInit(auxvars_ss(iconn),option)
   109)     enddo
   110)     patch%aux%Global%auxvars_ss => auxvars_ss
   111)   endif
   112)   patch%aux%Global%num_aux_ss = sum_connection
   113) 
   114)   option%iflag = 0
   115)   
   116) end subroutine GlobalSetup
   117) 
   118) ! ************************************************************************** !
   119) 
   120) subroutine GlobalSetAuxVarScalar(realization,value,ivar)
   121)   ! 
   122)   ! Sets values of auxvar data using a scalar value.
   123)   ! 
   124)   ! Author: Glenn Hammond
   125)   ! Date: 11/19/08
   126)   ! 
   127) 
   128)   use Realization_Subsurface_class
   129)   use Option_module
   130)   use Patch_module
   131)   use Variables_module, only : LIQUID_PRESSURE, LIQUID_SATURATION, &
   132)                                LIQUID_DENSITY, GAS_PRESSURE, &
   133)                                GAS_DENSITY, GAS_SATURATION, &
   134)                                TEMPERATURE, LIQUID_DENSITY_MOL
   135)   
   136)   implicit none
   137) 
   138)   class(realization_subsurface_type) :: realization
   139)   PetscReal :: value
   140)   PetscInt :: ivar
   141) 
   142)   type(option_type), pointer :: option
   143)   type(patch_type), pointer :: patch
   144)     
   145)   PetscInt :: i
   146)   
   147)   patch => realization%patch
   148)   option => realization%option  
   149)   
   150)   select case(ivar)
   151)     case(LIQUID_PRESSURE)
   152)       do i=1, patch%aux%Global%num_aux
   153)         patch%aux%Global%auxvars(i)%pres = value
   154)       enddo
   155)       do i=1, patch%aux%Global%num_aux_bc
   156)         patch%aux%Global%auxvars_bc(i)%pres = value
   157)       enddo
   158)     case(TEMPERATURE)
   159)       do i=1, patch%aux%Global%num_aux
   160)         patch%aux%Global%auxvars(i)%temp = value
   161)       enddo
   162)       do i=1, patch%aux%Global%num_aux_bc
   163)         patch%aux%Global%auxvars_bc(i)%temp = value
   164)       enddo
   165)     case(LIQUID_DENSITY)
   166)       do i=1, patch%aux%Global%num_aux
   167)         patch%aux%Global%auxvars(i)%den_kg(option%liquid_phase) = value
   168)       enddo
   169)       do i=1, realization%patch%aux%Global%num_aux_bc
   170)         patch%aux%Global%auxvars_bc(i)%den_kg(option%liquid_phase) = value
   171)       enddo
   172)     case(LIQUID_DENSITY_MOL)
   173)       do i=1, patch%aux%Global%num_aux
   174)         patch%aux%Global%auxvars(i)%den(option%liquid_phase) = value/FMWH2O
   175)       enddo
   176)       do i=1, realization%patch%aux%Global%num_aux_bc
   177)         patch%aux%Global%auxvars_bc(i)%den(option%liquid_phase) = value/FMWH2O
   178)       enddo
   179)     case(LIQUID_SATURATION)
   180)       do i=1, patch%aux%Global%num_aux
   181)         patch%aux%Global%auxvars(i)%sat(option%liquid_phase) = value
   182)       enddo
   183)       do i=1, patch%aux%Global%num_aux_bc
   184)         patch%aux%Global%auxvars_bc(i)%sat(option%liquid_phase) = value
   185)       enddo
   186)   end select
   187)   
   188) end subroutine GlobalSetAuxVarScalar
   189) 
   190) ! ************************************************************************** !
   191) 
   192) subroutine GlobalSetAuxVarVecLoc(realization,vec_loc,ivar,isubvar)
   193)   ! 
   194)   ! Sets values of auxvar data using a vector.
   195)   ! 
   196)   ! Author: Glenn Hammond
   197)   ! Date: 11/19/08
   198)   ! 
   199) 
   200)   use Realization_Subsurface_class
   201)   use Patch_module
   202)   use Grid_module
   203)   use Option_module
   204)   use Variables_module, only : LIQUID_PRESSURE, LIQUID_SATURATION, &
   205)                                LIQUID_DENSITY, GAS_PRESSURE, &
   206)                                GAS_DENSITY, GAS_SATURATION, &
   207)                                TEMPERATURE, SC_FUGA_COEFF, GAS_DENSITY_MOL, &
   208)                                STATE
   209)   
   210)   implicit none
   211) 
   212) #include "petsc/finclude/petscvec.h"
   213) #include "petsc/finclude/petscvec.h90"
   214) 
   215)   class(realization_subsurface_type) :: realization
   216)   Vec :: vec_loc
   217)   PetscInt :: ivar
   218)   PetscInt :: isubvar  
   219)   
   220)   type(option_type), pointer :: option
   221)   type(patch_type), pointer :: patch
   222)   type(grid_type), pointer :: grid
   223)   
   224)   PetscInt :: ghosted_id
   225)   PetscReal, pointer :: vec_loc_p(:)
   226)   PetscErrorCode :: ierr
   227)   
   228)   patch => realization%patch
   229)   grid => patch%grid
   230)   option => realization%option
   231)   
   232)   call VecGetArrayReadF90(vec_loc,vec_loc_p,ierr);CHKERRQ(ierr)
   233)   
   234)   select case(ivar)
   235)     case(LIQUID_PRESSURE)
   236)       select case(isubvar)
   237)         case(TIME_T)
   238)           do ghosted_id=1, grid%ngmax
   239)             patch%aux%Global%auxvars(ghosted_id)%pres_store(option%liquid_phase,TIME_T) = &
   240)                 vec_loc_p(ghosted_id)
   241)           enddo
   242)         case(TIME_TpDT)
   243)           do ghosted_id=1, grid%ngmax
   244)             patch%aux%Global%auxvars(ghosted_id)%pres_store(option%liquid_phase,TIME_TpDT) = &
   245)                 vec_loc_p(ghosted_id)
   246)           enddo
   247)         case default
   248)           do ghosted_id=1, grid%ngmax
   249)             patch%aux%Global%auxvars(ghosted_id)%pres(option%liquid_phase) = vec_loc_p(ghosted_id)
   250)           enddo
   251)       end select
   252)     case(GAS_PRESSURE)
   253)       select case(isubvar)
   254)         case(TIME_T)
   255)           do ghosted_id=1, grid%ngmax
   256)             patch%aux%Global%auxvars(ghosted_id)%pres_store(option%gas_phase,TIME_T) = &
   257)                 vec_loc_p(ghosted_id)
   258)           enddo
   259)         case(TIME_TpDT)
   260)           do ghosted_id=1, grid%ngmax
   261)             patch%aux%Global%auxvars(ghosted_id)%pres_store(option%gas_phase,TIME_TpDT) = &
   262)                 vec_loc_p(ghosted_id)
   263)           enddo
   264)         case default
   265)           do ghosted_id=1, grid%ngmax
   266)             patch%aux%Global%auxvars(ghosted_id)%pres(option%gas_phase) = vec_loc_p(ghosted_id)
   267)           enddo
   268)       end select
   269)     case(TEMPERATURE)
   270)       select case(isubvar)
   271)         case(TIME_T)
   272)           do ghosted_id=1, grid%ngmax
   273)             patch%aux%Global%auxvars(ghosted_id)%temp_store(TIME_T) = &
   274)               vec_loc_p(ghosted_id)
   275)           enddo
   276)         case(TIME_TpDT)
   277)           do ghosted_id=1, grid%ngmax
   278)             patch%aux%Global%auxvars(ghosted_id)%temp_store(TIME_TpDT) = &
   279)               vec_loc_p(ghosted_id)
   280)           enddo
   281)         case default
   282)           do ghosted_id=1, grid%ngmax
   283)             patch%aux%Global%auxvars(ghosted_id)%temp = vec_loc_p(ghosted_id)
   284)           enddo
   285)       end select
   286)     case(LIQUID_DENSITY)
   287)       select case(isubvar)
   288)         case(TIME_T)
   289)           do ghosted_id=1, grid%ngmax
   290)             patch%aux%Global%auxvars(ghosted_id)%den_kg_store(option%liquid_phase,TIME_T) = &
   291)               vec_loc_p(ghosted_id)
   292)           enddo
   293)         case(TIME_TpDT)
   294)           do ghosted_id=1, grid%ngmax
   295)             patch%aux%Global%auxvars(ghosted_id)%den_kg_store(option%liquid_phase,TIME_TpDT) = &
   296)               vec_loc_p(ghosted_id)
   297)           enddo
   298)         case default
   299)           do ghosted_id=1, grid%ngmax
   300)             patch%aux%Global%auxvars(ghosted_id)%den_kg(option%liquid_phase) = vec_loc_p(ghosted_id)
   301)             patch%aux%Global%auxvars(ghosted_id)%den(option%liquid_phase) = &
   302)               vec_loc_p(ghosted_id)/FMWH2O
   303)           enddo
   304)       end select
   305)     case(GAS_SATURATION)
   306)       select case(isubvar)
   307)         case(TIME_T)
   308)           do ghosted_id=1, grid%ngmax
   309)             patch%aux%Global%auxvars(ghosted_id)%sat_store(option%gas_phase,TIME_T) = &
   310)               vec_loc_p(ghosted_id)
   311)           enddo
   312)         case(TIME_TpDT)
   313)           do ghosted_id=1, grid%ngmax
   314)             patch%aux%Global%auxvars(ghosted_id)%sat_store(option%gas_phase,TIME_TpDT) = &
   315)               vec_loc_p(ghosted_id)
   316)           enddo
   317)         case default
   318)           do ghosted_id=1, grid%ngmax
   319)             patch%aux%Global%auxvars(ghosted_id)%sat(option%gas_phase) = &
   320)               vec_loc_p(ghosted_id)
   321)           enddo
   322)       end select
   323)     case(GAS_DENSITY)
   324)       select case(isubvar)
   325)         case(TIME_T)
   326)           do ghosted_id=1, grid%ngmax
   327)             patch%aux%Global%auxvars(ghosted_id)%den_kg_store(option%gas_phase,TIME_T) = &
   328)               vec_loc_p(ghosted_id)
   329)           enddo
   330)         case(TIME_TpDT)
   331)           do ghosted_id=1, grid%ngmax
   332)             patch%aux%Global%auxvars(ghosted_id)%den_kg_store(option%gas_phase,TIME_TpDT) = &
   333)               vec_loc_p(ghosted_id)
   334)           enddo
   335)         case default
   336)           do ghosted_id=1, grid%ngmax
   337)             patch%aux%Global%auxvars(ghosted_id)%den_kg(option%gas_phase) = vec_loc_p(ghosted_id)
   338)           enddo
   339)       end select
   340)     case(GAS_DENSITY_MOL)
   341)       select case(isubvar)
   342)         case(TIME_T)
   343)           do ghosted_id=1, grid%ngmax
   344)             patch%aux%Global%auxvars(ghosted_id)%den_store(option%gas_phase,TIME_T) = &
   345)               vec_loc_p(ghosted_id)
   346)           enddo
   347)         case(TIME_TpDT)
   348)           do ghosted_id=1, grid%ngmax
   349)             patch%aux%Global%auxvars(ghosted_id)%den_store(option%gas_phase,TIME_TpDT) = &
   350)               vec_loc_p(ghosted_id)
   351)           enddo
   352)         case default
   353)           do ghosted_id=1, grid%ngmax
   354)             patch%aux%Global%auxvars(ghosted_id)%den(option%gas_phase) = vec_loc_p(ghosted_id)
   355)           enddo
   356)       end select
   357)     case(LIQUID_SATURATION)
   358)       select case(isubvar)
   359)         case(TIME_T)
   360)           do ghosted_id=1, grid%ngmax
   361)             patch%aux%Global%auxvars(ghosted_id)%sat_store(option%liquid_phase,TIME_T) = &
   362)               vec_loc_p(ghosted_id)
   363)           enddo
   364)         case(TIME_TpDT)
   365)           do ghosted_id=1, grid%ngmax
   366)             patch%aux%Global%auxvars(ghosted_id)%sat_store(option%liquid_phase,TIME_TpDT) = &
   367)               vec_loc_p(ghosted_id)
   368)           enddo
   369)         case default
   370)           do ghosted_id=1, grid%ngmax
   371)             patch%aux%Global%auxvars(ghosted_id)%sat(option%liquid_phase) = &
   372)               vec_loc_p(ghosted_id)
   373)           enddo
   374)       end select
   375)     case(SC_FUGA_COEFF)
   376)       select case(isubvar)
   377)         case(TIME_T)
   378)           do ghosted_id=1, grid%ngmax
   379)             patch%aux%Global%auxvars(ghosted_id)%fugacoeff_store(1,TIME_T) = &
   380)               vec_loc_p(ghosted_id)
   381)           enddo
   382)         case(TIME_TpDT)
   383)           do ghosted_id=1, grid%ngmax
   384)             patch%aux%Global%auxvars(ghosted_id)%fugacoeff_store(1,TIME_TpDT) = &
   385)               vec_loc_p(ghosted_id)
   386)           enddo
   387)         case default
   388)           do ghosted_id=1, grid%ngmax
   389)             patch%aux%Global%auxvars(ghosted_id)%fugacoeff(1) = vec_loc_p(ghosted_id)
   390)           enddo
   391)       end select
   392)     case(STATE)
   393)       do ghosted_id=1, grid%ngmax
   394)         patch%aux%Global%auxvars(ghosted_id)%istate = &
   395)           int(vec_loc_p(ghosted_id)+1.d-10)
   396)       enddo
   397)   end select
   398) 
   399)   call VecRestoreArrayReadF90(vec_loc,vec_loc_p,ierr);CHKERRQ(ierr)
   400) 
   401) end subroutine GlobalSetAuxVarVecLoc
   402) 
   403) ! ************************************************************************** !
   404) 
   405) subroutine GlobalGetAuxVarVecLoc(realization,vec_loc,ivar,isubvar)
   406)   ! 
   407)   ! Sets values of auxvar data using a vector.
   408)   ! 
   409)   ! Author: Glenn Hammond
   410)   ! Date: 11/19/08
   411)   ! 
   412) 
   413)   use Realization_Subsurface_class
   414)   use Patch_module
   415)   use Grid_module
   416)   use Option_module
   417)   use Variables_module, only : STATE
   418)   
   419)   implicit none
   420) 
   421) #include "petsc/finclude/petscvec.h"
   422) #include "petsc/finclude/petscvec.h90"
   423) 
   424)   class(realization_subsurface_type) :: realization
   425)   Vec :: vec_loc
   426)   PetscInt :: ivar
   427)   PetscInt :: isubvar  
   428)   
   429)   type(option_type), pointer :: option
   430)   type(patch_type), pointer :: patch
   431)   type(grid_type), pointer :: grid
   432)   
   433)   PetscInt :: ghosted_id
   434)   PetscReal, pointer :: vec_loc_p(:)
   435)   PetscErrorCode :: ierr
   436)   
   437)   patch => realization%patch
   438)   grid => patch%grid
   439)   option => realization%option
   440)   
   441)   call VecGetArrayReadF90(vec_loc,vec_loc_p,ierr);CHKERRQ(ierr)
   442)   
   443)   select case(ivar)
   444)     case(STATE)
   445)       do ghosted_id=1, grid%ngmax
   446)         vec_loc_p(ghosted_id) = &
   447)           dble(patch%aux%Global%auxvars(ghosted_id)%istate)
   448)       enddo
   449)     case default
   450)       option%io_buffer = 'Variable unrecognized in GlobalGetAuxVarVecLoc.'
   451)       call printErrMsg(option)
   452)   end select
   453) 
   454)   call VecRestoreArrayReadF90(vec_loc,vec_loc_p,ierr);CHKERRQ(ierr)
   455) 
   456) end subroutine GlobalGetAuxVarVecLoc
   457) 
   458) ! ************************************************************************** !
   459) 
   460) subroutine GlobalWeightAuxVars(realization,weight)
   461)   ! 
   462)   ! Updates the densities and saturations in auxiliary
   463)   ! variables associated with reactive transport
   464)   ! 
   465)   ! Author: Glenn Hammond
   466)   ! Date: 11/03/08
   467)   ! 
   468) 
   469)   use Realization_Subsurface_class
   470)   use Option_module
   471)   use Material_module, only : MaterialWeightAuxVars
   472)   
   473)   implicit none
   474) 
   475)   class(realization_subsurface_type) :: realization
   476)   PetscReal :: weight
   477)   
   478)   type(option_type), pointer :: option
   479)   type(global_auxvar_type), pointer :: auxvars(:)
   480)   PetscInt :: ghosted_id
   481)   
   482)   option => realization%option
   483)   auxvars => realization%patch%aux%Global%auxvars
   484)   
   485)   do ghosted_id = 1, realization%patch%aux%Global%num_aux
   486)     ! interpolate density and saturation based on weight
   487)     auxvars(ghosted_id)%den_kg(:) = &
   488)       (weight*auxvars(ghosted_id)%den_kg_store(:,TIME_TpDT)+ &
   489)        (1.d0-weight)*auxvars(ghosted_id)%den_kg_store(:,TIME_T))
   490)     auxvars(ghosted_id)%sat(:) = &
   491)       (weight*auxvars(ghosted_id)%sat_store(:,TIME_TpDT)+ &
   492)        (1.d0-weight)*auxvars(ghosted_id)%sat_store(:,TIME_T))
   493)   enddo
   494)   
   495)   select case(option%iflowmode) 
   496)     case(G_MODE)
   497)       do ghosted_id = 1, realization%patch%aux%Global%num_aux
   498)         auxvars(ghosted_id)%pres(:) = &
   499)           (weight*auxvars(ghosted_id)%pres_store(:,TIME_TpDT)+ &
   500)            (1.d0-weight)*auxvars(ghosted_id)%pres_store(:,TIME_T))
   501)         auxvars(ghosted_id)%temp = &
   502)           (weight*auxvars(ghosted_id)%temp_store(TIME_TpDT)+ &
   503)            (1.d0-weight)*auxvars(ghosted_id)%temp_store(TIME_T))
   504)       enddo  
   505)     case(MPH_MODE,FLASH2_MODE)
   506)       ! need future implementation for ims_mode too    
   507)       do ghosted_id = 1, realization%patch%aux%Global%num_aux
   508)         auxvars(ghosted_id)%pres(:) = &
   509)           (weight*auxvars(ghosted_id)%pres_store(:,TIME_TpDT)+ &
   510)            (1.d0-weight)*auxvars(ghosted_id)%pres_store(:,TIME_T))
   511)         auxvars(ghosted_id)%temp = &
   512)           (weight*auxvars(ghosted_id)%temp_store(TIME_TpDT)+ &
   513)            (1.d0-weight)*auxvars(ghosted_id)%temp_store(TIME_T))
   514)         auxvars(ghosted_id)%fugacoeff(:) = &
   515)           (weight*auxvars(ghosted_id)%fugacoeff_store(:,TIME_TpDT)+ &
   516)            (1.d0-weight)*auxvars(ghosted_id)%fugacoeff_store(:,TIME_T))
   517)         if (weight<1D-12) auxvars(ghosted_id)%reaction_rate(:)=0D0
   518)   !      auxvars(ghosted_id)%den(:) = &
   519)   !        (weight*auxvars(ghosted_id)%den_store(:,TIME_TpDT)+ &
   520)   !         (1.d0-weight)*auxvars(ghosted_id)%den_store(:,TIME_T))
   521)       enddo  
   522)   end select
   523)   
   524) end subroutine GlobalWeightAuxVars
   525) 
   526) ! ************************************************************************** !
   527) 
   528) subroutine GlobalUpdateState(realization)
   529)   ! 
   530)   ! Updates global aux var variables for use in
   531)   ! reactive transport
   532)   ! 
   533)   ! Author: Glenn Hammond
   534)   ! Date: 01/14/09
   535)   ! 
   536) 
   537)   use Realization_Subsurface_class
   538)   use Realization_Base_class, only : RealizationGetVariable
   539)   use Communicator_Base_module
   540)   use Variables_module, only : STATE
   541)   
   542)   class(realization_subsurface_type) :: realization
   543)   
   544)   call RealizationGetVariable(realization,realization%field%work,STATE, &
   545)                               ZERO_INTEGER)
   546)   call realization%comm1%GlobalToLocal(realization%field%work, &
   547)                                        realization%field%work_loc)
   548)   call GlobalSetAuxVarVecLoc(realization,realization%field%work_loc,STATE, &
   549)                              ZERO_INTEGER)
   550)   
   551) end subroutine GlobalUpdateState
   552) 
   553) ! ************************************************************************** !
   554) 
   555) subroutine GlobalUpdateAuxVars(realization,time_level,time)
   556)   ! 
   557)   ! Updates global aux var variables for use in
   558)   ! reactive transport
   559)   ! 
   560)   ! Author: Glenn Hammond
   561)   ! Date: 01/14/09
   562)   ! 
   563) 
   564)   use Realization_Subsurface_class
   565)   use Realization_Base_class, only : RealizationGetVariable
   566)   use Field_module
   567)   use Option_module
   568)   use Communicator_Base_module
   569)   use Material_module, only : MaterialUpdateAuxVars
   570)   use Variables_module, only : LIQUID_PRESSURE, LIQUID_SATURATION, &
   571)                                LIQUID_DENSITY, GAS_PRESSURE, &
   572)                                GAS_DENSITY, GAS_SATURATION, &
   573)                                TEMPERATURE, SC_FUGA_COEFF, GAS_DENSITY_MOL
   574)   
   575)   class(realization_subsurface_type) :: realization
   576)   PetscReal :: time
   577)   PetscInt :: time_level
   578)   
   579)   type(field_type), pointer :: field
   580)   type(option_type), pointer :: option
   581)   
   582)   option => realization%option
   583)   field => realization%field
   584)   
   585)   select case(time_level)
   586)     case(TIME_T)
   587)       realization%patch%aux%Global%time_t = time
   588)     case(TIME_TpDT)
   589)       realization%patch%aux%Global%time_tpdt = time
   590)   end select  
   591)   
   592)   ! liquid density
   593)   call RealizationGetVariable(realization,field%work,LIQUID_DENSITY, &
   594)                              ZERO_INTEGER)
   595)   call realization%comm1%GlobalToLocal(field%work,field%work_loc)
   596)   call GlobalSetAuxVarVecLoc(realization,field%work_loc,LIQUID_DENSITY, &
   597)                              time_level)
   598) 
   599)   ! liquid saturation
   600)   call RealizationGetVariable(realization,field%work,LIQUID_SATURATION, &
   601)                              ZERO_INTEGER)
   602)   call realization%comm1%GlobalToLocal(field%work,field%work_loc)
   603)   call GlobalSetAuxVarVecLoc(realization,field%work_loc,LIQUID_SATURATION, &
   604)                              time_level)
   605)   select case(option%iflowmode)
   606)     case(MPH_MODE,FLASH2_MODE)
   607)       ! Gas density
   608)       call RealizationGetVariable(realization,field%work,GAS_DENSITY, &
   609)                                  ZERO_INTEGER)
   610)       call realization%comm1%GlobalToLocal(field%work,field%work_loc)
   611)       call GlobalSetAuxVarVecLoc(realization,field%work_loc,GAS_DENSITY, &
   612)                                  time_level)
   613)       call RealizationGetVariable(realization,field%work,GAS_DENSITY_MOL, &
   614)                                   ZERO_INTEGER)
   615)       call realization%comm1%GlobalToLocal(field%work,field%work_loc)
   616)       call GlobalSetAuxVarVecLoc(realization,field%work_loc,GAS_DENSITY_MOL, &
   617)                                  time_level)
   618)  
   619)  
   620)       ! Gas saturation
   621)       call RealizationGetVariable(realization,field%work,GAS_SATURATION, &
   622)                                   ZERO_INTEGER)
   623)       call realization%comm1%GlobalToLocal(field%work,field%work_loc)
   624)       call GlobalSetAuxVarVecLoc(realization,field%work_loc,GAS_SATURATION, &
   625)                                  time_level)                         
   626)    
   627)       ! liquid pressure
   628)       call RealizationGetVariable(realization,field%work,LIQUID_PRESSURE, &
   629)                                   ZERO_INTEGER)
   630)       call realization%comm1%GlobalToLocal(field%work,field%work_loc)
   631)       call GlobalSetAuxVarVecLoc(realization,field%work_loc,LIQUID_PRESSURE, &
   632)                                  time_level)                      
   633)  
   634)       ! gas pressure
   635)       call RealizationGetVariable(realization,field%work,GAS_PRESSURE, &
   636)                                   ZERO_INTEGER)
   637)       call realization%comm1%GlobalToLocal(field%work,field%work_loc)
   638)       call GlobalSetAuxVarVecLoc(realization,field%work_loc,GAS_PRESSURE, &
   639)                                  time_level)
   640)  
   641)       ! temperature
   642)       call RealizationGetVariable(realization,field%work,TEMPERATURE, &
   643)                                   ZERO_INTEGER)
   644)       call realization%comm1%GlobalToLocal(field%work,field%work_loc)
   645)       call GlobalSetAuxVarVecLoc(realization,field%work_loc,TEMPERATURE, &
   646)                                  time_level)
   647)       
   648)       ! fugacity coeff
   649)       call RealizationGetVariable(realization,field%work,SC_FUGA_COEFF, &
   650)                                   ZERO_INTEGER)
   651)       call realization%comm1%GlobalToLocal(field%work,field%work_loc)
   652)       call GlobalSetAuxVarVecLoc(realization,field%work_loc,SC_FUGA_COEFF, &
   653)                                  time_level)
   654)     case(TH_MODE,G_MODE)
   655)       ! pressure
   656)       call RealizationGetVariable(realization,field%work,LIQUID_PRESSURE, &
   657)                                   ZERO_INTEGER)
   658)       call realization%comm1%GlobalToLocal(field%work,field%work_loc)
   659)       call GlobalSetAuxVarVecLoc(realization,field%work_loc,LIQUID_PRESSURE, &
   660)                                  time_level)
   661)  
   662)       ! temperature
   663)       call RealizationGetVariable(realization,field%work,TEMPERATURE, &
   664)                                   ZERO_INTEGER)
   665)       call realization%comm1%GlobalToLocal(field%work,field%work_loc)
   666)       call GlobalSetAuxVarVecLoc(realization,field%work_loc,TEMPERATURE, &
   667)                                  time_level)
   668)       
   669)     case(IMS_MODE)
   670)       ! Gas density
   671)       call RealizationGetVariable(realization,field%work,GAS_DENSITY, &
   672)                                  ZERO_INTEGER)
   673)       call realization%comm1%GlobalToLocal(field%work,field%work_loc)
   674)       call GlobalSetAuxVarVecLoc(realization,field%work_loc,GAS_DENSITY, &
   675)                                  time_level)
   676)       call RealizationGetVariable(realization,field%work,GAS_DENSITY_MOL, &
   677)                                  ZERO_INTEGER)
   678)       call realization%comm1%GlobalToLocal(field%work,field%work_loc)
   679)       call GlobalSetAuxVarVecLoc(realization,field%work_loc,GAS_DENSITY_MOL, &
   680)                                  time_level)
   681)  
   682)  
   683)       ! Gas saturation
   684)       call RealizationGetVariable(realization,field%work,GAS_SATURATION, &
   685)                                  ZERO_INTEGER)
   686)       call realization%comm1%GlobalToLocal(field%work,field%work_loc)
   687)       call GlobalSetAuxVarVecLoc(realization,field%work_loc,GAS_SATURATION, &
   688)                                  time_level)
   689)    
   690)       ! pressure
   691)       call RealizationGetVariable(realization,field%work,LIQUID_PRESSURE, &
   692)                                  ZERO_INTEGER)
   693)       call realization%comm1%GlobalToLocal(field%work,field%work_loc)
   694)       call GlobalSetAuxVarVecLoc(realization,field%work_loc,LIQUID_PRESSURE, &
   695)                                  time_level)
   696)  
   697)       ! temperature
   698)       call RealizationGetVariable(realization,field%work,TEMPERATURE, &
   699)                                  ZERO_INTEGER)
   700)       call realization%comm1%GlobalToLocal(field%work,field%work_loc)
   701)       call GlobalSetAuxVarVecLoc(realization,field%work_loc,TEMPERATURE, &
   702)                                  time_level)
   703) 
   704)     case(MIS_MODE)
   705)       ! Gas density
   706)       call RealizationGetVariable(realization,field%work,GAS_DENSITY, &
   707)                                  ZERO_INTEGER)
   708)       call realization%comm1%GlobalToLocal(field%work,field%work_loc)
   709)       call GlobalSetAuxVarVecLoc(realization,field%work_loc,GAS_DENSITY, &
   710)                                  time_level)
   711)       call RealizationGetVariable(realization,field%work,GAS_DENSITY_MOL, &
   712)                                  ZERO_INTEGER)
   713)       call realization%comm1%GlobalToLocal(field%work,field%work_loc)
   714)       call GlobalSetAuxVarVecLoc(realization,field%work_loc,GAS_DENSITY_MOL, &
   715)                                  time_level)
   716)  
   717)  
   718)       ! Gas saturation
   719)       call RealizationGetVariable(realization,field%work,GAS_SATURATION, &
   720)                                  ZERO_INTEGER)
   721)       call realization%comm1%GlobalToLocal(field%work,field%work_loc)
   722)       call GlobalSetAuxVarVecLoc(realization,field%work_loc,GAS_SATURATION, &
   723)                                  time_level)                  
   724)    
   725)       ! pressure
   726)       call RealizationGetVariable(realization,field%work,LIQUID_PRESSURE, &
   727)                                  ZERO_INTEGER)
   728)       call realization%comm1%GlobalToLocal(field%work,field%work_loc)
   729)       call GlobalSetAuxVarVecLoc(realization,field%work_loc,LIQUID_PRESSURE, &
   730)                                  time_level)
   731)  
   732)       ! temperature
   733)       call RealizationGetVariable(realization,field%work,TEMPERATURE, &
   734)                                  ZERO_INTEGER)
   735)       call realization%comm1%LocalToLocal(field%work_loc,field%work_loc)
   736)       call GlobalSetAuxVarVecLoc(realization,field%work_loc,TEMPERATURE, &
   737)                                  time_level)
   738)   end select
   739) 
   740) end subroutine GlobalUpdateAuxVars
   741) 
   742) end module Global_module

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