differentiable_field_interface.f90 Source File


This file depends on

sourcefile~~differentiable_field_interface.f90~~EfferentGraph sourcefile~differentiable_field_interface.f90 differentiable_field_interface.f90 sourcefile~grid_interface.f90 grid_interface.F90 sourcefile~differentiable_field_interface.f90->sourcefile~grid_interface.f90 sourcefile~object_interface.f90 object_interface.f90 sourcefile~grid_interface.f90->sourcefile~object_interface.f90 sourcefile~units_interface.f90 units_interface.F90 sourcefile~grid_interface.f90->sourcefile~units_interface.f90 sourcefile~units_interface.f90->sourcefile~object_interface.f90

Files dependent on this one

sourcefile~~differentiable_field_interface.f90~~AfferentGraph sourcefile~differentiable_field_interface.f90 differentiable_field_interface.f90 sourcefile~ellipsoidal_field_interface.f90 ellipsoidal_field_interface.f90 sourcefile~ellipsoidal_field_interface.f90->sourcefile~differentiable_field_interface.f90 sourcefile~cartesian_grid_interface.f90 cartesian_grid_interface.f90 sourcefile~cartesian_grid_interface.f90->sourcefile~differentiable_field_interface.f90 sourcefile~structured_grid_interface.f90 structured_grid_interface.F90 sourcefile~cartesian_grid_interface.f90->sourcefile~structured_grid_interface.f90 sourcefile~problem_discretization_interface.f90 problem_discretization_interface.F90 sourcefile~problem_discretization_interface.f90->sourcefile~differentiable_field_interface.f90 sourcefile~problem_discretization_interface.f90->sourcefile~structured_grid_interface.f90 sourcefile~structured_grid_interface.f90->sourcefile~differentiable_field_interface.f90 sourcefile~cylindrical_grid_interface.f90 cylindrical_grid_interface.f90 sourcefile~cylindrical_grid_interface.f90->sourcefile~differentiable_field_interface.f90 sourcefile~cylindrical_grid_interface.f90->sourcefile~structured_grid_interface.f90 sourcefile~spherical_grid_interface.f90 spherical_grid_interface.f90 sourcefile~spherical_grid_interface.f90->sourcefile~structured_grid_interface.f90 sourcefile~problem_discretization_implementation.f90 problem_discretization_implementation.F90 sourcefile~problem_discretization_implementation.f90->sourcefile~cartesian_grid_interface.f90 sourcefile~problem_discretization_implementation.f90->sourcefile~problem_discretization_interface.f90 sourcefile~problem_discretization_implementation.f90->sourcefile~cylindrical_grid_interface.f90 sourcefile~problem_discretization_implementation.f90->sourcefile~spherical_grid_interface.f90 sourcefile~structured_grid_implementation.f90 structured_grid_implementation.F90 sourcefile~structured_grid_implementation.f90->sourcefile~structured_grid_interface.f90 sourcefile~cylindrical_grid_implementation.f90 cylindrical_grid_implementation.f90 sourcefile~cylindrical_grid_implementation.f90->sourcefile~cylindrical_grid_interface.f90 sourcefile~cartesian_grid_implementation.f90 cartesian_grid_implementation.f90 sourcefile~cartesian_grid_implementation.f90->sourcefile~cartesian_grid_interface.f90 sourcefile~curvilinear_grid_interface.f90 curvilinear_grid_interface.f90 sourcefile~curvilinear_grid_interface.f90->sourcefile~structured_grid_interface.f90 sourcefile~ellipsoidal_field_implementation.f90 ellipsoidal_field_implementation.f90 sourcefile~ellipsoidal_field_implementation.f90->sourcefile~ellipsoidal_field_interface.f90 sourcefile~ellipsoidal_field_implementation.f90->sourcefile~cartesian_grid_interface.f90 sourcefile~spherical_grid_implementation.f90 spherical_grid_implementation.f90 sourcefile~spherical_grid_implementation.f90->sourcefile~spherical_grid_interface.f90

Contents


Source Code

!
!     (c) 2019-2020 Guide Star Engineering, LLC
!     This Software was developed for the US Nuclear Regulatory Commission (US NRC) under contract
!     "Multi-Dimensional Physics Implementation into Fuel Analysis under Steady-state and Transients (FAST)",
!     contract # NRC-HQ-60-17-C-0007
!
module differentiable_field_interface
  !! author: Damian Rouson
  !! date: 12/19/2019
  !!
  !! A differentiable field abstraction, deferring function evaluation and differential operator implementations to child classes
  use grid_interface, only : grid
  implicit none

  private
  public :: differentiable_field

  type, abstract :: differentiable_field
  contains
    procedure(field_interface), deferred :: evaluate
    procedure(field_interface), deferred :: laplacian
  end type

  abstract interface
    function field_interface(this, grid_points) result(f)
      !! Compute function values sampled at the provided locations
      import differentiable_field, grid
      implicit none
      class(differentiable_field), intent(in)  :: this
      class(grid), intent(in)  :: grid_points
      class(grid), allocatable :: f
    end function
  end interface

end module differentiable_field_interface