pde_equations Module

Module that defines a PDE equation. It is derived from the equation class and provides the routines that are common for all PDE equation systems while deferring implementation of the routines that are specific to a given PDE equation system.

The implementation is found in submodule_pde_equations_implementation.f90.


Uses

  • module~~pde_equations~~UsesGraph module~pde_equations pde_equations module~grid_function grid_function module~pde_equations->module~grid_function module~kinds kinds module~pde_equations->module~kinds module~equations equations module~pde_equations->module~equations module~grid_function->module~kinds module~element element module~grid_function->module~element module~equations->module~kinds module~element->module~kinds

Used by

  • module~~pde_equations~~UsedByGraph module~pde_equations pde_equations module~scalar_schw scalar_schw module~scalar_schw->module~pde_equations module~pde_equations_implementation pde_equations_implementation module~pde_equations_implementation->module~pde_equations proc~scal_schw_eff_init scal_schw_eff_init proc~scal_schw_eff_init->module~scalar_schw module~scalar_schw_implementation scalar_schw_implementation module~scalar_schw_implementation->module~scalar_schw program~test test program~test->module~scalar_schw module~self_force_observer self_force_observer program~test->module~self_force_observer module~self_force_observer->module~scalar_schw proc~scal_schw_save_globals_2 scal_schw_save_globals_2 proc~scal_schw_save_globals_2->module~self_force_observer module~self_force_observer_implementation self_force_observer_implementation module~self_force_observer_implementation->module~self_force_observer

Contents


Interfaces

interface

  • public module subroutine cpde_set_to_zero(this, dest)

    The interface for the PDE version of set_to_zero. This interface is consistent with eq_set_to_zero_interface.

    Arguments

    Type IntentOptional AttributesName
    class(cpde_equation), intent(inout) :: this

    The routine is called on this equation.

    integer(kind=ip), intent(in) :: dest

    Can be either -1 (RHS), 0 (main) or between 1 and ntmp (temporary).

interface

  • public module subroutine cpde_update_vars(this, source, dest, source2, scalar, scalar2)

    The interface for the PDE version of update_vars. This interface is consistent with eq_update_vars_interface.

    Arguments

    Type IntentOptional AttributesName
    class(cpde_equation), intent(inout), target:: this

    The routine is called on this equation.

    integer(kind=ip), intent(in) :: source

    The first source for the update. Can be either -1 (RHS), 0 (main) or between 1 and ntmp (temporary).

    integer(kind=ip), intent(in) :: dest

    The destination for the update. Can be either -1 (RHS), 0 (main) or between 1 and ntmp (temporary).

    integer(kind=ip), intent(in), optional :: source2

    The second source for the update. Can be either -1 (RHS), 0 (main) or between 1 and ntmp (temporary).

    real(kind=wp), intent(in), optional :: scalar

    The scalar multiplying the first source.

    real(kind=wp), intent(in), optional :: scalar2

    The scalar multiplying the second source.

interface

  • public module subroutine cpde_output(this)

    The interface for the PDE version of output. This interface is consistent with eq_output.

    Arguments

    Type IntentOptional AttributesName
    class(cpde_equation), intent(inout) :: this

    The routine is called on this equation.

interface

  • public module subroutine cpde_print_data(this)

    The interface for the PDE version of print_data. This interface is consistent with eq_print_data.

    Arguments

    Type IntentOptional AttributesName
    class(cpde_equation), intent(inout) :: this

    The routine is called on this equation.


Abstract Interfaces

abstract interface

  • public subroutine cpde_eq_init_interface(this)

    The interface for the PDE version of init. This interface is consistent with eq_init_interface.

    Arguments

    Type IntentOptional AttributesName
    class(cpde_equation), intent(inout), target:: this

    The equation that is being initialized.

abstract interface

  • public subroutine cpde_eq_rhs_interface(this)

    The interface for the PDE version of rhs. This interface is consistent with eq_rhs_interface.

    Arguments

    Type IntentOptional AttributesName
    class(cpde_equation), intent(inout) :: this

    The equation for which the RHS is calculated.

abstract interface

  • public subroutine cpde_eq_save_globals_1(this)

    The interface for the PDE version of save_globals_1. This interface is consistent with eq_save_globals_1.

    Arguments

    Type IntentOptional AttributesName
    class(cpde_equation), intent(inout) :: this

    The routine is called on this equation.

abstract interface

  • public subroutine cpde_eq_save_globals_2(this)

    The interface for the PDE version of save_globals_2. This interface is consistent with eq_save_globals_2.

    Arguments

    Type IntentOptional AttributesName
    class(cpde_equation), intent(inout) :: this

    The routine is called on this equation.

abstract interface

  • public subroutine cpde_eq_load_globals(this)

    The interface for the PDE version of load_globals. This interface is consistent with eq_load_globals.

    Arguments

    Type IntentOptional AttributesName
    class(cpde_equation), intent(inout) :: this

    The routine is called on this equation.


Derived Types

type, public, abstract, extends(equation) :: cpde_equation

A class derived from equation specific for PDE equations.

Components

TypeVisibility AttributesNameInitial
integer(kind=ip), public :: ntmp

The number of temporary storage variables to allocate.

character(len=:), public, allocatable:: ename

The name of the system of equations

integer(kind=ip), public :: nmodes

The number of spherical harmonic modes. Should be moved to the specific implementation of the equation as this class should not be limited to systems using spherical harmonic decomposition.

integer(kind=ip), public :: nvars =3

The number of variables per mode. Should probably be changed to be the total number of variables in order to make this independent of spherical harmonic decomposition. And the value should be set by the equation implementation.

type(cgf), public, dimension(:,:), allocatable:: eq_data

A 2d array of complex grid functions that contains the data variables for the equation system. Should probably be changed to a 1d array to make this independent of spherical harmonic decomposition.

type(cgf), public, dimension(:,:), allocatable:: eq_rhs_data

A 2d array of complex grid functions that contains the rhs variables for the equation system. Should probably be changed to a 1d array to make this independent of spherical harmonic decomposition.

type(cgf), public, dimension(:,:,:), allocatable:: eq_tmp_data

A 3d array of complex grid functions that contains the temporary variables needed by the time integrator. Should probably be changed to a 2d array to make this independent of spherical harmonic decomposition.

type(cgf_pointer), public, dimension(:,:,:), allocatable:: data_pointer

A 3d array of pointers to complex grid functions that points to the RHS variables (:,:,-1), the data variables (:,:,0) and the temporary variables (:,:,1:ntmp) for the equation system. Should probably be changed to a 2d array to make this independent of spherical harmonic decomposition.

Type-Bound Procedures

procedure(cpde_eq_init_interface), public, pass :: init

The init routine is deferred.

procedure(cpde_eq_rhs_interface), public, pass :: rhs

The rhs routine is deferred.

procedure, public :: set_to_zero => cpde_set_to_zero

The set_to_zero routine is provided by cpde_set_to_zero.

procedure, public :: update_vars => cpde_update_vars

The update_vars routine is provided by cpde_update_vars.

procedure(cpde_eq_save_globals_1), public, pass :: save_globals_1

The save_globals_1 routine is deferred.

procedure(cpde_eq_save_globals_2), public, pass :: save_globals_2

The save_globals_2 routine is deferred.

procedure(cpde_eq_load_globals), public, pass :: load_globals

The load_globals routine is deferred.

procedure, public :: output => cpde_output

The output routine is provided by cpde_output.

procedure, public :: print_data => cpde_print_data

The print_data routine is provided by cpde_print_data.