Report Typos and Errors    
Semi-Lagrangian Library
Modular library for kinetic and gyrokinetic simulations of plasmas in fusion energy devices.
sll_m_scalar_field_1d_base.F90
Go to the documentation of this file.
2 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 #include "sll_working_precision.h"
4 
5  implicit none
6 
7  public :: &
9 
10  private
11 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12 
13  ! Fundamental field type
14  type, abstract :: sll_c_scalar_field_1d_base
15  contains
16 ! procedure(function_get_mesh_1d), deferred, pass :: get_cartesian_mesh
17  procedure(function_evaluation_real_1d), deferred, pass :: value_at_point
18 ! procedure(function_evaluation_integer_1d), deferred, pass :: value_at_indices
19  procedure(function_evaluation_real_1d), deferred, pass :: derivative_value_at_point
20 ! procedure(derivative_evaluation_integer), deferred, pass :: &
21 ! derivative_value_at_indices
22  procedure(set_field_data_subroutine_1d), deferred, pass :: set_field_data
23  procedure(field_1d_message_pass), deferred, pass :: update_interpolation_coefficients
24 ! procedure(field_1d_file_output), deferred, pass :: write_to_file
25  procedure(field_1d_subroutine), deferred, pass :: delete
26 ! ! here we can continue with derivatives or whatever else that might
27  ! be desired.
29 
30 ! type sll_scalar_field_1d_base_ptr
31 ! type(sll_c_scalar_field_1d_base), pointer :: base
32 ! end type sll_scalar_field_1d_base_ptr
33 
34  abstract interface
35  subroutine set_field_data_subroutine_1d(field, values)
38  class(sll_c_scalar_field_1d_base), intent(inout) :: field
39  sll_real64, dimension(:), intent(in) :: values
40  end subroutine set_field_data_subroutine_1d
41  end interface
42 
43 !
44 ! abstract interface
45 ! function function_get_mesh_1d(field) result(res)
46 ! use sll_m_cartesian_meshes
47 ! import sll_c_scalar_field_1d_base
48 ! class(sll_c_scalar_field_1d_base), intent(in) :: field
49 ! type(sll_t_cartesian_mesh_1d), pointer :: res ! a implementer
50 ! end function function_get_mesh_1d
51 ! end interface
52 !
53 !
54  abstract interface
55  subroutine field_1d_message_pass(field)
57  class(sll_c_scalar_field_1d_base), intent(inout) :: field
58  end subroutine field_1d_message_pass
59  end interface
60 
61  abstract interface
62  function function_evaluation_real_1d(field, eta) result(res)
65  class(sll_c_scalar_field_1d_base), intent(inout) :: field
66  sll_real64, intent(in) :: eta
67  sll_real64 :: res
68  end function function_evaluation_real_1d
69  end interface
70 !
71 ! abstract interface
72 ! function function_evaluation_integer_1d( field, i ) result(res)
73 ! use sll_m_working_precision
74 ! import sll_c_scalar_field_1d_base
75 ! class(sll_c_scalar_field_1d_base), intent(inout) :: field
76 ! sll_int32, intent(in) :: i
77 ! sll_real64 :: res
78 ! end function function_evaluation_integer_1d
79 ! end interface
80 !
81 ! abstract interface
82 ! function derivative_evaluation_real( field, eta ) result(res)
83 ! use sll_m_working_precision
84 ! import sll_c_scalar_field_1d_base
85 ! class(sll_c_scalar_field_1d_base), intent(inout) :: field
86 ! sll_real64, intent(in) :: eta
87 ! sll_real64 :: res
88 ! end function derivative_evaluation_real
89 ! end interface
90 
91 ! abstract interface
92 ! function derivative_evaluation_integer( field, i) result(res)
93 ! use sll_m_working_precision
94 ! import sll_c_scalar_field_1d_base
95 ! class(sll_c_scalar_field_1d_base), intent(inout) :: field
96 ! sll_int32, intent(in) :: i
97 ! sll_real64 :: res
98 ! end function derivative_evaluation_integer
99 ! end interface
100 !
101 !
102 !
103 !! abstract interface
104 !! function return_integer( field ) result(res)
105 !! use sll_m_working_precision
106 !! import sll_c_scalar_field_1d_base
107 !! class(sll_c_scalar_field_1d_base), intent(in) :: field
108 !! sll_int32 :: res
109 !! end function return_integer
110 !! end interface
111 !
112 ! abstract interface
113 ! subroutine field_1d_file_output( field, tag )
114 ! use sll_m_working_precision
115 ! import sll_c_scalar_field_1d_base
116 ! class(sll_c_scalar_field_1d_base), intent(inout) :: field
117 ! sll_int32, intent(in) :: tag
118 ! end subroutine field_1d_file_output
119 ! end interface
120 !
121  abstract interface
122  subroutine field_1d_subroutine(field)
124  class(sll_c_scalar_field_1d_base), intent(inout) :: field
125  end subroutine field_1d_subroutine
126  end interface
127 !
Module to select the kind parameter.
    Report Typos and Errors