RegridderFactory.F90 Source File


Files dependent on this one

sourcefile~~regridderfactory.f90~~AfferentGraph sourcefile~regridderfactory.f90 RegridderFactory.F90 sourcefile~esmfregridderfactory.f90 EsmfRegridderFactory.F90 sourcefile~esmfregridderfactory.f90->sourcefile~regridderfactory.f90 sourcefile~regridderfactoryvector.f90 RegridderFactoryVector.F90 sourcefile~regridderfactoryvector.f90->sourcefile~regridderfactory.f90 sourcefile~regriddermanager.f90 RegridderManager.F90 sourcefile~regriddermanager.f90->sourcefile~regridderfactory.f90 sourcefile~regriddermanager.f90->sourcefile~esmfregridderfactory.f90 sourcefile~regriddermanager.f90->sourcefile~regridderfactoryvector.f90 sourcefile~regridder_mgr.f90 regridder_mgr.F90 sourcefile~regridder_mgr.f90->sourcefile~regriddermanager.f90 sourcefile~regridaction.f90 RegridAction.F90 sourcefile~regridaction.f90->sourcefile~regridder_mgr.f90 sourcefile~test_regriddermanager.pf Test_RegridderManager.pf sourcefile~test_regriddermanager.pf->sourcefile~regridder_mgr.f90 sourcefile~test_routehandlemanager.pf Test_RouteHandleManager.pf sourcefile~test_routehandlemanager.pf->sourcefile~regridder_mgr.f90 sourcefile~fieldspec.f90~2 FieldSpec.F90 sourcefile~fieldspec.f90~2->sourcefile~regridaction.f90

Source Code

#include "MAPL_Generic.h"

module mapl3g_RegridderFactory
   implicit none
   private

   public :: RegridderFactory

   type, abstract :: RegridderFactory
   contains
      procedure(I_supports), deferred :: supports
      procedure(I_make_regridder_typesafe), deferred :: make_regridder_typesafe
      generic :: make_regridder => make_regridder_typesafe
   end type RegridderFactory

   abstract interface

      logical function I_supports(this, param)
         use mapl3g_RegridderParam
         import :: RegridderFactory
         class(RegridderFactory), intent(in) :: this
         class(RegridderParam), intent(in) :: param
      end function I_supports

      function I_make_regridder_typesafe(this, spec, rc) result(regriddr)
         use mapl3g_RegridderSpec
         use mapl3g_Regridder
         import :: RegridderFactory
         class(Regridder), allocatable :: regriddr
         class(RegridderFactory), intent(inout) :: this
         type(RegridderSpec), intent(in) :: spec
         integer, optional, intent(out) :: rc
      end function I_make_regridder_typesafe

   end interface

end module mapl3g_RegridderFactory