General Operations

From LIBISIS
Jump to navigation Jump to search

These are generic subroutines which should be valid for every class


IXFcreate

IXFset

IXFcheck

IXFget

IXFget_alloc

IXFget_ptr

IXFdestroy

IXFcopy

Arithmetic Operations

These are specific subroutines which are valid on certain classes only

BinaryOperations

IXFplus

This is a generic interface to the IXFplus_class method.

This subroutine will add together two objects, an object to a scalar array of the same dimensionality (ie a 2d array to an IXTdataset_2d object) or an object to a scalar.

In the special case of an IXTdataset_2d object, it will add an array of IXTdataset_1d objects.

F90 syntax

use IXMclass
type(IXTclass)::class1,class2,result
real(dp)::scalar
type(IXTstatus)::status
:
call IXFplus(result,class1,class2,status)
call IXFplus(result,class1,scalar,status)
call IXFplus(result,scalar,class1,status)


For example with class=dataset_2d where w2,w2 are appropriately filled IXTdataset_2d objects and arrayd1d is an appropriately filled array of IXTdataset_1d objects.

use IXMdataset_2d 
use IXMdataset_1d
type(IXTdataset_2d):: w1,w2, wres
type(IXTdataset_1d):: arrayd1d(:)
real(dp)::scalar,scalar2d(:,:)
type(IXTstatus)::status
!using generic interface
! types/types and types/scalars
call IXFplus(wres,w1,w2,status) ! wres=w1+w2
call IXFplus(wres,scalar,w1,status) ! wres=scalar+w1
call IXFplus(wres,w1,scalar,status) ! wres=w1+scalar
! types/arrays
call IXFplus(wres,scalar2d,w1,status) ! wres=scalar2d+w1
call IXFplus(wres,w1,scalar2d,status) ! wres=w1+scalar2d
! types/arrays of types
call IXFplus(wres,arrayd1d,w2,status) ! wres=w2+arrayd1d
call IXFplus(wres,w2,arrayd1d,status) ! wres=arrayd1d+w2 

!using class specific method

! types/types and types/scalars
call IXFplus_dataset_2d(wres,w1,w2,status) ! wres=w1+w2
call IXFplus_dataset_2d(wres,scalar,w1,status) ! wres=scalar+w1
call IXFplus_dataset_2d(wres,w1,scalar,status) ! wres=w1+scalar
! types/arrays
call IXFplus_dataset_2d(wres,scalar2d,w1,status) ! wres=scalar2d+w1
call IXFplus_dataset_2d(wres,w1,scalar2d,status) ! wres=w1+scalar2d
! types/arrays of types
call IXFplus_dataset_2d(wres,arrayd1d,w2,status) ! wres=w2+arrayd1d
call IXFplus_dataset_2d(wres,w2,arrayd1d,status) ! wres=arrayd1d+w2 

IXFminus

This is a generic interface to the IXFminus_class method.

This subroutine will subtract two objects, an object from a scalar array of the same dimensionality (ie a 2d array to an IXTdataset_2d object) or an object from a scalar.

In the special case of an IXTdataset_2d object, it will subtract an array of IXTdataset_1d objects.

F90 syntax

use IXMclass
type(IXTclass)::class1,class2,result
real(dp)::scalar
type(IXTstatus)::status
:
call IXFminus(result,class1,class2,status)
call IXFminus(result,class1,scalar,status)
call IXFminus(result,scalar,class1,status)


For example with class=dataset_2d where w2,w2 are appropriately filled IXTdataset_2d objects and arrayd1d is an appropriately filled array of IXTdataset_1d objects.

use IXMdataset_2d
use IXMdataset_1d
type(IXTdataset_2d):: w1,w2, wres
type(IXTdataset_1d):: arrayd1d(:)
real(dp)::scalar,scalar2d(:,:)
type(IXTstatus)::status
:
!using generic interface
! types/types and types/scalars
call IXFminus(wres,w1,w2,status) ! wres=w1-w2
call IXFminus(wres,scalar,w1,status) ! wres=scalar-w1
call IXFminus(wres,w1,scalar,status) ! wres=w1-scalar
! types/arrays
call IXFminus(wres,scalar2d,w1,status) ! wres=scalar2d-w1
call IXFminus(wres,w1,scalar2d,status) ! wres=w1-scalar2d
! types/arrays of types
call IXFminus(wres,arrayd1d,w2,status) ! wres=w2-arrayd1d
call IXFminus(wres,w2,arrayd1d,status) ! wres=arrayd1d-w2 

