B.4 Logical Class Code Listing

The main documentation of the Logical Class contains additional explanation of this code listing.

!
! Author: Michael L. Hall
!         P.O. Box 1663, MS-D413, LANL
!         Los Alamos, NM 87545
!         ph: 505-665-4312
!         email: Hall@LANL.gov
! 
! Created on: 1/11/99
! CVS Info:   $Id: logical.F90,v 7.8 2006/10/12 18:30:29 hall Exp $

module Caesar_Logical_Class

  ! Global use associations.

  use Caesar_Status_Class

  ! Start up with everything untyped and private.

  implicit none
  private

  ! Public procedures.

  public :: Initialize, Finalize, Valid_State, Valid_State_NP
  public :: ALL, ANY, COUNT, Operator(.InInterval.), Operator(.InSet.), &
            Operator(.NotInInterval.), Operator(.NotInSet.)

  REPLICATE_INTERFACE([Initialize], [Initialize_Logical])

  REPLICATE_INTERFACE([Finalize], [Finalize_Logical])

  REPLICATE_INTERFACE([Valid_State], [Valid_State_Logical_P])
  REPLICATE_INTERFACE([Valid_State_NP], [Valid_State_Logical_NP])

  interface ALL
    module procedure ALL_Scalar
  end interface

  interface ANY
    module procedure ANY_Scalar
  end interface

  interface COUNT
    module procedure COUNT_Scalar
  end interface

  define([OPERATOR_INTERFACE],[
    pushdef([PROCEDURE], [$1])
    pushdef([TYPE], [$2])
    pushdef([DIM], [$3])
    pushdef([PROCEDURE_TYPE_DIM], expand(PROCEDURE_TYPE_DIM))

    interface OPERATOR (.PROCEDURE.)
      module procedure PROCEDURE_TYPE_DIM
    end interface

    popdef([PROCEDURE])
    popdef([TYPE])
    popdef([DIM])
    popdef([PROCEDURE_TYPE_DIM])
  ])

  forloop([Dim],[0],[7],[
    fortext([Type],[Real Integer],[
      fortext([Proc],[InInterval NotInInterval],[
        OPERATOR_INTERFACE(Proc, Type, Dim)
      ])
    ])
  ])

  define([OPERATOR_INTERFACE],[
    pushdef([PROCEDURE], [$1])
    pushdef([TYPE], [$2])
    pushdef([PROCEDURE_TYPE], expand(PROCEDURE_TYPE))

    interface OPERATOR (.PROCEDURE.)
      module procedure PROCEDURE_TYPE
    end interface

    popdef([PROCEDURE])
    popdef([TYPE])
    popdef([PROCEDURE_TYPE])
  ])

  fortext([Type],[Real Integer Character],[
    fortext([Proc],[InSet NotInSet],[
      OPERATOR_INTERFACE(Proc, Type)
    ])
  ])

contains

The Logical_Class contains the following routines which are listed in separate sections:

* Initialize_Logical
* Finalize_Logical
* Valid_State_Logical
* ALL_Scalar
* ANY_Scalar
* COUNT_Scalar
* InInterval
* InSet
* NotInInterval
* NotInSet

end module Caesar_Logical_Class



Subsections
Michael L. Hall