User: rhaas Date: 2014/04/15 02:50 PM
Modified: /trunk/src/ GRHydro_Boundaries.F90
Log: GRHydro: clean up sync_conservatives_only primitives bc calls
Define helper routine to do all boundary registration for a single bc type. This avoids code duplication and the possibility that eg flat and none are applied to different sets of variables.
File Changes:
Directory: /trunk/src/ ======================
File [modified]: GRHydro_Boundaries.F90 Delta lines: +114 -182 =================================================================== --- trunk/src/GRHydro_Boundaries.F90 2014-04-15 19:49:58 UTC (rev 636) +++ trunk/src/GRHydro_Boundaries.F90 2014-04-15 19:50:00 UTC (rev 637) @@ -296,13 +296,15 @@
-subroutine GRHydro_SelectPrimitiveInitialGuessesBoundaries(CCTK_ARGUMENTS) +subroutine GRHydro_SelectPrimitiveInitialGuessesBoundariesForMethod(CCTK_ARGUMENTS, bcname)
implicit none
DECLARE_CCTK_ARGUMENTS DECLARE_CCTK_PARAMETERS DECLARE_CCTK_FUNCTIONS + + character(len=*), INTENT(IN) :: bcname
integer :: ierr CCTK_INT :: GRHydro_UseGeneralCoordinates, general_coordinates @@ -314,116 +316,80 @@
general_coordinates = GRHydro_UseGeneralCoordinates(cctkGH)
-!!$Flat boundaries if required - ! The commented out code are those primitives which do not require and explicit ! initial guess for Con2Prim. The guesses are either not needed or computed from other quantities!
- if (verbose.eq.1) call CCTK_INFO("Selecting primitive BC") + !ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & + ! "HydroBase::w_lorentz", bcname) + ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & + "HydroBase::rho", bcname) + !ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & + ! "HydroBase::press", bcname) + ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & + "HydroBase::eps", bcname) + if (general_coordinates .ne. 0) then + ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & + "GRHydro::lvel", bcname) + else + ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & + "HydroBase::vel", bcname) + endif + if(evolve_mhd.ne.0) then + if (general_coordinates .ne. 0) then + ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & + "GRHydro::lBvec", bcname) + else + ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & + "HydroBase::Bvec", bcname) + endif + endif
+ !if(evolve_tracer.ne.0) then + ! ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & + ! "GRHydro::GRHydro_tracers", bcname) + !endif
- if (CCTK_EQUALS(bound,"flat")) then - - !ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - ! "HydroBase::w_lorentz", "Flat") - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "HydroBase::rho", "Flat") - !ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - ! "HydroBase::press", "Flat") - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "HydroBase::eps", "Flat") - if (general_coordinates .ne. 0) then - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "GRHydro::lvel", "Flat") - else - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "HydroBase::vel", "Flat") - endif - if(evolve_mhd.ne.0) then - if (general_coordinates .ne. 0) then - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "GRHydro::lBvec", "Flat") - else - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "HydroBase::Bvec", "Flat") - endif - endif + !if(evolve_y_e.ne.0) then + ! ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & + ! "HydroBase::Y_e", bcname) + !endif
- !if(evolve_tracer.ne.0) then - ! ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - ! "GRHydro::GRHydro_tracers", "Flat") - !endif + if(evolve_temper.ne.0) then + ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & + "HydroBase::temperature", bcname) + !ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & + ! "HydroBase::entropy", bcname) + endif
- !if(evolve_y_e.ne.0) then - ! ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - ! "HydroBase::Y_e", "Flat") - !endif + if (ierr < 0) call CCTK_WARN(0, "problems with applying the chosen boundary condition")
- if(evolve_temper.ne.0) then - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "HydroBase::temperature", "Flat") - !ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - ! "HydroBase::entropy", "Flat") - endif +end subroutine GRHydro_SelectPrimitiveInitialGuessesBoundariesForMethod
+subroutine GRHydro_SelectPrimitiveInitialGuessesBoundaries(CCTK_ARGUMENTS)
- endif + implicit none
- if (CCTK_EQUALS(bound,"none")) then - !ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - ! "HydroBase::w_lorentz", "None") - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "HydroBase::rho", "None") - !ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - ! "HydroBase::press", "None") - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "HydroBase::eps", "None") - if (general_coordinates .ne. 0) then - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "GRHydro::lvel", "None") - else - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "HydroBase::vel", "None") - endif - - if(evolve_mhd.ne.0) then - if (general_coordinates .ne. 0) then - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "GRHydro::lBvec", "None") - else - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "HydroBase::Bvec", "None") - endif - - endif + DECLARE_CCTK_ARGUMENTS + DECLARE_CCTK_PARAMETERS + DECLARE_CCTK_FUNCTIONS
- !if(evolve_tracer.ne.0) then - ! ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - ! "GRHydro::GRHydro_tracers", "None") - ! - !endif + if (verbose.eq.1) call CCTK_INFO("Selecting primitive BC")
- !if(evolve_y_e.ne.0) then - ! ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - ! "HydroBase::Y_e", "None") - ! - !endif +!!$Flat boundaries if required + if (CCTK_EQUALS(bound,"flat")) then + call GRHydro_SelectPrimitiveInitialGuessesBoundariesForMethod(CCTK_PASS_FTOF, "Flat") + endif
- if(evolve_temper.ne.0) then - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "HydroBase::temperature", "None") - !ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - ! "HydroBase::entropy", "None") - endif - +!!$None boundaries if required + if (CCTK_EQUALS(bound,"none")) then + call GRHydro_SelectPrimitiveInitialGuessesBoundariesForMethod(CCTK_PASS_FTOF, "None") end if
+!!$Scalar boundaries if required if (CCTK_EQUALS(bound,"scalar")) then call CCTK_WARN(0, "Until somebody uses this I see no reason to support it") end if
- if (ierr < 0) call CCTK_WARN(0, "problems with applying the chosen boundary condition") - end subroutine GRHydro_SelectPrimitiveInitialGuessesBoundaries
@@ -433,7 +399,7 @@
-subroutine GRHydro_SelectPrimitiveBoundaries(CCTK_ARGUMENTS) +subroutine GRHydro_SelectPrimitiveBoundariesForMethod(CCTK_ARGUMENTS, bcname)
implicit none
@@ -441,6 +407,8 @@ DECLARE_CCTK_PARAMETERS DECLARE_CCTK_FUNCTIONS
+ character(len=*), INTENT(IN) :: bcname + integer :: ierr CCTK_INT :: GRHydro_UseGeneralCoordinates, general_coordinates
@@ -451,113 +419,77 @@
general_coordinates = GRHydro_UseGeneralCoordinates(cctkGH)
-!!$Flat boundaries if required + ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & + "HydroBase::w_lorentz", bcname) + ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & + "HydroBase::rho", bcname) + ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & + "HydroBase::press", bcname) + ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & + "HydroBase::eps", bcname) + if (general_coordinates .ne. 0) then + ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & + "GRHydro::lvel", bcname) + else + ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & + "HydroBase::vel", bcname) + endif + if(evolve_mhd.ne.0) then + if (general_coordinates .ne. 0) then + ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & + "GRHydro::lBvec", bcname) + else + ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & + "HydroBase::Bvec", bcname) + endif + endif
- if (verbose.eq.1) call CCTK_INFO("Selecting primitive BC") + if(evolve_tracer.ne.0) then + ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & + "GRHydro::GRHydro_tracers", bcname) + endif
+ if(evolve_y_e.ne.0) then + ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & + "HydroBase::Y_e", bcname) + endif
- if (CCTK_EQUALS(bound,"flat")) then - - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "HydroBase::w_lorentz", "Flat") - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "HydroBase::rho", "Flat") - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "HydroBase::press", "Flat") - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "HydroBase::eps", "Flat") - if (general_coordinates .ne. 0) then - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "GRHydro::lvel", "Flat") - else - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "HydroBase::vel", "Flat") - endif - if(evolve_mhd.ne.0) then - if (general_coordinates .ne. 0) then - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "GRHydro::lBvec", "Flat") - else - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "HydroBase::Bvec", "Flat") - endif - endif + if(evolve_temper.ne.0) then + ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & + "HydroBase::temperature", bcname) + ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & + "HydroBase::entropy", bcname) + endif
- if(evolve_tracer.ne.0) then - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "GRHydro::GRHydro_tracers", "Flat") - endif + if (ierr < 0) call CCTK_WARN(0, "problems with applying the chosen boundary condition")
- if(evolve_y_e.ne.0) then - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "HydroBase::Y_e", "Flat") - endif +end subroutine GRHydro_SelectPrimitiveBoundariesForMethod
- if(evolve_temper.ne.0) then - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "HydroBase::temperature", "Flat") - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "HydroBase::entropy", "Flat") - endif +subroutine GRHydro_SelectPrimitiveBoundaries(CCTK_ARGUMENTS)
+ implicit none
- endif + DECLARE_CCTK_ARGUMENTS + DECLARE_CCTK_PARAMETERS + DECLARE_CCTK_FUNCTIONS
- if (CCTK_EQUALS(bound,"none")) then - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "HydroBase::w_lorentz", "None") - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "HydroBase::rho", "None") - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "HydroBase::press", "None") - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "HydroBase::eps", "None") - if (general_coordinates .ne. 0) then - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "GRHydro::lvel", "None") - else - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "HydroBase::vel", "None") - endif - - if(evolve_mhd.ne.0) then - if (general_coordinates .ne. 0) then - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "GRHydro::lBvec", "None") - else - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "HydroBase::Bvec", "None") - endif - - endif + if (verbose.eq.1) call CCTK_INFO("Selecting primitive BC")
- if(evolve_tracer.ne.0) then - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "GRHydro::GRHydro_tracers", "None") - - endif +!!$Flat boundaries if required + if (CCTK_EQUALS(bound,"flat")) then + call GRHydro_SelectPrimitiveBoundariesForMethod(CCTK_ARGUMENTS, "Flat") + endif
- if(evolve_y_e.ne.0) then - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "HydroBase::Y_e", "None") - - endif - - if(evolve_temper.ne.0) then - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "HydroBase::temperature", "None") - ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, & - "HydroBase::entropy", "None") - endif - +!!$None boundaries if required + if (CCTK_EQUALS(bound,"none")) then + call GRHydro_SelectPrimitiveBoundariesForMethod(CCTK_ARGUMENTS, "None") end if
+!!$Scalar boundaries if required if (CCTK_EQUALS(bound,"scalar")) then call CCTK_WARN(0, "Until somebody uses this I see no reason to support it") end if
- if (ierr < 0) call CCTK_WARN(0, "problems with applying the chosen boundary condition") - end subroutine GRHydro_SelectPrimitiveBoundaries