!using class specific method
! types/types and types/scalars
call IXFminus_dataset_2d(wres,w1,w2,status) ! wres=w1-w2
call IXFminus_dataset_2d(wres,scalar,w1,status) ! wres=scalar-w1
call IXFminus_dataset_2d(wres,w1,scalar,status) ! wres=w1-scalar
! types/arrays
call IXFminus_dataset_2d(wres,scalar2d,w1,status) ! wres=scalar2d-w1
call IXFminus_dataset_2d(wres,w1,scalar2d,status) ! wres=w1-scalar2d
! types/arrays of types
call IXFminus_dataset_2d(wres,arrayd1d,w2,status) ! wres=w2-arrayd1d
call IXFminus_dataset_2d(wres,w2,arrayd1d,status) ! wres=arrayd1d-w2 


IXFtimes

This is a generic interface to the IXFtimes_class method.

This subroutine will multiply together two objects, an object with a scalar array of the same dimensionality (ie a 2d array with an IXTdataset_2d object) or an object with a scalar.

In the special case of an IXTdataset_2d object, it will multiply an array of IXTdataset_1d objects.

F90 syntax

use IXMclass
type(IXTclass)::class1,class2,result
real(dp)::scalar
type(IXTstatus)::status
:
call IXFtimes(result,class1,class2,status)
call IXFtimes(result,class1,scalar,status)
call IXFtimes(result,scalar,class1,status)


For example with class=dataset_2d where w2,w2 are appropriately filled IXTdataset_2d objects and arrayd1d is an appropriately filled array of IXTdataset_1d objects.


use IXMdataset_2d 
use IXMdataset_1d
type(IXTdataset_2d):: w1,w2, wres
type(IXTdataset_1d):: arrayd1d(:)
real(dp)::scalar,scalar2d(:,:)
type(IXTstatus)::status
:
!using generic interface
! types/types and types/scalars
call IXFtimes(wres,w1,w2,status) ! wres=w1*w2
call IXFtimes(wres,scalar,w1,status) ! wres=scalar*w1
call IXFtimes(wres,w1,scalar,status) ! wres=w1*scalar
! types/arrays
call IXFtimes(wres,scalar2d,w1,status) ! wres=scalar2d*w1
call IXFtimes(wres,w1,scalar2d,status) ! wres=w1*scalar2d
! types/arrays of types
call IXFtimes(wres,arrayd1d,w2,status) ! wres=w2*arrayd1d
call IXFtimes(wres,w2,arrayd1d,status) ! wres=arrayd1d*w2 

!using class specific method
! types/types and types/scalars
call IXFtimes_dataset_2d(wres,w1,w2,status) ! wres=w1*w2
call IXFtimes_dataset_2d(wres,scalar,w1,status) ! wres=scalar*w1
call IXFtimes_dataset_2d(wres,w1,scalar,status) ! wres=w1*scalar
! types/arrays
call IXFtimes_dataset_2d(wres,scalar2d,w1,status) ! wres=scalar2d*w1
call IXFtimes_dataset_2d(wres,w1,scalar2d,status) ! wres=w1*scalar2d
! types/arrays of types
call IXFtimes_dataset_2d(wres,arrayd1d,w2,status) ! wres=w2*arrayd1d
call IXFtimes_dataset_2d(wres,w2,arrayd1d,status) ! wres=arrayd1d*w2 


IXFdivide

This is a generic interface to the IXFdivide_class method.

This subroutine will divide one objects by another, an object by a scalar array of the same dimensionality (ie a 2d array by an IXTdataset_2d object) or an object by a scalar.

In the special case of an IXTdataset_2d object, it will divide an array of IXTdataset_1d objects.

F90 syntax


use IXMclass
type(IXTclass)::class1,class2,result
real(dp)::scalar
type(IXTstatus)::status
:
call IXFdivide(result,class1,class2,status)
call IXFdivide(result,class1,scalar,status)
call IXFdivide(result,scalar,class1,status)

