psmile_sel_grid_range.F90

Go to the documentation of this file.
00001 !-----------------------------------------------------------------------
00002 ! Copyright 2006-2010, NEC Europe Ltd., London, UK.
00003 ! All rights reserved. Use is subject to OASIS4 license terms.
00004 !-----------------------------------------------------------------------
00005 !BOP
00006 !
00007 ! !ROUTINE: PSMILe_Sel_grid_range
00008 !
00009 ! !INTERFACE:
00010 
00011       subroutine psmile_sel_grid_range (grid_id, dinter, inter, ierror)
00012 
00013 !
00014 ! !USES:
00015 !
00016       use PRISM_constants
00017 !
00018       use PSMILe, dummy_interface => PSMILe_Sel_grid_range
00019 
00020       implicit none
00021 !
00022 ! !INPUT PARAMETERS:
00023 !
00024       Integer,                  Intent (In)  :: grid_id
00025 
00026 !     Specifies the handle to the grid information.
00027 
00028       Real (PSMILe_float_kind), Intent (In)  :: dinter (2, ndim_3d)
00029 
00030 !     Specifies the intersection with grid "grid_id"
00031 !
00032 ! !OUTPUT PARAMETERS:
00033 !
00034       Integer,                  Intent (Out) :: inter (2, ndim_3d)
00035 
00036 !     Returns the sub-array of grid "grid_id" which contains "dinter"
00037 
00038       Integer,                  Intent (Out) :: ierror
00039 
00040 !     Returns the error code of PSMILe_Sel_grid_range;
00041 !             ierror = 0 : No error
00042 !             ierror > 0 : Severe error
00043 !
00044 ! !DEFINED PARAMETERS:
00045 !
00046      Integer, parameter            :: nc_reg = 2
00047 
00048 !    Number of corners for regular directions
00049 !
00050 ! !LOCAL VARIABLES
00051 !
00052       Type (Corner_Block), Pointer :: corner_pointer
00053 !
00054       integer, parameter           :: nerrp = 2
00055       integer                      :: ierrp (nerrp)
00056 !!
00057 ! !DESCRIPTION:
00058 !
00059 ! Subroutine "PSMILe_Sel_grid_range" computes the subarray of grid id
00060 ! "grid_id"  which contains the range "dinter".
00061 !
00062 !
00063 ! !REVISION HISTORY:
00064 !
00065 !   Date      Programmer   Description
00066 ! ----------  ----------   -----------
00067 ! 03.06.03    H. Ritzdorf  created
00068 !
00069 !EOP
00070 !----------------------------------------------------------------------
00071 !
00072 ! $Id: psmile_sel_grid_range.F90 2325 2010-04-21 15:00:07Z valcke $
00073 ! $Author: valcke $
00074 !
00075    Character(len=len_cvs_string), save :: mycvs = 
00076        '$Id: psmile_sel_grid_range.F90 2325 2010-04-21 15:00:07Z valcke $'
00077 !
00078 !----------------------------------------------------------------------
00079 
00080 #ifdef VERBOSE
00081       print *, trim(ch_id), ': PSMILe_Sel_grid_range: grid_id', grid_id
00082 
00083       call psmile_flushstd
00084 #endif /* VERBOSE */
00085 !
00086 !  Initialization
00087 !
00088       ierror = 0
00089 
00090       corner_pointer => Grids(grid_id)%corner_pointer
00091 !
00092 
00093       if (corner_pointer%corner_datatype == MPI_REAL) then
00094 
00095 !        ...  Real datatype
00096 
00097          call psmile_sel_grid_range_real (grid_id, dinter, inter, ierror)
00098 
00099       else if (corner_pointer%corner_datatype == MPI_DOUBLE_PRECISION) then
00100 
00101 !        ...  Double precision datatype
00102 
00103          call psmile_sel_grid_range_dble (grid_id, dinter, inter, ierror)
00104 
00105 #if defined ( PRISM_QUAD_TYPE )
00106       else if (corner_pointer%corner_datatype == MPI_REAL16) then
00107 
00108 !        ...  Quadruple precision datatype
00109 
00110          call psmile_sel_grid_range_dble (grid_id, dinter, inter, ierror)
00111 
00112 #endif
00113 
00114       else
00115 !
00116 !        Unknown data type
00117 !
00118          ierrp (1) = corner_pointer%corner_datatype
00119          ierror = PRISM_Error_Internal
00120          call psmile_error ( ierror, 'unsupported data type', &
00121                              ierrp, 1, __FILE__, __LINE__ )
00122       endif
00123 !
00124 !===> All done
00125 !
00126 #ifdef VERBOSE
00127       print *, trim(ch_id), ': PSMILe_Sel_grid_range eof: grid_id',&
00128                              grid_id, ', ierror =', ierror, '; inter  =', inter
00129 
00130       call psmile_flushstd
00131 #endif /* VERBOSE */
00132 !
00133       end subroutine PSMILe_Sel_grid_range

Generated on 18 Mar 2011 for Oasis4 by  doxygen 1.6.1