For example with class=dataset_2d where w2,w2 are appropriately filled IXTdataset_2d objects and arrayd1d is an appropriately filled array of IXTdataset_1d objects.

use IXMdataset_2d 
use IXMdataset_1d
type(IXTdataset_2d):: w1,w2, wres
type(IXTdataset_1d):: arrayd1d(:)
real(dp)::scalar,scalar2d(:,:)
type(IXTstatus)::status
:
!using generic interface
! types/types and types/scalars
call IXFdivide(wres,w1,w2,status) ! wres=w1/w2
call IXFdivide(wres,scalar,w1,status) ! wres=scalar/w1
call IXFdivide(wres,w1,scalar,status) ! wres=w1/scalar
! types/arrays
call IXFdivide(wres,scalar2d,w1,status) ! wres=scalar2d/w1
call IXFdivide(wres,w1,scalar2d,status) ! wres=w1/scalar2d
! types/arrays of types
call IXFdivide(wres,arrayd1d,w2,status) ! wres=w2/arrayd1d
call IXFdivide(wres,w2,arrayd1d,status) ! wres=arrayd1d/w2 

!using class specific method
! types/types and types/scalars
call IXFdivide_dataset_2d(wres,w1,w2,status) ! wres=w1/w2
call IXFdivide_dataset_2d(wres,scalar,w1,status) ! wres=scalar/w1
call IXFdivide_dataset_2d(wres,w1,scalar,status) ! wres=w1/scalar
! types/arrays
call IXFdivide_dataset_2d(wres,scalar2d,w1,status) ! wres=scalar2d/w1
call IXFdivide_dataset_2d(wres,w1,scalar2d,status) ! wres=w1/scalar2d
! types/arrays of types
call IXFdivide_dataset_2d(wres,arrayd1d,w2,status) ! wres=w2/arrayd1d
call IXFdivide_dataset_2d(wres,w2,arrayd1d,status) ! wres=arrayd1d/w2 


IXFpower

This is a generic interface to the IXFpower_class method.


This subroutine will raise one object to the power of another object or an object to the power of a scalar.


F90 syntax

use IXMclass
type(IXTclass)::class1,class2,result
real(dp)::scalar
type(IXTstatus)::status
:
call IXFpower(result,class1,class2,status)
call IXFpower(result,class1,scalar,status)
call IXFpower(result,scalar,class1,status)
For example with class=dataset_2d where w2,w2 are appropriately filled IXTdataset_2d objects 
use IXMdataset_2d
type(IXTdataset_2d):: w1,w2, wres
real(dp)::scalar
type(IXTstatus)::status
:

!using generic interface

! types/types and types/scalars
call IXFpower(wres,w1,w2,status) ! wres=w1^w2
call IXFpower(wres,scalar,w1,status) ! wres=scalar^w1
call IXFpower(wres,w1,scalar,status) ! wres=w1^scalar

!using class specific method

! types/types and types/scalars
call IXFpower_dataset_2d(wres,w1,w2,status) ! wres=w1^w2
call IXFpower_dataset_2d(wres,scalar,w1,status) ! wres=scalar^w1
call IXFpower_dataset_2d(wres,w1,scalar,status) ! wres=w1^scalar 

UnaryOperations

There are eight different unary operations which can be performed on an object

The general calling syntax of the subroutine is (see below for further details):

call IXFoperation_class(result, object, status)

Each of these subroutines can also be called through the Unary Operations Interface.

Operations:

  • log - takes the natural logarithm of an object
  • exp - takes the exponential of an object
  • sin - takes the sine of an object
  • cos - takes the cosine of an object
  • tan - takes the tangent of an object
  • sinh - takes the hyperbolic sine of an object
  • cosh - takes the hyperbolic cosine of an object
  • tanh - takes the hyperbolic tangent of an object


Classes for which operations are valid:


F90 syntax

use IXMclass
type(IXTclass):: object, result
type(IXTstatus)::status
call IXFoperation_class(result,object,status)

For example with operation=sinh class=dataset_1d

use IXMdataset_1d

type(IXTdataset_1d):: w1, wres
type(IXTstatus)::status

call IXFsinh_dataset_1d(wres,w1,status)