psmile.F90

Go to the documentation of this file.
00001 ! -----------------  PRISM module file psmile.F90 ---------------
00002 !
00003 ! $Id: psmile.F90 3023 2011-03-17 10:21:20Z hanke $
00004 ! $Author: hanke $
00005 !
00006 !-----------------------------------------------------------------------
00007 ! Copyright 2006-2010, CERFACS, Toulouse, France.
00008 ! Copyright 2006-2010, SGI Germany, Munich, Germany.
00009 ! Copyright 2006-2010, NEC Europe Ltd., London, UK.
00010 ! All rights reserved. Use is subject to OASIS4 license terms.
00011 !-----------------------------------------------------------------------
00012 !BOP
00013 !
00014 ! !MODULE: PSMILe
00015 !
00016       Module PSMILe
00017 !
00018 ! !USES:
00019 !
00020 !!    use MPI
00021       Use PSMILe_Common
00022       Use PSMILe_SMIOC, only : PSMILe_file_struct
00023       Use psmile_grid_reduced_gauss, only : reduced_gauss_grid_data
00024       Use PRISM_Constants, only : PRISM_Time_Struct
00025 #ifdef __PSMILE_WITH_IO
00026       Use mpp_mod_oa
00027       Use mpp_domains_mod_oa
00028       Use mpp_io_mod_oa
00029 #endif
00030 
00031 !
00032 ! !DESCRIPTION:
00033 !
00034 ! Derived types, global variables and interface used only by PSMILe routines
00035 !
00036 ! !REVISION HISTORY:
00037 !
00038 !   Date      Programmer   Description
00039 ! ----------  ----------   -----------
00040 ! 01.12.03    H. Ritzdorf  created
00041 ! 06.02.09    J. Ghattas   extracted from previous psmile.F90
00042 !
00043 !EOP
00044 ! -----------------------------------------------------------------------
00045 
00046       Implicit None
00047 !
00048 ! -----------------------------------------------------------------------
00049 ! Type definitions
00050 ! -----------------------------------------------------------------------
00051 
00052 ! =======================================================================
00053 !
00054 !
00055 ! Component definition
00056 !
00057 ! status         : Status of the component information
00058 !                  (see PSMILe statuses above)
00059 !
00060 ! comp_name      : Component name
00061 ! global_comp_id : Global Id of the component
00062 !                  Used to communicate with the coupler and
00063 !                  used in PRISM_Enddef.
00064 ! n_grids        : Number of grids stored for the component
00065 ! comm_user      : Communicator returned for components in user applications
00066 ! comm             PSMILe internal communicator over the processes of
00067 !                  the component.
00068 ! act_comm         PSMILe internal communicator over the processes of
00069 !                  the active components.
00070 ! rank           : Rank of current process in communicator "comm"
00071 ! size           : Size of communicator "comm"
00072 !
00073       Type Component
00074 
00075          Integer                 :: global_comp_id
00076          Integer                 :: status
00077          Integer                 :: n_grids
00078          Integer                 :: comm_user
00079          Integer                 :: comm
00080          Integer                 :: act_comm
00081          Integer                 :: comm_halo
00082          Integer                 :: rank
00083          Integer                 :: size
00084 
00085          Character(len=max_name) :: comp_name
00086       End Type Component
00087 
00088 ! =======================================================================
00089 !
00090 ! Definition of Corners:
00091 !
00092 ! nbr_corners : Number of corners needed to define a control volume
00093 !
00094 ! shape       : Describing the shape of data arrays
00095 !
00096 ! corners     : Coordinates of corners of control volumes
00097 !
00098       Type Corner_Block
00099 
00100          Integer                   :: nbr_corners
00101 
00102          Integer                   :: corner_datatype
00103 
00104          Integer                   :: corner_shape (2, ndim_3d)
00105 
00106          Integer,          Pointer :: pole_array (:)
00107 
00108          Type (real_vector)        :: corners_real (ndim_3d)
00109          Type (dble_vector)        :: corners_dble (ndim_3d)
00110 #if defined ( PRISM_QUAD_TYPE )
00111          Type (quad_vector)        :: corners_quad (ndim_3d)
00112 #endif
00113 
00114       End Type Corner_Block
00115 
00116 ! =======================================================================
00117 !
00118 ! Definition of Coordinate Points:
00119 !
00120       Type Coords_Block
00121 
00122          Integer                   :: coords_datatype
00123 
00124          Integer                   :: actual_shape (2, ndim_3d)
00125          Integer                   :: coords_shape (2, ndim_3d)
00126 
00127          Type (real_vector)        :: coords_real (ndim_3d)
00128          Type (dble_vector)        :: coords_dble (ndim_3d)
00129 #if defined ( PRISM_QUAD_TYPE )
00130          Type (quad_vector)        :: coords_quad (ndim_3d)
00131 #endif
00132       End Type Coords_Block
00133 
00134 ! =======================================================================
00135 !
00136 !
00137 ! Derived type for Subgrids:
00138 !
00139       Type Subgrid_Block
00140 
00141          Character (len=max_name)  :: short_name  ! from subgrid name
00142          Character (len=max_name)  :: long_name
00143 !        Character (len=max_name)  :: units       ! probably not needed
00144 
00145          Integer                   :: nbr_subgrids
00146 
00147          Integer                   :: subgrid_datatype
00148 
00149          Integer                   :: subgrid_shape (2, max_dim)
00150 
00151          Real,             Pointer :: subgrid_real (:)
00152 
00153          Double Precision, Pointer :: subgrid_double (:)
00154 
00155 #if defined ( PRISM_QUAD_TYPE )
00156          Real (kind=PRISM_QUAD_TYPE), Pointer :: subgrid_quad (:)
00157 #endif
00158       End Type Subgrid_Block
00159 
00160 ! =======================================================================
00161 !
00162 !
00163 ! Derived type for vector grid points:
00164 !
00165       Type Vector_Block
00166 
00167          Character (len=max_name)  :: short_name
00168          Character (len=max_name)  :: long_name
00169 
00170          Integer                   :: array_of_point_ids (3)
00171       End Type Vector_Block
00172 
00173 ! =======================================================================
00174 !
00175 !
00176 ! Derived types for halo grid points:
00177 !
00178       Type Halo_Block
00179 
00180          Logical                   :: halo_local
00181 
00182          Integer                   :: halo_shape(2,ndim_3d)
00183 
00184          Type (real_vector)        :: halo_real (ndim_3d)
00185          Type (dble_vector)        :: halo_dble (ndim_3d)
00186 #if defined ( PRISM_QUAD_TYPE )
00187          Type (quad_vector)        :: halo_quad (ndim_3d)
00188 #endif
00189       End Type Halo_Block
00190 
00191       Type Halo_info
00192 
00193          Integer                   :: local_rank
00194          Integer                   :: local_block
00195          Integer                   :: remote_rank
00196          Integer                   :: remote_grid_id
00197          Integer                   :: remote_block
00198          Integer                   :: halo_size
00199          Integer                   :: send_range(2,ndim_3d)
00200          Integer                   :: global_range(2,ndim_3d)
00201 
00202       End Type Halo_info
00203 
00204 ! =======================================================================
00205 !
00206 !
00207 ! Derived type Grid:
00208 !
00209 ! global_grid_id  : Global grid id (passed by Driver)
00210 ! status          : Status of the grid information
00211 !                   (see PSMILe statuses above)
00212 !
00213 ! comp_id         : Component Id
00214 !
00215 ! grid_type       : PRISM integer named parameter describing the type of grid
00216 ! grid_name       : Grid name
00217 !
00218 ! grid_shape      : valid range of the grid
00219 !
00220 ! size            : Number of local points in the grid
00221 !                   (i.e. the shape for blocks)
00222 ! global_size     : global size in each dimension
00223 ! partition       : offset of shape relative to the global index space
00224 !                   (if it exists)
00225 ! star            : (Local) 'Connectivity' of method points of
00226 !                   GaussReduced Grid with
00227 !                   star (i, 1) = Index of northern neighbour of "i"-th point
00228 !                   star (i, 2) = Index of southern neighbour of "i"-th point
00229 !                   star (i, 3) = Index of latitude (j-row)   of "i"-th point
00230 ! g_irange        : (Local) Start/end index of latitude in
00231 !                   GaussReduced Grid with
00232 !                   g_irange (j, 1) = (Local) Start index of "j"-th latitude
00233 !                   g_irange (j, 2) = (Local) End   index of "j"-th latitude
00234 !                   Dimension: g_irange (nbr_lats, 2)
00235 !                   with nbr_lats = size(grid_pointer%extent(:,1))
00236 !                                 = (Local) Number of Latitudes
00237 !
00238 ! corner_pointer  : Pointer to the specific data of the corners
00239 ! gcorner_pointer : Pointer to the auxillary gauss grid corners
00240 ! used_for_coupling : Flag indicating whether the grid is used for coupling
00241 !
00242 ! pole_covered    : indicated through SMIOC, either true (psmile_true = 1)
00243 !                                               or false (psmile_false = 0)
00244 !
00245 ! smioc_index     : Link to the data structure comming form SMIOC
00246 !
00247 ! mg_infos        : Info's to grids generated for search of
00248 !                          neighbouring cells/points.
00249 ! nlev            : Number of MG levels generated.
00250 ! ijk0            : Index of the logical grid cell (0,0,0) of midp, ...
00251 !
00252 ! cyclic          : Does the block have cyclic coordinates
00253 !                        in the corresponding direction ?
00254 ! periodic        : Does the (partitioned) grid have periodic coordinates
00255 !                        in the corresponding direction ?
00256 ! len_periodic    : (Global index) Length of periodic direction
00257 !                   len_periodic (i) = 0 if not periodic in this direction
00258 ! nbr_halo_segments : number of differnt halo sections, size of derived type halo
00259 !
00260 ! halo            : Derived type containing the halo info for the Grid
00261 !
00262 ! assoc_grid_id   : grid_id of associated grid used in User-defined interpolations
00263 !                   For geographical field, assoc_grid_id is the id of gridless grid
00264 !                   In associated Gridless grid, assoc_grid_id is PRISM_Undefined
00265 !
00266       Type Grid
00267 
00268          Integer                       :: global_grid_id
00269          Integer                       :: status
00270          Integer                       :: comp_id
00271          Integer                       :: grid_type
00272          Integer                       :: grid_shape (2, ndim_3d)
00273          Integer                       :: grid_structure
00274          Integer                       :: n_dim
00275          Integer (kind=int64)          :: size
00276          Integer (kind=int64)          :: global_size(ndim_3d)
00277          Logical                       :: used_for_coupling
00278          Logical                       :: used_for_io
00279          Logical                       :: pole_covered
00280          Integer                       :: smioc_index
00281          Character(len=max_name)       :: grid_name
00282          Type (Corner_Block), Pointer  :: corner_pointer
00283 
00284          Type (Enddef_mg), Pointer     :: mg_infos (:)
00285          Integer                       :: nlev
00286          Integer                       :: ijk0 (ndim_3d)
00287 
00288          Integer                       :: periodic(ndim_3d)
00289          Logical                       :: cyclic(ndim_3d)
00290          Integer                       :: len_periodic (ndim_3d)
00291 
00292          Integer                       :: nbr_halo_segments
00293          Type (Halo_info), Pointer     :: halo (:)
00294          !
00295          ! Specific for Gauss-reduced grids
00296          !
00297          type (reduced_gauss_grid_data):: reduced_gauss_data
00298          Integer                       :: nbr_latitudes
00299          Integer, Pointer              :: nbr_points_per_lat(:)
00300          Integer, Pointer              :: partition(:,:)
00301          Integer, Pointer              :: extent(:,:)
00302          Type (Corner_Block), Pointer  :: gcorner_pointer
00303          Integer, Pointer              :: star(:,:)
00304          Integer, Pointer              :: face(:,:)
00305          Integer, Pointer              :: global_beg(:)
00306          Integer, Pointer              :: global_end(:)
00307          Integer, Pointer              :: g2l(:,:)
00308          Integer, Pointer              :: l2g(:,:)
00309          Integer, Pointer              :: g_irange(:,:)
00310 
00311          Integer, Pointer              :: remote_index(:)
00312          Integer, Pointer              :: send_list(:)
00313          Integer, Pointer              :: recv_list(:)
00314          Type(integer_vector), Pointer :: get_list(:)
00315          Type(integer_vector), Pointer :: put_list(:)
00316          Type(integer_vector), Pointer :: put_loc_list(:)
00317          !
00318          ! Userdef interpolation : associated grid_id
00319          !
00320          Integer                       :: assoc_grid_id
00321 
00322       End Type Grid
00323 
00324 ! =======================================================================
00325 !
00326 !
00327 ! Derived type Method:
00328 !
00329 ! status                  : Status of the method information
00330 !                           (see PSMILe statuses above)
00331 !
00332 ! grid_id                 : Grid Id
00333 !
00334 ! used_for_coupling : Flag indicating whether the method is used for coupling
00335 !
00336 !
00337 ! previous_method_in_grid : points to the number of the previously
00338 !                           defined method in this grid
00339 !
00340 ! next_method_in_grid     : points to the number of the next
00341 !                           defined method in this grid
00342 !
00343 ! method_type             : PSMILe named integer to identify the method
00344 !                           points, subgrid or vector.
00345 !
00346 ! coords_pointer  : Pointer to the specific data of the coordinates
00347 !
00348 ! subgrid_pointer : Pointer to the specific data of the subgrids
00349 !
00350 ! vector_pointer  : Pointer to the specific data of the vector coordinate Ids
00351 !
00352 ! n_send_info_direct  : Number of pieces of send information for direct
00353 !                       sends to another component of an application process.
00354 ! n_send_info_coupler : Number of pieces of send information for transfers to
00355 !                       a coupler process.
00356 ! n_recv_info_direct  : Number of pieces of receive information for direct
00357 !                       receives from another component of an
00358 !                       application process.
00359 ! n_recv_info_coupler : Number of pieces of receive information for transfers
00360 !                       from a coupler process.
00361 ! n_send_info_appl    : Number of pieces of send information for transfers
00362 !                       to an application process (global search)
00363 !
00364 ! send_infos_direct  : Send    information for direct transfer to an
00365 !                      application process
00366 ! recv_infos_direct  : Receive information for direct transfer from an
00367 !                      application process
00368 ! send_infos_coupler : Send    information for  transfer to   a coupler process.
00369 ! recv_infos_coupler : Receive information for  transfer from a coupler process.
00370 !
00371 ! gauss2_dble/real   : Container for remote coordinates
00372 !
00373       Type Method
00374 
00375          Character (len=max_name)      :: point_name
00376 
00377          Integer                       :: status
00378          Integer                       :: grid_id
00379          Integer                       :: previous_method_in_grid
00380          Integer                       :: next_method_in_grid
00381          Integer                       :: method_type
00382 
00383          Integer                       :: size
00384          Logical                       :: used_for_coupling
00385 
00386          Integer                       :: n_send_info_direct
00387          Integer                       :: n_send_info_coupler
00388          Integer                       :: n_recv_info_direct
00389          Integer                       :: n_recv_info_coupler
00390          Integer                       :: n_send_info_appl
00391 
00392          Integer                       :: n_alloc_send_direct
00393          Integer                       :: n_alloc_send_coupler
00394          Integer                       :: n_alloc_recv_direct
00395          Integer                       :: n_alloc_recv_coupler
00396          Integer                       :: n_alloc_send_appl
00397 
00398          Type (Coords_Block),  Pointer :: coords_pointer
00399          Type (Subgrid_Block), Pointer :: subgrid_pointer
00400          Type (Vector_Block), Pointer  :: vector_pointer
00401          Type (Halo_Block), Pointer    :: halo_pointer (:)
00402 
00403          Type (Send_information), Pointer :: send_infos_direct  (:)
00404          Type (Send_information), Pointer :: send_infos_coupler (:)
00405          Type (Recv_information), Pointer :: recv_infos_direct  (:)
00406          Type (Recv_information), Pointer :: recv_infos_coupler (:)
00407          Type (Send_appl_information), Pointer :: send_infos_appl (:)
00408 
00409          Type (real_vector)            :: gauss2_real(2)
00410          Type (dble_vector)            :: gauss2_dble(2)
00411 #if defined ( PRISM_QUAD_TYPE )
00412          Type (quad_vector)            :: gauss2_quad(2)
00413 #endif
00414 
00415       End Type Method
00416 ! =======================================================================
00417 !
00418 ! Derived type Mask:
00419 !
00420 ! status                  : Status of the method information
00421 !                           (see PSMILe statuses above)
00422 !
00423 ! mask_shape              : actual range of the mask array
00424 !
00425       Type Mask
00426 
00427          Integer          :: status
00428          Integer          :: grid_id
00429          Integer          :: mask_type
00430          Integer          :: mask_shape (2, ndim_3d)
00431          Logical, Pointer :: mask_array (:)
00432 
00433       End Type Mask
00434 
00435 ! =======================================================================
00436 #ifdef __PSMILE_WITH_IO
00437 !
00438 ! Max. no. entries of the CF name table
00439 !
00440       Integer,Parameter :: PSMILE_IO_MAX_NO_NAMES=100
00441 !
00442 ! Max. IO unit allowed by the OS.
00443 ! (We should have a psmile_os.h!)
00444 !
00445       Integer,Parameter :: PSMILE_IO_MAX_UNIT=299
00446 !
00447 ! Max. file size threshold in kB
00448 !
00449       Integer,Parameter :: PSMILE_IO_MAX_FILE_SIZE=1024*1024
00450 !
00451 ! The total number of reserved units.
00452 !
00453       Integer,Parameter :: PSMILE_IO_MAX_RESERVED_UNITS=5
00454 !
00455 ! Reserved IO units. Keeps the IO units used for read(*),write(*) or
00456 ! vital I/O units used during the course of a simulation.
00457 !
00458       Integer :: 
00459       IO_res_units(PSMILE_IO_MAX_RESERVED_UNITS)=(/100,101,102,103,104/)
00460 !
00461 !  Internal stack for the MPP domains module
00462 !
00463       Integer,Parameter :: PSMILE_IO_stackmaxd=512*512*64
00464 !
00465 !  Internal stack for MPP io module
00466 !
00467       Integer,Parameter :: PSMILE_IO_stackmax=512*512*64
00468 !
00469 ! Some named integers to trigger certain inquire or get actions on SCC/SMIOC
00470 ! informations
00471 !
00472       Integer, Parameter :: PSMILe_IO_GET_FILENAME    = 1000
00473       Integer, Parameter :: PSMILe_IO_GET_FILEUNIT    = 1001
00474       Integer, Parameter :: PSMILe_IO_GET_ACTION      = 1002
00475       Integer, Parameter :: PSMILe_IO_GET_FORMAT      = 1003
00476       Integer, Parameter :: PSMILe_IO_GET_FILESET     = 1004
00477       Integer, Parameter :: PSMILe_IO_GET_THREADING   = 1005
00478       Integer, Parameter :: PSMILe_IO_GET_CFLNGNAME   = 1006
00479       Integer, Parameter :: PSMILe_IO_GET_CFSHRTNAME  = 1007
00480       Integer, Parameter :: PSMILe_IO_GET_CFUNITS     = 1008
00481       Integer, Parameter :: PSMILe_IO_GET_CFPOSITIVE  = 1009
00482       Integer, Parameter :: PSMILe_IO_GET_SENSE       = 1010
00483       Integer, Parameter :: PSMILe_IO_GET_PACK        = 1011
00484       Integer, Parameter :: PSMILe_IO_GET_TYPE_SPEC   = 1012
00485       Integer, Parameter :: PSMILe_IO_GET_SCALE       = 1013
00486       Integer, Parameter :: PSMILe_IO_GET_ADD         = 1014
00487       Integer, Parameter :: PSMILe_IO_GET_VALID_MIN   = 1015
00488       Integer, Parameter :: PSMILe_IO_GET_VALID_MAX   = 1016
00489       Integer, Parameter :: PSMILe_IO_GET_FILL        = 1017
00490       Integer, Parameter :: PSMILe_IO_GET_MISSING     = 1018
00491       Integer, Parameter :: PSMILe_IO_GET_NENTRIES    = 1019
00492       Integer, Parameter :: PSMILe_IO_GET_MENTRIES    = 1020
00493       Integer, Parameter :: PSMILe_IO_GET_LAGMODE     = 1021
00494       Integer, Parameter :: PSMILe_IO_GET_LAGWEIGHT   = 1022
00495       Integer, Parameter :: PSMILe_IO_GET_HEIGHTUNITS = 1023
00496       Integer, Parameter :: PSMILe_IO_GET_HEIGHTFORML = 1024
00497       Integer, Parameter :: PSMILe_IO_GET_HEIGHTSTDN  = 1025
00498       Integer, Parameter :: PSMILe_IO_GET_SUFFIX      = 1026
00499       Integer, Parameter :: PSMILe_IO_GET_CFIONAME    = 1027
00500       Integer, Parameter :: PSMILe_IO_GET_VCMPNAMES   = 1028
00501       Integer, Parameter :: PSMILe_IO_GET_BNDLNAMES   = 1029
00502       Integer, Parameter :: PSMILe_IO_GET_LONUNITS    = 1030
00503       Integer, Parameter :: PSMILe_IO_GET_LATUNITS    = 1031
00504 !
00505 ! Derived Type IO_App_info
00506 !
00507       Type IO_App_info
00508          Integer::comm
00509       End Type IO_App_info
00510 
00511       Type(IO_App_info)::IO_Apps_infos
00512 !
00513 ! Derived Type IO_Comp_info
00514 !
00515       Type IO_Comp_info
00516          Integer:: comm
00517          Integer,Pointer::pelist(:)
00518       End Type IO_Comp_info
00519 
00520       Type(IO_Comp_info),Allocatable::IO_Comps_infos(:)
00521 
00522 !
00523 ! Derived Type IO_CF_maps
00524 !
00525       Type IO_CF_maps
00526          Character(len=max_name) ::maps(PSMILE_IO_MAX_NO_NAMES)
00527          Integer  cf_tlb(PSMILE_IO_MAX_NO_NAMES)
00528       End Type IO_CF_maps
00529 !
00530       Type(IO_CF_maps),Target :: cf_maps
00531 !
00532 ! Derived Type IO_CF_names
00533 !
00534       Type IO_CF_names
00535          Character(len=max_name) :: names(PSMILE_IO_MAX_NO_NAMES)
00536          Integer  cf_tlb(PSMILE_IO_MAX_NO_NAMES)
00537       End Type IO_CF_names
00538 !
00539       Type(IO_CF_names),Target :: cf_names
00540 !
00541 ! Derived Type IO_cache
00542 !
00543       Type IO_Cache
00544          Double Precision,Dimension(:),Pointer::time_stamps
00545          Double Precision         :: ju_sec_last,ju_day_last 
00546                                    , time_last
00547          Double Precision,Dimension(:),Pointer::data_dble
00548          Real            ,Dimension(:),Pointer::data_real
00549          Integer         ,Dimension(:),Pointer::data_int
00550          Integer :: ilast  ! Last lower index of a matching time intervall
00551          Logical :: llast  ! Flag to trigger end of file processing
00552       End Type IO_Cache
00553 
00554       Type(IO_Cache), Allocatable,Target::iocache(:)
00555 !
00556 ! Derived Type IO_mpp_io
00557 !
00558       Type IO_mpp_io
00559 !
00560 ! Global data objects to keep axis and field definitions.
00561 ! Used by MPP_IO routines.
00562 !
00563          Type(domain2D),Pointer,Dimension(:)::domain
00564          Type(domain1D),Pointer,Dimension(:)::xdom,ydom,zdom
00565 !
00566 ! Global data objects to keep axis and field definitions.
00567 ! Used by MPP_IO routines.
00568 !
00569          Type(fieldtype),Pointer,Dimension(:) :: ig_vars,field,latij,lonij 
00570                                                 ,vertij,maskij,crnij,subaij
00571          Type(axistype),Pointer,Dimension(:)::x_axis,y_axis,z_axis,t_axis 
00572                                              ,b_axis,blk_axis,anaxis,crnaxis
00573          Type(atttype),Pointer,Dimension(:)::atts
00574          Integer :: findex(3)
00575 
00576       End Type IO_mpp_io
00577 #endif
00578 
00579 ! =======================================================================
00580 !
00581 ! Derived type IO_Data
00582 !
00583       Type IO_Data
00584          Character (len=max_name) :: filename
00585          Integer                  :: taskid
00586          Integer                  :: file_unit
00587          Integer                  :: isuffix
00588          Integer                  :: action
00589          Integer                  :: Format
00590          Integer                  :: threading
00591          Integer                  :: fileset
00592          Integer                  :: status
00593          Logical                  :: done,opened
00594          Integer                  :: block_id
00595          Integer,Pointer          :: related_ids(:)
00596          Integer                  :: old_filesize
00597          Integer                  :: current_filesize
00598          Double Precision         :: ju_start_day,ju_start_sec
00599          Double Precision,Pointer :: fp_dble(:)
00600          Real,Pointer             :: fp_real(:)
00601          Integer,Pointer          :: fp_int(:)
00602 !
00603          Character (len=max_name) :: cfioname
00604          Character (len=max_name) :: standard_name
00605          Character (len=max_name) :: long_name
00606          Character (len=max_name), Pointer :: labels(:)      ! For bundles !
00607          Character (len=max_name), Pointer :: vcmp_names(:)  ! For vectors !
00608          Character (len=max_name) :: units
00609          Character (len=max_name) :: lon_unit
00610          Character (len=max_name) :: lat_unit
00611          Character (len=max_name) :: positive
00612          Character (len=max_name) :: height_unit ! Where is the unit for height?
00613          Character (len=max_name) :: height_formular
00614          Character (len=max_name) :: height_stdname
00615          Integer                  :: sense
00616          Integer                  :: pack_mode
00617          Integer                  :: type_spec
00618          Integer                  :: ilag_mode
00619          Double Precision         :: scale,add
00620          Double Precision         :: valid_range(2),valid_min,valid_max
00621          Double Precision         :: fill_value,missing_value
00622          Double Precision         :: time_stamp
00623          Double Precision         :: weight
00624 !
00625          Integer                  :: cf_name_tlb_entry(8)
00626          Integer                  :: cf_map_tlb_entry(8)
00627 
00628 #ifdef __PSMILE_WITH_IO
00629          Type(IO_CF_names),Pointer      :: p_cf_names
00630          Type(IO_CF_maps),Pointer       :: p_cf_maps
00631          Type(IO_cache),Pointer         :: p_cache
00632          Type(IO_mpp_io),Pointer        :: p_mpp_io
00633 #endif
00634       End Type IO_Data
00635 
00636 ! =======================================================================
00637 !
00638 ! Derived Type PSMILe_Time_Struct
00639 !
00640 !   Time struct used internally by PSMILe. All PRISM time structs
00641 !    are converted to PSMILe time struct where appropriate for further
00642 !    processing
00643 
00644       Type PSMILe_Time_Struct
00645          Double Precision          :: days
00646          Double Precision          :: secs
00647       End Type PSMILe_Time_struct
00648 
00649 ! =======================================================================
00650 !
00651 ! Derived Types for GridFunction
00652 !
00653 ! origin_type         Input comes from component (PSMILe_comp)
00654 !                     or file (PSMILe_file)
00655 ! remote_transi_id    Field id at the source/destination
00656 !                     ? Was soll das sein ?
00657 ! global_transi_id    Global field id for transient_in/transient_out
00658 ! start_day           day lower bound for summation period
00659 ! end_day             day upper bound for summation period
00660 ! start_sec           second lower bound for summation period
00661 ! end_sec             second upper bound for summation period
00662 ! nsum                number of summations done
00663 ! Time_length         Length of time axis (number of coupling steps)
00664 !                     for a job
00665 ! buffer_*            buffers for summation and other operation
00666 !                     on input data
00667 ! delta_time          coupling frequency from SMIOC XML
00668 ! Judate_Axis         Array of length Time_length containing the
00669 !                     coupling time steps
00670 ! Judate_Event        Time of next event for a particular field and channel
00671 !
00672 ! Judate_Lbnd         Storage of lower date bound to chenck consistency
00673 !                     between prism_put and prism_get
00674 ! Judate_Ubnd         Auxillary to check for time gaps in bounds
00675 !                     between two consecutive call to put/get
00676 !                     Storage of lower date bound to chenck consistency
00677 !                     between prism_put and prism_get
00678 !
00679       Type Interp_type
00680          Integer                     :: interp_type
00681          Integer, Dimension(3)       :: interp_meth
00682          Integer, Dimension(3)       :: arg1
00683          Integer, Dimension(3)       :: arg2
00684          Integer, Dimension(3)       :: arg3
00685          Integer, Dimension(3)       :: arg4
00686          Integer, Dimension(3)       :: arg5 ! use_masked for nnghbr3D/2D/1D
00687          Integer, Dimension(3)       :: arg6
00688          Integer, Dimension(3)       :: arg7
00689          Double Precision            :: arg8
00690          Character(len=max_name)     :: arg9
00691          Type (PSMILe_file_struct)   :: arg10
00692       End Type Interp_type
00693 
00694       Type Combi_type
00695          Character(len=max_name)      :: combi_name
00696          Character(len=max_name)      :: ext_mask_name
00697 !RV         Type (PSMILe_file_struct)    :: ext_mask_file do we need this?
00698          Double Precision             :: combi_param
00699          Double Precision             :: scalar
00700          Integer                      :: location
00701          Integer                      :: operand
00702          Integer                      :: mask_type
00703          Integer                      :: combi_meth
00704       End Type Combi_type
00705 
00706       Type ch_ptr
00707          Integer                   :: origin_type
00708          Integer                   :: remote_transi_id
00709          Integer                   :: global_transi_id
00710          Integer                   :: remote_comp_id
00711 !     if User defined interpolation
00712          Integer                   :: assoc_var_id
00713          Integer                   :: userdef_id
00714 !
00715          Type (Interp_type)        :: interp
00716          Type (Combi_type)         :: combi
00717       End Type ch_ptr
00718 
00719       Type Taskin_type
00720          Double Precision          :: start_day
00721          Double Precision          :: end_day
00722          Double Precision          :: start_sec
00723          Double Precision          :: end_sec
00724 
00725          Integer                   :: nbr_inchannels
00726          Integer                   :: nsum
00727          Integer                   :: Time_length
00728          Integer, Pointer          :: buffer_int(:)
00729          Real, Pointer             :: buffer_real(:)
00730          Double Precision, Pointer :: buffer_dble(:)
00731 #if defined ( PRISM_QUAD_TYPE )
00732          Real (kind=PRISM_QUAD_TYPE), Pointer :: buffer_quad(:)
00733 #endif
00734          Type (PRISM_Time_Struct)  :: delta_time
00735          Type (PSMILe_Time_Struct) :: Judate_Start
00736          Type (PSMILe_Time_Struct) :: Judate_Stop
00737          Type (PSMILe_Time_Struct) :: Judate_Event
00738          Type (PSMILe_Time_Struct) :: Judate_Lbnd
00739          Type (PSMILe_Time_Struct) :: Judate_Ubnd
00740          Type (PSMILe_Time_Struct), Pointer   :: Judate_Axis(:)
00741          Type (ch_ptr), Pointer    :: In_channel(:)
00742 
00743          Integer                   :: n_recv_direct
00744          Integer                   :: n_recv_coupler
00745 
00746          Integer                   :: n_alloc_recv_direct
00747          Integer                   :: n_alloc_recv_coupler
00748 
00749          Type (Recv_field_information), Pointer :: recv_direct  (:)
00750          Type (Recv_field_information), Pointer :: recv_coupler (:)
00751 
00752       End Type Taskin_type
00753 
00754 !........................................................................
00755 
00756       Type Taskout_type
00757          Integer                   :: origin_type
00758          Integer                   :: remote_transi_id
00759          Integer                   :: global_transi_id
00760          Integer                   :: remote_comp_id
00761 !
00762 !    Userdef ids (if interpolation is "user3D")
00763          Integer                   :: assoc_var_id
00764          Integer                   :: userdef_id
00765 
00766          Double Precision          :: start_day
00767          Double Precision          :: end_day
00768          Double Precision          :: start_sec
00769          Double Precision          :: end_sec
00770          Integer                   :: nsum
00771          Integer                   :: Time_length
00772          Integer, Pointer          :: buffer_int(:)
00773          Real, Pointer             :: buffer_real(:)
00774          Double Precision, Pointer :: buffer_dble(:)
00775 #if defined ( PRISM_QUAD_TYPE )
00776          Real (kind=PRISM_QUAD_TYPE), Pointer :: buffer_quad(:)
00777 #endif
00778          Type (PRISM_Time_Struct)  :: delta_time
00779          Type (PSMILe_Time_Struct) :: Judate_Start
00780          Type (PSMILe_Time_Struct) :: Judate_Stop
00781          Type (PSMILe_Time_Struct) :: Judate_Event
00782          Type (PSMILe_Time_Struct) :: Judate_Lbnd
00783          Type (PSMILe_Time_Struct) :: Judate_Ubnd
00784          Type (PSMILe_Time_Struct), Pointer   :: Judate_Axis(:)
00785          Type (Interp_type)        :: interp
00786          Type (Combi_type)         :: combi
00787 
00788          Integer                   :: n_send_direct
00789          Integer                   :: n_send_coupler
00790          Integer                   :: n_send_appl
00791 
00792          Integer                   :: n_alloc_send_direct
00793          Integer                   :: n_alloc_send_coupler
00794          Integer                   :: n_alloc_send_appl
00795 
00796          Type (Send_field_information), Pointer :: send_direct  (:)
00797          Type (Send_field_information), Pointer :: send_coupler (:)
00798          Type (Send_field_information), Pointer :: send_appl (:)
00799 
00800       End Type Taskout_type
00801 
00802 !........................................................................
00803 !
00804 ! Types for cell-based search
00805 !
00806       Type memo
00807          Integer :: i
00808          Integer :: j
00809          Integer :: dir
00810          Logical :: overlap
00811       End Type memo
00812 
00813       Type point_real
00814          Real :: x
00815          Real :: y
00816       End Type point_real
00817 
00818       Type point_dble
00819          Double Precision :: x
00820          Double Precision :: y
00821       End Type point_dble
00822 
00823       Type line_dble
00824          Type(point_dble) :: p1
00825          Type(point_dble) :: p2
00826       End Type line_dble
00827 
00828       Type line_real
00829          Type(point_real) :: p1
00830          Type(point_real) :: p2
00831       End Type line_real
00832 
00833 ! =======================================================================
00834 !
00835 ! Derived Type GridFunction
00836 !
00837 ! global_var_id     : Global id of transient variable.
00838 ! local_name        : for matching with SMIO
00839 !
00840 ! comp_id           : Handle to the component information.
00841 ! smioc_loc         : Element number in the SMIOC list
00842 ! grid_id           : Handle to the grid information.
00843 !                     ?? Wieso steht die drin ? Ergibt die sich nicht aus der
00844 !                        method_id ? Das gleiche fuer comp_id ?
00845 ! method_id         : Handle to the location where the grid function is defined.
00846 ! mask_id           : Handle to the mask information of variable.
00847 !                     May be PRISM_UNDEFINED if a mask is not defined.
00848 !
00849 ! transi_type       : Transient type (single/bundle/vector/vectorbundle)
00850 !
00851 ! used_for_coupling : Flag indicating whether the field is used for coupling
00852 ! used_for_io       : Flag indicating whether the field is used for file IO
00853 !
00854 ! Exchange data with fields of another component:
00855 !
00856 ! n_send_direct     : Number of messages to be directly sent to an
00857 !                     application process.
00858 ! n_send_coupler    : Number of messages to be sent to a coupler process.
00859 !
00860 ! n_recv_direct     : Number of messages to be directly received by an
00861 !                     application process.
00862 ! n_recv_coupler    : Number of messages to be received by an coupler process.
00863 !
00864       Type GridFunction
00865 
00866          Integer                   :: global_var_id
00867          Integer                   :: smioc_loc
00868          Integer                   :: status
00869          Integer                   :: comp_id
00870          Integer                   :: method_id
00871          Integer                   :: mask_id
00872          Integer                   :: var_shape (2, max_dim)
00873          Integer                   :: transi_type
00874          Integer                   :: size
00875          Integer                   :: dataType
00876 
00877          Logical                   :: used_for_coupling
00878          Logical                   :: used_for_io
00879 
00880          Character (len=max_name)  :: local_name
00881 
00882          Type (Taskout_type), Pointer :: Taskout(:)
00883          Type (Taskin_type)           :: Taskin
00884 
00885          Type (IO_Data), Pointer          :: io_infos
00886          Type (IO_Data), Pointer          :: io_chan_infos(:)
00887          Integer, Pointer                 :: io_task_lookup(:)
00888 
00889       End Type GridFunction
00890 
00891 ! =======================================================================
00892 !
00893 ! Derived type TimeStep
00894 !
00895       Type TimeStep
00896 
00897           Integer           n_send
00898           Integer           n_recv
00899           Integer           n_write
00900           Integer           n_read
00901 
00902           Integer, Dimension (:), Pointer :: ids_send
00903           Integer, Dimension (:), Pointer :: ids_recv
00904           Integer, Dimension (:), Pointer :: ids_write
00905           Integer, Dimension (:), Pointer :: ids_read
00906 
00907       End  Type TimeStep
00908 
00909 ! =======================================================================
00910 !
00911 ! Derived type GridConnection to store info about source and target grid relations
00912 !
00913       Type GridConnection
00914 
00915          Integer :: status
00916 
00917          Integer :: tgt_comp_id
00918          Integer :: tgt_grid_id
00919          Integer :: tgt_method_id
00920          Integer :: tgt_mask_id
00921 
00922          Integer :: src_comp_id
00923          Integer :: src_grid_id
00924          Integer :: src_method_id
00925          Integer :: src_mask_id
00926 
00927          Integer :: trans_out
00928          Integer :: trans_in
00929 
00930          Integer :: interpolation(ndim_3d)
00931 
00932          Integer :: epio_id
00933          Integer :: trs_rank
00934 
00935          Integer :: tgt_epio_pe
00936 
00937       End Type GridConnection
00938 
00939 
00940 ! =======================================================================
00941 !
00942 ! Derived type Userdef to store info on user-defined links for interpolation
00943 !
00944 ! var_id            : global index in the Fields array of the geographic variable
00945 !
00946 ! igl_grid_id       : grid id of the gridless grid built from the user defined links
00947 !
00948 ! status            : status of this entry
00949 !
00950 ! ig_transi_side    : 0 for the source side (Tranient Out)
00951 !                     1 for the target side (Transient In)
00952 !
00953 ! ig_nb_links       : number of links defined in the weight and addresses file
00954 !
00955 ! ig_celldim        : number of dimensions of geographical cells
00956 !                     (can be 1, 2 or 3, and depend on side)
00957 !
00958 ! ig_nb_ppp         : number of links relevant to the partition of this PE
00959 !
00960 ! ig_nbr_fields     : number of "bundles" of geographic function (>= 1)
00961 !
00962 ! lg_nolink         : .true. for a PE having no geographic point in its partition
00963 ! (obsolete...)              to match with any user-defined link
00964 !
00965 ! iga_igl(:,:)      : list of indexes of geographical grid (local to partition)
00966 !                     the list of indexes stored in iga_igl concerns only one side
00967 !                     either the source side (for the prism_put)
00968 !                     or the target side (for the prism_get)
00969 !
00970 ! iga_links(:)      : list of links defined by the user (local to partition)
00971 !                     the list stored in iga_links concern only one side :
00972 !                     either the source side, or the target side
00973 !
00974 ! trans_grless(:,:,:,:) : Local non continuous gridless function based on
00975 !                         the geographic function and the links in w&a file
00976 !
00977       Type Userdef
00978 
00979         Integer :: var_id
00980         Integer :: igl_grid_id
00981         Integer :: status
00982         Integer :: ig_transi_side
00983         Integer :: ig_nb_links
00984         Integer :: ig_celldim
00985         Integer :: ig_nb_ppp
00986         Integer :: ig_nbr_fields
00987 
00988 !       Logical :: lg_nolink
00989 
00990         Integer, pointer                  :: iga_igl(:,:)
00991         Real (PSMILe_float_kind), pointer :: dga_wght(:)
00992 !
00993         REAL, pointer   :: real_gridless(:,:,:,:)
00994         DOUBLE PRECISION, pointer   :: dble_gridless(:,:,:,:)
00995 
00996       End Type Userdef
00997 
00998 ! =======================================================================
00999 !
01000 ! Derived type PSMILe_Link  to store info about each link defined by user
01001 !
01002 ! cell_id(3)        : indexes of the geographical cell in the 3 dimensions
01003 !
01004 ! weight            : weight attached to the geographical field value
01005 
01006       Type PSMILe_Link
01007 
01008         Integer :: cell_id(3)
01009         Real (PSMILe_float_kind) :: weight
01010 
01011       End Type PSMILe_Link
01012 
01013 ! ----------------------------------------------------------------------------
01014 ! Global attributes
01015 ! ----------------------------------------------------------------------------
01016 
01017       Save
01018 !
01019 ! Allocatable arrays:
01020 !
01021 ! PRISM_applProc       : Number of processes per application with
01022 !                        PRISM_applProc (0) = Number of Coupler processes
01023 ! PRISM_applName       : Names of the applications with
01024 !                        PRISM_applName (0) = Name of the coupler
01025 ! PRISM_compName       : Names of the components
01026 ! PRISM_noCompsPerAppl : Nuber of components per application
01027 !
01028 ! Appl                 : Pointer to application type vector
01029 ! Comps                : Pointer to component type vector
01030 ! Grids                : Pointer to grid type type vector
01031 ! Methods              : Pointer to method type vector
01032 ! Masks                : Pointer to mask type vector
01033 ! Fields               : Pointer to grid function type vector
01034 ! Cpl_list             : Pointer to coupling grid relations
01035 !
01036 ! all_comp_infos       : Collected info's to all components within PRISM_Enddef.
01037 ! comp_infos           : Infos on the components (located on the actual process).
01038 !                        The entries of "comp_info" are sorted by the
01039 !                        global comp id.
01040 ! field2grid           : Mapping of global var id into global grid id
01041 ! paction              :
01042 !
01043       Integer,                 Allocatable :: PRISM_applProc(:)
01044       Integer,                 Allocatable :: PRISM_noCompsPerAppl(:)
01045 
01046       Integer,                 Allocatable :: PRISM_compRankSets(:)
01047       Integer,                 Allocatable :: PRISM_rankSets(:,:)
01048 
01049       Character(len=max_name), Allocatable :: PRISM_applName(:)
01050       Character(len=max_name), Allocatable :: PRISM_compName(:)
01051 !
01052       Type (Enddef_comp),      Allocatable, Target :: all_comp_infos(:)
01053       Type (Enddef_comp),      Allocatable, Target :: comp_infos(:)
01054       Type (Enddef_action)                 :: paction
01055       Integer,                 Allocatable :: field2grid (:)
01056 !
01057 ! Pointers to dynamically allocated arrays
01058 !
01059       Type (Component),        Pointer     :: Comps(:)
01060       Type (Grid),             Pointer     :: Grids(:)
01061       Type (Method),           Pointer     :: Methods(:)
01062       Type (Mask),             Pointer     :: Masks(:)
01063       Type (GridFunction),     Pointer     :: Fields(:)
01064       Type (Userdef),          Pointer     :: Userdefs(:)
01065 
01066       Type (TimeStep),         Pointer     :: Timesteps_info(:)
01067       Double Precision,        Pointer     :: Timesteps(:)
01068 
01069       Integer,                 Pointer     :: neighcells_3d(:,:,:)
01070       Type (GridConnection),   Pointer     :: cpl_list(:)
01071 !
01072 !-----------------------------------------------------------------------
01073 ! Interfaces of internal PSMILe routines
01074 ! ----------------------------------------------------------------------------
01075 
01076     Interface
01077 
01078       subroutine psmile_def_grid(grid_id, grid_name, comp_id, &
01079                                  grid_valid_shape, grid_type, ierror )
01080 
01081          character(len=*), intent(in) :: grid_name
01082          integer, intent (in)         :: comp_id
01083          integer, intent (in)         :: grid_valid_shape (1:2,*)
01084          integer, intent (in)         :: grid_type
01085          integer, intent (out)        :: grid_id
01086          integer, intent (out)        :: ierror
01087       end subroutine psmile_def_grid
01088 
01089       subroutine psmile_def_partition (grid_id, nbr_blocks, &
01090                                        partition_array, extent_array, ierror )
01091          integer, intent (in)  :: grid_id
01092          integer, intent (in)  :: nbr_blocks
01093          integer, intent (in)  :: partition_array(1:nbr_blocks,*)
01094          integer, intent (in)  :: extent_array(1:nbr_blocks,*)
01095          integer, intent (out) :: ierror
01096       end subroutine psmile_def_partition
01097 
01098       subroutine psmile_reducedgrid_map (grid_id, nbr_latitudes, &
01099                                          nbr_points_per_lat, ierror)
01100          integer, intent (in)  :: grid_id
01101          integer, intent (in)  :: nbr_latitudes
01102          integer, intent (in)  :: nbr_points_per_lat(nbr_latitudes)
01103          integer, intent (out) :: ierror
01104       end subroutine psmile_reducedgrid_map
01105 
01106       subroutine psmile_set_corners_3d_double(grid_id, nbr_corners, corners_actual_shape, &
01107                corners_1st_array, corners_2nd_array, corners_3rd_array, ierror)
01108 
01109          integer, intent (in)          :: grid_id
01110          integer, intent (in)          :: nbr_corners
01111          double precision, intent (in) :: corners_1st_array (*)
01112          double precision, intent (in) :: corners_2nd_array (*)
01113          double precision, intent (in) :: corners_3rd_array (*)
01114          integer, intent (in)          :: corners_actual_shape (1:2, *)
01115          integer, intent(out)          :: ierror
01116       end subroutine psmile_set_corners_3d_double
01117 
01118       subroutine psmile_set_corners_3d_real(grid_id, nbr_corners, corners_actual_shape, &
01119                corners_1st_array, corners_2nd_array, corners_3rd_array, ierror)
01120 
01121          integer, intent (in) :: grid_id
01122          integer, intent (in) :: nbr_corners
01123          real, intent (in)    :: corners_1st_array (*)
01124          real, intent (in)    :: corners_2nd_array (*)
01125          real, intent (in)    :: corners_3rd_array (*)
01126          integer, intent (in) :: corners_actual_shape (1:2, *)
01127          integer, intent(out) :: ierror
01128       end subroutine psmile_set_corners_3d_real
01129 
01130       subroutine psmile_set_mask (mask_id, grid_id, mask_actual_shape, &
01131                                   mask_array, new_mask, ierror)
01132          integer, intent(inout) :: mask_id
01133          integer, intent(in)    :: grid_id
01134          integer, intent(in)    :: mask_actual_shape(2, *)
01135          logical, intent(in)    :: mask_array (*)
01136          logical, intent(in)    :: new_mask
01137          integer, intent(out)   :: ierror
01138       end subroutine psmile_set_mask
01139 
01140       subroutine psmile_set_points_gridless (point_id, point_name, grid_id, &
01141                                              new_points, ierror)
01142          character (len=*), intent(in)    :: point_name
01143          integer,           intent(in)    :: grid_id
01144          integer,           intent(inout) :: point_id
01145          logical,           intent(in)    :: new_points
01146          integer,           intent(out)   :: ierror
01147       end subroutine psmile_set_points_gridless
01148 
01149       subroutine psmile_set_points_3d_double (method_id, point_name, grid_id, points_actual_shape, &
01150                            points_1st_array, points_2nd_array, points_3rd_array, new_points, ierror)
01151          character (len=*), intent(in):: point_name
01152          integer, intent(in)          :: grid_id
01153          integer, intent(inout)       :: method_id
01154          double precision, intent(in) :: points_1st_array(*)
01155          double precision, intent(in) :: points_2nd_array(*)
01156          double precision, intent(in) :: points_3rd_array(*)
01157          integer, intent(in)          :: points_actual_shape (2, *)
01158          logical, intent(in)          :: new_points
01159          integer, intent(out)         :: ierror
01160       end subroutine psmile_set_points_3d_double
01161 
01162       subroutine psmile_set_points_3d_real (method_id, point_name, grid_id, points_actual_shape, &
01163                            points_1st_array, points_2nd_array, points_3rd_array, new_points, ierror)
01164          character (len=*), intent(in) :: point_name
01165          integer, intent(in)           :: grid_id
01166          integer, intent(inout)        :: method_id
01167          real, intent(in)              :: points_1st_array(*)
01168          real, intent(in)              :: points_2nd_array(*)
01169          real, intent(in)              :: points_3rd_array(*)
01170          integer, intent(in)           :: points_actual_shape (2, *)
01171          logical, intent(in)           :: new_points
01172          integer, intent(out)          :: ierror
01173       end subroutine psmile_set_points_3d_real
01174 
01175       subroutine psmile_def_var (var_id, var_name, grid_id, point_id, mask_id, &
01176                                  var_nodims, var_actual_shape, var_type, ierror)
01177          character (len=*), intent (in) :: var_name
01178          integer, intent (in)           :: mask_id
01179          integer, intent (in)           :: point_id
01180          integer, intent (in)           :: grid_id
01181          integer, intent (in)           :: var_nodims(2)
01182          integer, intent (in)           :: var_actual_shape(1:2,1:var_nodims(1))
01183          integer, intent (in)           :: var_type
01184          integer, intent (out)          :: var_id
01185          integer, intent (out)          :: ierror
01186       end subroutine psmile_def_var
01187 
01188 ! Flush stdout/stderr
01189 
01190     subroutine psmile_flushstd ()
01191     End Subroutine
01192 
01193     subroutine psmile_redirstdout (charbuf, lenstr, parallel, my_pe, npes, ierror)
01194 #ifdef NAG_COMPILER
01195        Character(len=*), Intent(In)   :: charbuf
01196 #else
01197        Integer, Intent (In)           :: charbuf (*)
01198 #endif
01199        Integer, Intent (In)           :: lenstr, parallel, my_pe, npes
01200        Integer, Intent (Out)          :: ierror
01201     End Subroutine
01202 
01203 ! Internal control
01204 
01205     subroutine psmile_assert (file, line, msg)
01206        Character (len=*), Intent (In) :: file, msg
01207        Integer, Intent (In)           :: line
01208     End Subroutine
01209 
01210    function psmile_transform_index_1d_to_3d (index_1d, array_shape)
01211       use psmile_common, only : ndim_3d
01212       integer, intent(in) :: index_1d
01213       integer, intent(in) :: array_shape (2, ndim_3d)
01214       integer :: psmile_transform_index_1d_to_3d (ndim_3d)
01215    end function psmile_transform_index_1d_to_3d
01216 
01217    function psmile_transform_index_3d_to_1d (index_3d, array_shape)
01218       use psmile_common, only : ndim_3d
01219       integer, intent(in) :: index_3d(ndim_3d)
01220       integer, intent(in) :: array_shape (2, ndim_3d)
01221       integer :: psmile_transform_index_3d_to_1d
01222    end function psmile_transform_index_3d_to_1d
01223 
01224     subroutine psmile_check_action ( var_id, task_id, precise, &
01225                                      julian_day, julian_dayb,  &
01226                                      julian_sec, julian_secb,  &
01227                                      action )
01228        Integer, Intent (In)  :: var_id
01229        Integer, Intent (In)  :: task_id
01230        Double Precision, Intent (In) :: julian_day, julian_dayb(2)
01231        Double Precision, Intent (In) :: julian_sec, julian_secb(2)
01232        Logical, Intent (In)  :: precise
01233        Logical, Intent (Out) :: action(3)
01234     End Subroutine
01235 
01236 ! Internal error handling
01237 
01238     subroutine psmile_error (ierror, string, ierrp, nerrp, file, line)
01239        Character (len=*), Intent (In) :: file, string
01240        Integer, Intent (In)           :: line, ierror, nerrp
01241        Integer, Intent (In)           :: ierrp (nerrp)
01242     End Subroutine
01243 
01244     subroutine psmile_warning (ierror, string, ierrp, nerrp, file, line)
01245        Character (len=*), Intent (In) :: file, string
01246        Integer, Intent (In)           :: line, ierror, nerrp
01247        Integer, Intent (In)           :: ierrp (nerrp)
01248     End Subroutine
01249 
01250 ! Get handle
01251 !
01252     subroutine psmile_deallocate (ierror)
01253        Integer, Intent (Out)            :: ierror
01254     End Subroutine
01255 
01256     subroutine psmile_deallocate_methods (ierror)
01257        Integer, Intent (Out)            :: ierror
01258     end subroutine
01259 
01260     subroutine psmile_deallocate_fields (ierror)
01261        Integer, Intent (Out)            :: ierror
01262     end subroutine
01263 
01264     subroutine psmile_deallocate_masks (ierror)
01265        Integer, Intent (Out)            :: ierror
01266     end subroutine
01267 !
01268     subroutine psmile_find_corr_field (comp_info, search, &
01269                                        var_id, ierror)
01270        Use PSMILe_common
01271 !
01272        Type (Enddef_comp), Intent (In)   :: comp_info
01273        Type (Enddef_search), Intent (In) :: search
01274        Integer, Intent (Out)             :: var_id
01275        Integer, Intent (Out)             :: ierror
01276     End Subroutine
01277 
01278     subroutine psmile_free_comp_handle (comp_id, ierror)
01279        Integer, Intent (In)            :: comp_id
01280        Integer, Intent (Out)           :: ierror
01281     End Subroutine
01282 
01283     subroutine psmile_free_field_handle (field_id, ierror)
01284        Integer, Intent (In)            :: field_id
01285        Integer, Intent (Out)           :: ierror
01286     End Subroutine
01287 
01288     subroutine psmile_free_grid_handle (grid_id, ierror)
01289        Integer, Intent (In)            :: grid_id
01290        Integer, Intent (Out)           :: ierror
01291     End Subroutine
01292 
01293     subroutine psmile_free_mask_handle (mask_id, grid_id, ierror)
01294        Integer, Intent (In)            :: mask_id
01295        Integer, Intent (Out)           :: grid_id
01296        Integer, Intent (Out)           :: ierror
01297     End Subroutine
01298 
01299     subroutine psmile_free_method_handle (method_id, ierror)
01300        Integer, Intent (In)            :: method_id
01301        Integer, Intent (Out)           :: ierror
01302     End Subroutine
01303 !
01304     subroutine psmile_get_comp_handle (comp_id, comp_name, ierror)
01305        Character (len=*), Intent (In)  :: comp_name
01306        Integer, Intent (Out)           :: comp_id, ierror
01307     End Subroutine
01308 !
01309     subroutine psmile_get_exch_index (var_id, task_id, request, index, ierror)
01310        Integer, Intent (In)            :: var_id, task_id, request
01311        Integer, Intent (Out)           :: ierror, index
01312     End Subroutine
01313 !
01314     subroutine psmile_get_info_index (method_id, request, index, ierror)
01315        Integer, Intent (In)            :: method_id, request
01316        Integer, Intent (Out)           :: ierror, index
01317     End Subroutine
01318 !
01319     subroutine psmile_get_epio_handle ( comp_id, grid_id, method_id,   &
01320                                         mask_id, interpolation,        &
01321                                         msg_intersections, trans_out,  &
01322                                         trans_in, tgt_epio_pe, cpl_id, &
01323                                         epio_id, trs_rank, ierror)
01324        Use PSMILe_common
01325        Integer, Intent (In)                         :: comp_id
01326        Integer, Intent (In)                         :: grid_id
01327        Integer, Intent (In)                         :: method_id
01328        Integer, Intent (In)                         :: mask_id
01329        Integer, Intent (In)                         :: interpolation(ndim_3d)
01330        Type (enddef_msg_intersections), Intent (In) :: msg_intersections
01331        Integer, Intent (In)                         :: trans_out
01332        Integer, Intent (In)                         :: trans_in
01333        Integer, Intent (In)                         :: tgt_epio_pe
01334        Integer, Intent (Out)                        :: cpl_id
01335        Integer, Intent (Out)                        :: epio_id
01336        Integer, Intent (Out)                        :: trs_rank
01337        Integer, Intent (Out)                        :: ierror
01338     End Subroutine
01339 !
01340     subroutine psmile_get_field_handle (field_id, ierror)
01341        Integer, Intent (Out)           :: field_id, ierror
01342     End Subroutine
01343 !
01344     subroutine psmile_get_grid_handle (grid_id, ierror)
01345        Integer, Intent (Out)           :: grid_id, ierror
01346     End Subroutine
01347 !
01348     Subroutine PSMILe_Get_userdef_handle (userdef_id, ierror)
01349        Integer, Intent (Out)           :: userdef_id, ierror
01350     End Subroutine
01351 
01352     subroutine psmile_get_halo_indices ( comp_id, grid_id_list, ierror)
01353       Use PSMILe_common
01354       Integer, Intent (In)         :: comp_id
01355       Integer, Intent (In)         :: grid_id_list(Number_of_Grids_allocated)
01356       Integer, Intent (Out)        :: ierror
01357     End Subroutine
01358 !
01359     subroutine psmile_get_halo_points (comp_id, ierror)
01360       Integer, Intent (In)         :: comp_id
01361       Integer, Intent (Out)        :: ierror
01362     End Subroutine
01363 !
01364     subroutine psmile_get_mask_handle (mask_id, ierror)
01365        Integer, Intent (Out)           :: mask_id, ierror
01366     End Subroutine
01367 !
01368     subroutine psmile_get_method_handle (grid_id, method_id, ierror)
01369        Integer, Intent (In)            :: grid_id
01370        Integer, Intent (Out)           :: method_id, ierror
01371     End Subroutine
01372 !
01373     subroutine psmile_get_next_field (comp_info, search, field_list, n_vars, &
01374                                       n_vars_ret, var_id, ierror)
01375        Use PSMILe_common
01376 !
01377        Type (Enddef_comp),   Intent (In)    :: comp_info
01378        Type (Enddef_search), Intent (InOut) :: search
01379        Integer, Intent (In)            :: n_vars
01380        Integer, Intent (In)            :: field_list (nd_field_list, n_vars)
01381        Integer, Intent (InOut)         :: n_vars_ret
01382        Integer, Intent (Out)           :: ierror, var_id
01383     End Subroutine
01384 !
01385     subroutine psmile_print_comp_info (cinfos, n_comps, string)
01386        Use PSMILe_common
01387 !
01388        Integer,            Intent (In) :: n_comps
01389        Type (enddef_comp), Intent (In) :: cinfos (n_comps)
01390        Character(len=*),   Intent (In) :: string
01391     End Subroutine
01392 !
01393     subroutine psmile_print_field_info (field_id)
01394        Integer, Intent (In)            :: field_id
01395     End Subroutine
01396 
01397     subroutine psmile_print_grid_info (grid_id)
01398        Integer, Intent (In)            :: grid_id
01399     End Subroutine
01400 !
01401     subroutine psmile_print_method_info (method_id)
01402        Integer, Intent (In)            :: method_id
01403     End Subroutine
01404 !
01405     subroutine psmile_print_send_info (method_id, incloc, message)
01406        Integer, Intent (In)            :: method_id, incloc
01407        Character (len=*), Intent (In)  :: message
01408     End Subroutine
01409 !
01410     subroutine psmile_store_send_info (var_id, id_trans_out, dir_index, cpl_index, &
01411                                        appl_index, ierror)
01412        Integer, Intent (In)            :: var_id, id_trans_out
01413        Integer, Intent (In)            :: dir_index, cpl_index, appl_index
01414        Integer, Intent (Out)           :: ierror
01415     End Subroutine
01416 
01417 ! Initialization
01418 
01419     subroutine psmile_init_datatypes (ierror)
01420        Integer, Intent (Out)           :: ierror
01421     End Subroutine
01422 
01423     subroutine psmile_init_mpi2 (intercomm, ierror)
01424        Integer, Intent (InOut)         :: intercomm
01425        Integer, Intent (Out)           :: ierror
01426     End Subroutine
01427 
01428     subroutine psmile_init_mpi1 (ierror)
01429        Integer, Intent (Out)           :: ierror
01430     End Subroutine
01431 
01432     subroutine psmile_def_datatypes (ierror)
01433        Integer, Intent (Out)           :: ierror
01434     End Subroutine
01435 
01436     subroutine psmile_def_mpi_comm (ierror)
01437        Integer, Intent (Out)           :: ierror
01438     End Subroutine
01439 
01440     subroutine psmile_def_mpi_compcomm (ierror)
01441        Integer, Intent (Out)           :: ierror
01442     End Subroutine
01443 
01444     subroutine psmile_spawn_child_appl (intracomm, intercomm, ierror)
01445        Integer, Intent (In)            :: intracomm
01446        Integer, Intent (Out)           :: intercomm
01447        Integer, Intent (Out)           :: ierror
01448     End Subroutine
01449 
01450 ! Control data structures
01451 
01452     subroutine psmile_control_grids (ierror)
01453        Integer, Intent (Out)           :: ierror
01454     End Subroutine
01455 
01456 ! Utilities for mask arrays
01457 
01458     subroutine psmile_get_true_mask_entries (mask_array, mask_shape,       &
01459                                              inter, n_true, ierror)
01460        Use PSMILe_common
01461        Integer, Intent (In)            :: mask_shape (2, ndim_3d)
01462        Logical, Intent (In)            :: mask_array (                     
01463                                           mask_shape(1,1):mask_shape(2,1), 
01464                                           mask_shape(1,2):mask_shape(2,2), 
01465                                           mask_shape(1,3):mask_shape(2,3))
01466        Integer, Intent (In)            :: inter (2, ndim_3d)
01467        Integer, Intent (Out)           :: n_true, ierror
01468     End Subroutine
01469 
01470     subroutine psmile_is_mask_defined (mask_array, mask_shape,       &
01471                                        inter, nparts, defined, ierror)
01472        Use PSMILe_common
01473        Integer, Intent (In)            :: mask_shape (2, ndim_3d)
01474        Logical, Intent (In)            :: mask_array (                     
01475                                           mask_shape(1,1):mask_shape(2,1), 
01476                                           mask_shape(1,2):mask_shape(2,2), 
01477                                           mask_shape(1,3):mask_shape(2,3))
01478        Integer, Intent (In)            :: nparts
01479        Integer, Intent (In)            :: inter (2, ndim_3d, nparts)
01480        Integer, Intent (Out)           :: defined, ierror
01481     End Subroutine
01482 
01483     subroutine psmile_do_masks_match (mask1_array, mask1_shape,       &
01484                                       mask2_array, mask2_shape,       &
01485                                       inter, nparts, match, ierror)
01486        Use PSMILe_common
01487        Integer, Intent (In)            :: mask1_shape (2, ndim_3d)
01488        Logical, Intent (In)            :: mask1_array (                     
01489                                           mask1_shape(1,1):mask1_shape(2,1), 
01490                                           mask1_shape(1,2):mask1_shape(2,2), 
01491                                           mask1_shape(1,3):mask1_shape(2,3))
01492        Integer, Intent (In)            :: mask2_shape (2, ndim_3d)
01493        Logical, Intent (In)            :: mask2_array (                     
01494                                           mask2_shape(1,1):mask2_shape(2,1), 
01495                                           mask2_shape(1,2):mask2_shape(2,2), 
01496                                           mask2_shape(1,3):mask2_shape(2,3))
01497        Integer, Intent (In)            :: nparts
01498        Integer, Intent (In)            :: inter (2, ndim_3d, nparts)
01499        Logical, Intent (Out)           :: match
01500        Integer, Intent (Out)           :: ierror
01501     End Subroutine
01502 
01503 ! End of definition of a component
01504 
01505     subroutine psmile_add_points_found (grid_id, search, &
01506                       extra_search, indices_returned,    &
01507                       found, n_send, len_nsend,          &
01508                       index_found, n_found,              &
01509                       neighbors_3d, nloc, num_neigh,     &
01510                       grid_valid_shape, use_how, ierror)
01511        Use PSMILe_common
01512 
01513        Integer,                  Intent (In)    :: grid_id
01514        Type (Enddef_search),     Intent (InOut) :: search
01515        Type (Extra_search_info), Intent (InOut) :: extra_search
01516        Integer,                  Intent (In)    :: n_found, n_send
01517        Integer,                  Intent (In)    :: indices_returned (n_send)
01518        Integer,                  Intent (In)    :: index_found (n_found)
01519        Integer,                  Intent (In)    :: grid_valid_shape (2, ndim_3d)
01520        Integer,                  Intent (In)    :: len_nsend (search%npart)
01521        Integer,                  Intent (In)    :: nloc, num_neigh
01522        Integer,                  Intent (In)    :: use_how
01523        Integer,                  Intent (InOut) :: found    (n_send)
01524        Integer,                  Intent (InOut) :: neighbors_3d (ndim_3d, nloc, 
01525                                                                  num_neigh)
01526        Integer,                  Intent (Out)   :: ierror
01527     End Subroutine
01528 
01529     subroutine psmile_enddef_action (search, index, status, ierror)
01530        Use PSMILe_common
01531        Type (Enddef_search), Intent (InOut) :: search
01532        Integer,              Intent (In)    :: index
01533        Integer,              Intent (In)    :: status (MPI_STATUS_SIZE)
01534        Integer,              Intent (Out)   :: ierror
01535     End Subroutine
01536 !
01537     subroutine psmile_enddef_action_cell (msg_locations, ierror)
01538        Use PSMILe_common, only : enddef_msg_locations
01539 
01540        Type (enddef_msg_locations), Intent (In)  :: msg_locations
01541        Integer,                     Intent (Out) :: ierror
01542     End Subroutine
01543 !
01544     subroutine psmile_enddef_action_extra (msg_extra, nd_msg, sender, ierror)
01545        Integer,              Intent (In)    :: sender, nd_msg
01546        Integer,              Intent (In)    :: msg_extra (nd_msg)
01547        Integer,              Intent (Out)   :: ierror
01548     End Subroutine
01549 !
01550     subroutine psmile_enddef_action_loc (msg_locations, ierror)
01551        Use PSMILe_common, only : enddef_msg_locations
01552 
01553        Type (enddef_msg_locations), Intent (In)  :: msg_locations
01554        Integer,                     Intent (Out) :: ierror
01555     End Subroutine
01556 !
01557     subroutine psmile_enddef_action_sel ( sender, ierror)
01558        Integer,              Intent (In)    :: sender
01559        Integer,              Intent (Out)   :: ierror
01560     End Subroutine
01561 
01562     subroutine psmile_enddef_appl (tag,   &
01563                                    my_icomp0_coll_comps, n_active, ierror)
01564        Use PSMILe_common
01565        Integer,            Intent (In)  :: tag
01566        Integer,            Intent (Out) :: my_icomp0_coll_comps, n_active
01567        Integer,            Intent (Out) :: ierror
01568     End Subroutine
01569 
01570     subroutine psmile_enddef_appl_miss (global_ids, comp_min, comp_max, &
01571                                         b_comps, n_active, tag, ierror)
01572        Use PSMILe_common
01573        Integer,            Intent (In)  :: n_active, tag
01574        Integer,            Intent (In)  :: comp_min, comp_max
01575        Integer,            Intent (In)  :: global_ids (comp_min:comp_max)
01576        Type (Enddef_comp), Intent (Out) :: b_comps (n_active)
01577        Integer,            Intent (Out) :: ierror
01578     End Subroutine
01579 
01580     subroutine psmile_enddef_comp (comp_id, global_comp_id, Number_of_Grids, &
01581                                    comp_info, ierror)
01582        Use PSMILe_common
01583        Integer, Intent (In)             :: comp_id, Number_of_Grids
01584        Integer, Intent (In)             :: global_comp_id
01585        Type (Enddef_comp), Intent (Out) :: comp_info
01586        Integer, Intent (Out)            :: ierror
01587     End Subroutine
01588     subroutine psmile_enddef_comp_grid (comp_id, n_grids, ierror)
01589        Integer, Intent (In)            :: comp_id
01590        Integer, Intent (Out)           :: ierror, n_grids
01591     End Subroutine
01592 
01593     subroutine psmile_enddef_comp_periodic (comp_id, grid_ids, n_total, &
01594                                             ierror)
01595        Integer, Intent (In)            :: comp_id, n_total
01596        Integer, Intent (In)            :: grid_ids (n_total)
01597        Integer, Intent (Out)           :: ierror
01598     End Subroutine
01599 
01600     subroutine psmile_field2grid (ierror)
01601        Integer,            Intent (Out) :: ierror
01602     End Subroutine
01603 
01604     subroutine psmile_find_intersect (comp_info, global_index, num_intersect_per_grid, &
01605                                       num_dummy_intersect_per_grid, ninter, &
01606                                       nmyint, nnull, tag, ierror)
01607        Use PSMILe_common
01608        Type (Enddef_comp), Intent (InOut) :: comp_info
01609        Integer, Intent (InOut)            :: num_intersect_per_grid(:), 
01610                                              num_dummy_intersect_per_grid(:)
01611        Integer, Intent (InOut)            :: ninter, nmyint, nnull
01612        Integer, Intent (In)               :: global_index, tag
01613        Integer, Intent (Out)              :: ierror
01614     End Subroutine
01615 !
01616     subroutine psmile_gauss_setup (grid_id, ierror)
01617       Integer, Intent (In)                :: grid_id
01618       Integer, Intent (Out)               :: ierror
01619     End Subroutine PSMILe_gauss_setup
01620 !
01621     subroutine psmile_gauss_get_neighbours (grid_id, ierror)
01622       Integer, Intent (In)                :: grid_id
01623       Integer, Intent (Out)               :: ierror
01624     End Subroutine PSMILe_gauss_get_neighbours
01625 !
01626     subroutine psmile_get_face_ind_21d (search, extra_search, &
01627                     send_info, len_cpl,                       &
01628                     send_mask, nreq, srcloc_ind, n_send,      &
01629                     ierror)
01630        Use PSMILe_common
01631 
01632        Type (Enddef_search),     Intent (In)  :: search
01633        Type (Extra_search_info), Intent (In)  :: extra_search
01634        Type (Send_information),  Intent (In)  :: send_info
01635        Integer,                  Intent (In)  :: nreq, n_send
01636        Integer,                  Intent (In)  :: len_cpl (search%npart)
01637        Logical,                  Intent (In)  :: send_mask (nreq)
01638        Integer,                  Intent (Out) :: srcloc_ind (ndim_3d, n_send)
01639        Integer,                  Intent (Out) :: ierror
01640     End Subroutine
01641 !
01642     subroutine psmile_get_face_ind_3d (search, extra_search,  &
01643                     send_info, len_cpl,                       &
01644                     send_mask, nreq, srcloc_ind, n_send,      &
01645                     ierror)
01646        Use PSMILe_common
01647 
01648        Type (Enddef_search),     Intent (In)  :: search
01649        Type (Extra_search_info), Intent (In)  :: extra_search
01650        Type (Send_information),  Intent (In)  :: send_info
01651        Integer,                  Intent (In)  :: nreq, n_send
01652        Integer,                  Intent (In)  :: len_cpl (search%npart)
01653        Logical,                  Intent (In)  :: send_mask (nreq)
01654        Integer,                  Intent (Out) :: srcloc_ind (ndim_3d, n_send)
01655        Integer,                  Intent (Out) :: ierror
01656     End Subroutine
01657 !
01658     subroutine psmile_get_face_ind_reg (search, extra_search, &
01659                     send_info, len_cpl,                       &
01660                     send_mask, nreq, srcloc_ind, n_send,      &
01661                     ierror)
01662        Use PSMILe_common
01663 
01664        Type (Enddef_search),     Intent (In)  :: search
01665        Type (Extra_search_info), Intent (In)  :: extra_search
01666        Type (Send_information),  Intent (In)  :: send_info
01667        Integer,                  Intent (In)  :: nreq, n_send
01668        Integer,                  Intent (In)  :: len_cpl (search%npart)
01669        Logical,                  Intent (In)  :: send_mask (nreq)
01670 !
01671        Integer,                  Intent (Out) :: srcloc_ind (ndim_3d, n_send)
01672        Integer,                  Intent (Out) :: ierror
01673     End Subroutine
01674 !
01675     subroutine psmile_get_faces_virtual_ind (search, extra_search, &
01676                     send_info, len_cpl,                            &
01677                     send_mask, nreq, virtual_ind, n_send,          &
01678                     ierror)
01679        Use PSMILe_common
01680 
01681        Type (Enddef_search),     Intent (In)  :: search
01682        Type (Extra_search_info), Intent (In)  :: extra_search
01683        Type (Send_information),  Intent (In)  :: send_info
01684        Integer,                  Intent (In)  :: nreq, n_send
01685        Integer,                  Intent (In)  :: len_cpl (search%npart)
01686        Logical,                  Intent (In)  :: send_mask (nreq)
01687 !
01688        Integer,                  Intent (Out) :: virtual_ind (n_send)
01689        Integer,                  Intent (Out) :: ierror
01690     End Subroutine
01691 
01692 !
01693     subroutine psmile_get_intersect (ninter, nmyint, nnull, &
01694                                      num_intersect_per_grid, &
01695                                      num_dummy_intersect_per_grid, &
01696                                      tag, ierror)
01697        Use PSMILe_common
01698        Integer,            Intent (In)  :: ninter, nmyint, nnull
01699        Integer,            Intent (In)  :: num_intersect_per_grid(:), 
01700                                            num_dummy_intersect_per_grid(:)
01701        Integer,            Intent (In)  :: tag
01702        Integer,            Intent (Out) :: ierror
01703     End Subroutine
01704 !
01705     subroutine psmile_get_locations_3d (msg_locations, ierror)
01706        Use PSMILe_common, only : enddef_msg_locations
01707 
01708        Type (enddef_msg_locations), Intent (In)  :: msg_locations
01709        Integer,                     Intent (Out) :: ierror
01710     End Subroutine
01711 !
01712     subroutine psmile_hash_extra (search, locs, hash, nlocs, &
01713                   mask_array, mask_shape, mask_available,    &
01714                   grid_valid_shape, ierror)
01715        Use PSMILe_common
01716 
01717        Type (Enddef_global_search), Intent (InOut) :: search
01718        Integer,                     Intent (In)    :: nlocs
01719        Logical,                     Intent (In)    :: mask_available
01720        Integer,                     Intent (In)    :: locs (ndim_3d, nlocs)
01721        Integer,                     Intent (In)    :: grid_valid_shape (2, 
01722                                                              ndim_3d)
01723        Integer,                     Intent (In)    :: mask_shape (2, ndim_3d)
01724        Logical,                     Intent (In)    ::    
01725           mask_array (mask_shape (1,1):mask_shape (2,1), 
01726                       mask_shape (1,2):mask_shape (2,2), 
01727                       mask_shape (1,3):mask_shape (2,3))
01728        Integer,                     Intent (Out)   :: hash (nlocs)
01729        Integer,                     Intent (Out)   :: ierror
01730     End Subroutine
01731 !
01732     subroutine psmile_locations_alloc (send_info, ierror)
01733        Use PSMILe_common
01734 
01735        Type(Send_information), Intent(Inout) :: send_info
01736        Integer, Intent (Out)                 :: ierror
01737     End Subroutine
01738 !
01739     subroutine psmile_locations_dealloc (send_info, ierror)
01740        Use PSMILe_common
01741 
01742        Type(Send_information), Intent(Inout) :: send_info
01743        Integer, Intent (Out)                 :: ierror
01744     End Subroutine
01745 !
01746     subroutine psmile_locations_direct (control, global, search, method_id, &
01747                                         dir_index, ierror)
01748        Use PSMILe_common
01749 
01750        Type (Enddef_search), Intent (InOut) :: search
01751        Integer,              Intent (In)    :: control (2, ndim_3d, *)
01752        Integer,              Intent (In)    :: global  (2, ndim_3d, *)
01753        Integer,              Intent (In)    :: method_id
01754        Integer,              Intent (Out)   :: ierror, dir_index
01755     End Subroutine
01756 !
01757     subroutine psmile_locations_gauss2 (found, loc, range, control, &
01758                                    search, method_id,               &
01759                                    dir_index, cpl_index, len_cpl, ierror)
01760        Use PSMILe_common
01761 
01762        Type (Enddef_search), Intent (InOut) :: search
01763        Type (integer_vector)                :: found (search%npart, 2)
01764        Type (integer_vector)                :: loc   (search%npart, 2)
01765        Integer, Intent (In)                 :: range   (2, ndim_2d, search%npart)
01766        Integer, Intent (In)                 :: control (2, ndim_2d, search%npart)
01767        Integer, Intent (In)                 :: method_id
01768        Integer, Intent (Out)                :: len_cpl (search%npart)
01769        Integer, Intent (Out)                :: ierror, cpl_index, dir_index
01770     End Subroutine
01771 !
01772     subroutine psmile_locations_irreg2 (found, loc, range, control, &
01773                     search, method_id, msk_required,       &
01774                     virtual_cell, virtual_cell_required,   &
01775                     dir_index, cpl_index, len_cpl, ierror)
01776        Use PSMILe_common
01777 
01778        Type (Enddef_search), Intent (InOut) :: search
01779        Type (integer_vector)                :: found (search%npart, 2)
01780        Type (integer_vector)                :: loc   (search%npart, 2)
01781        Type (integer_vector)                :: virtual_cell (search%npart)
01782        Integer,               Intent (In)   :: range   (2, ndim_2d, search%npart)
01783        Integer,               Intent (In)   :: control (2, ndim_2d, search%npart)
01784        Integer,               Intent (In)   :: method_id
01785        Logical,               Intent (In)   :: msk_required
01786        Logical,               Intent (In)   :: virtual_cell_required
01787 !
01788        Integer,               Intent (Out)  :: len_cpl (search%npart)
01789        Integer,               Intent (Out)  :: ierror, cpl_index, dir_index
01790     End Subroutine
01791 !
01792     subroutine psmile_locations_3d_mask (search, inter, shift, method_id, &
01793                                          dir_index, ierror)
01794        Use PSMILe_common
01795 
01796        Type (Enddef_search), Intent (InOut) :: search
01797        Integer, Intent (In)                 :: inter (2, ndim_3d, search%npart)
01798        Integer, Intent (In)                 :: shift (ndim_3d)
01799        Integer, Intent (In)                 :: method_id
01800        Integer, Intent (Out)                :: ierror, dir_index
01801     End Subroutine
01802 !
01803     subroutine psmile_locations_3d (found, loc, range, control,          &
01804                                     search, method_id, msk_required,     &
01805                                     virtual_cell, virtual_cell_required, &
01806                                     dir_index, cpl_index, len_cpl, ierror)
01807        Use PSMILe_common
01808 
01809        Type (Enddef_search), Intent (InOut) :: search
01810        Type (integer_vector)                :: found (search%npart)
01811        Type (integer_vector)                :: loc   (search%npart)
01812        Type (integer_vector)                :: virtual_cell (search%npart)
01813        Integer, Intent (In)                 :: range   (2, ndim_3d, *)
01814        Integer, Intent (In)                 :: control (2, ndim_3d, *)
01815        Integer, Intent (In)                 :: method_id
01816        Logical, Intent (In)                 :: msk_required
01817        Logical, Intent (In)                 :: virtual_cell_required
01818        Integer, Intent (Out)                :: len_cpl (search%npart)
01819        Integer, Intent (Out)                :: ierror, cpl_index, dir_index
01820     End Subroutine
01821 !
01822     subroutine psmile_locations_3d_reg (found, loc, range, control, &
01823                                         search, method_id,          &
01824                                         dir_index, cpl_index, len_cpl, ierror)
01825        Use PSMILe_common
01826 
01827        Type (Enddef_search), Intent (InOut) :: search
01828        Type (integer_vector)                :: found (search%npart, ndim_3d)
01829        Type (integer_vector)                :: loc   (search%npart, ndim_3d)
01830        Integer, Intent (In)                 :: range   (2, ndim_3d, search%npart)
01831        Integer, Intent (In)                 :: control (2, ndim_3d, search%npart)
01832        Integer, Intent (In)                 :: method_id
01833        Integer, Intent (Out)                :: len_cpl (search%npart)
01834        Integer, Intent (Out)                :: ierror, cpl_index, dir_index
01835     End Subroutine
01836 
01837     subroutine psmile_neigh_extra_points (search, extra_search,      &
01838                     mask_array, mask_shape, mask_available, use_how, &
01839                     grid_valid_shape,                                &
01840                     neighbors_3d, nloc, n_corners, len_cpl, ierror)
01841 
01842        Use PSMILe_common
01843 
01844        Type (Enddef_search),     Intent (In)    :: search
01845        Logical,                  Intent (In)    :: mask_array (*)
01846        Integer,                  Intent (In)    :: mask_shape (2, ndim_3d)
01847        Logical,                  Intent (In)    :: mask_available
01848        Integer,                  Intent (In)    :: use_how(3)
01849        Integer,                  Intent (In)    :: grid_valid_shape (2, ndim_3d)
01850        Integer,                  Intent (In)    :: nloc, n_corners
01851        Integer,                  Intent (In)    :: len_cpl (search%npart)
01852        Type (Extra_search_info), Intent (InOut) :: extra_search
01853        Integer,                  Intent (InOut) :: neighbors_3d (ndim_3d, nloc, 
01854                                                                  n_corners)
01855        Integer,                  Intent (Out)   :: ierror
01856     End Subroutine
01857 
01858     subroutine psmile_neigh_extra_search_clean (search, extra_search, ierror)
01859        Use PSMILe_common
01860 
01861        Type (Enddef_search),     Intent (In)    :: search
01862        Type (Extra_search_info), Intent (InOut) :: extra_search
01863        Integer,                  Intent (Out)   :: ierror
01864     End Subroutine
01865 
01866     subroutine psmile_neigh_extra_search_init (search, grid_id, &
01867                                                extra_search, ierror)
01868        Use PSMILe_common
01869 
01870        Type (Enddef_search),     Intent (In)    :: search
01871        Integer,                  Intent(In)     :: grid_id
01872        Type (Extra_search_info), Intent (InOut) :: extra_search
01873        Integer,                  Intent (Out)   :: ierror
01874     End Subroutine
01875 
01876     subroutine psmile_neigh_global_gauss2 (grid_id,                  &
01877                     mask_array, mask_shape, mask_available, use_how, &
01878                     grid_valid_shape,                                &
01879                     neighbors_3d, nloc, n_corners, search_required,  &
01880                     ierror)
01881        Use PSMILe_common
01882 
01883        Logical,                  Intent (In)    :: mask_array (*)
01884        Integer,                  Intent (In)    :: mask_shape (2, ndim_3d)
01885        Logical,                  Intent (In)    :: mask_available
01886        Integer,                  Intent (In)    :: grid_id, use_how
01887        Integer,                  Intent (In)    :: grid_valid_shape (2, ndim_3d)
01888        Integer,                  Intent (In)    :: nloc, n_corners
01889        Integer,                  Intent (InOut) :: neighbors_3d (ndim_3d, nloc, 
01890                                                                  n_corners)
01891        Integer,                  Intent (InOut) :: search_required (nloc)
01892        Integer,                  Intent (Out)   :: ierror
01893     End Subroutine
01894 
01895     subroutine psmile_neigh_global_points (search, extra_search,     &
01896                     mask_array, mask_shape, mask_available, use_how, &
01897                     grid_id, grid_valid_shape,                       &
01898                     neighbors_3d, nloc, n_corners, len_cpl, ierror)
01899 
01900        Use PSMILe_common
01901 
01902        Type (Enddef_search),     Intent (In)    :: search
01903        Logical,                  Intent (In)    :: mask_array (*)
01904        Integer,                  Intent (In)    :: mask_shape (2, ndim_3d)
01905        Logical,                  Intent (In)    :: mask_available
01906        Integer,                  Intent (In)    :: grid_id, use_how
01907        Integer,                  Intent (In)    :: grid_valid_shape (2, ndim_3d)
01908        Integer,                  Intent (In)    :: nloc, n_corners
01909        Integer,                  Intent (In)    :: len_cpl (search%npart)
01910 !
01911        Type (Extra_search_info), Intent (InOut) :: extra_search
01912        Integer,                  Intent (InOut) :: 
01913           neighbors_3d (ndim_3d, nloc, n_corners)
01914        Integer,                  Intent (Out)   :: ierror
01915     End Subroutine
01916 !
01917     subroutine psmile_recv_req_mask (sender, tag,      &
01918                                      search, recv_req, &
01919                                      recv_mask, new_search, ierror)
01920        Use PSMILe_common
01921 
01922        Integer,              Intent (In)    :: sender, tag
01923        Logical,              Intent (In)    :: recv_mask, new_search
01924        Type (Enddef_search), Intent (InOut) :: search
01925        Integer,              Intent (Out)   :: recv_req (ndim_3d+1, *)
01926        Integer,              Intent (Out)   :: ierror
01927     End Subroutine
01928 !
01929     subroutine psmile_recv_req_subgrid (msg_intersections,   &
01930                                         sender, tag, search, &
01931                                         recv_req, new_search, ierror)
01932        Use PSMILe_common
01933 
01934        Type (enddef_msg_intersections), Intent (In) :: msg_intersections
01935        Type (Enddef_search), Intent (InOut)         :: search
01936        Integer, Intent (In)                         :: sender, tag
01937        Integer, Intent (InOut)                      :: recv_req (ndim_3d+2, *)
01938        Logical, Intent (In)                         :: new_search
01939        Integer, Intent (Out)                        :: ierror
01940     End Subroutine
01941 !
01942     subroutine psmile_remove_intersect (inter, idl, idg, npart,  &
01943                     local_extent_info, global_extent_info, ierror)
01944        Use PSMILe_common
01945        Integer,          Intent (In)    :: 
01946           local_extent_info  (nd_extent_infos, *)
01947        Integer,          Intent (In)    :: 
01948           global_extent_info (nd_extent_infos, *)
01949        Integer,          Intent (InOut) :: npart
01950        Real (PSMILe_float_kind), Intent (InOut) :: inter (2, ndim_3d, npart)
01951        Integer,          Intent (InOut) :: idl (npart), idg (npart)
01952        Integer,          Intent (Out)   :: ierror
01953     End Subroutine
01954 !
01955     subroutine psmile_remove_intersect_int (inter, id1, id2, npart, ierror)
01956        Use PSMILe_common
01957        Integer,          Intent (InOut) :: npart
01958        Integer,          Intent (InOut) :: inter (2, ndim_3d, npart)
01959        Integer,          Intent (InOut) :: id1 (npart), id2 (npart)
01960        Integer,          Intent (Out)   :: ierror
01961     End Subroutine
01962 !
01963     subroutine psmile_return_locations_3d ( msg_intersections, &
01964                                    sender, method_id,          &
01965                                    dir_index, cpl_index,       &
01966                                    n_vars, n_vars_ret, ierror)
01967        Use PSMILe_common
01968 
01969        Integer, Intent (In)                         :: sender
01970        Integer, Intent (In)                         :: method_id
01971        Type (enddef_msg_intersections), intent (in) :: msg_intersections
01972        Integer, Intent (In)                         :: cpl_index, dir_index
01973        Integer, Intent (In)                         :: n_vars, n_vars_ret
01974        Integer, Intent (Out)                        :: ierror
01975     End Subroutine
01976 
01977     subroutine psmile_search_donor_cells (search, tol, ierror)
01978        Use PSMILe_common
01979 
01980        Type (Enddef_search), Intent (InOut) :: search
01981        Double Precision,     Intent (In)    :: tol
01982        Integer,              Intent (Out)   :: ierror
01983     End Subroutine
01984 
01985     subroutine psmile_search_donor_extra (search_global, tol, ierror)
01986        Use PSMILe_common
01987 
01988        Type (Enddef_global_search), Intent (InOut) :: search_global
01989        Double Precision,            Intent (In)    :: tol
01990        Integer,                     Intent (Out)   :: ierror
01991     End Subroutine
01992 
01993     subroutine psmile_search_donor_extra_off (comp_info, search, &
01994                       var_id, tol, ierror)
01995        Use PSMILe_common
01996 
01997        Type (Enddef_comp),          Intent (In)    :: comp_info
01998        Integer,                     Intent (In)    :: var_id
01999        Double Precision,            Intent (In)    :: tol
02000        Type (Enddef_global_search), Intent (InOut) :: search
02001        Integer,                     Intent (Out)   :: ierror
02002     End Subroutine
02003 
02004 
02005     subroutine psmile_search_donor_extra_nn (comp_info, &
02006                       search, var_id, tol, ierror)
02007        Use PSMILe_common
02008 
02009        Type (Enddef_comp),          Intent (In)    :: comp_info
02010        Integer,                     Intent (In)    :: var_id
02011        Double Precision,            Intent (In)    :: tol
02012        Type (Enddef_global_search), Intent (InOut) :: search
02013        Integer,                     Intent (Out)   :: ierror
02014     End Subroutine
02015 
02016     subroutine psmile_search_donor_gridless (comp_info, search,          &
02017                                              field_list, n_vars,         &
02018                                              grid_id, method_id, var_id, &
02019                                              ierror)
02020        Use PSMILe_common
02021 
02022        Type (Enddef_comp),   Intent (In)    :: comp_info
02023        Type (Enddef_search), Intent (InOut) :: search
02024        Integer,              Intent (In)    :: grid_id
02025        Integer,              Intent (InOut) :: method_id, var_id
02026        Integer,              Intent (In)    :: n_vars
02027        Integer,              Intent (In)    :: field_list (nd_field_list, n_vars)
02028        Integer,              Intent (Out)   :: ierror
02029     End Subroutine
02030 !
02031     subroutine psmile_send_req_mask (msg_intersections, &
02032                                      dest, tag, ierror)
02033        use psmile_common, only : enddef_msg_intersections
02034 
02035        Integer, Intent (In)                         :: dest, tag
02036        Type (enddef_msg_intersections), Intent (In) :: msg_intersections
02037        Integer, Intent (Out)                        :: ierror
02038     End Subroutine
02039 !
02040     subroutine psmile_send_req_subgrid (msg_intersections, &
02041                                         dest, tag, ierror)
02042        use psmile_common, only : enddef_msg_intersections
02043 
02044        Integer, Intent (In)                         :: dest, tag
02045        Type (enddef_msg_intersections), Intent (In) :: msg_intersections
02046        Integer, Intent (Out)                        :: ierror
02047     End Subroutine
02048 
02049     subroutine psmile_transform_gauss2 ( search, glen, map_shape,  &
02050                         map, locations, found, glocations, gfound, &
02051                         cell_based_switch, nlev, grid_valid_shape, &
02052                         ierror )
02053       Use PSMILe_Common
02054 
02055       Type (Enddef_search)                  :: search
02056       Integer, Intent (In)                  :: glen (search%npart, ndim_2d)
02057       Integer, Intent (In)                  :: map_shape(ndim_3d)
02058       Integer, Intent (In)                  :: map (map_shape(1), 
02059                                                     map_shape(2), 
02060                                                     map_shape(3))
02061       Logical, Intent (In)                  :: cell_based_switch
02062       Integer, Intent (In)                  :: nlev
02063       Integer, Intent (In)                  :: grid_valid_shape(2)
02064       Type (integer_vector), Intent (In)    :: locations (search%npart, ndim_3d)
02065       Type (integer_vector), Intent (In)    :: found (search%npart, ndim_3d)
02066       Type (integer_vector), Intent (InOut) :: glocations (search%npart, ndim_2d)
02067       Type (integer_vector), Intent (InOut) :: gfound (search%npart, ndim_2d)
02068       Integer,               Intent (Out)   :: ierror
02069     End Subroutine
02070 
02071     subroutine psmile_trans_loc2glob_3d (grid_id, &
02072                     ibuf, len_item, nloc, ierror)
02073       Integer,              Intent (In)    :: grid_id, len_item, nloc
02074 !
02075       Integer,              Intent (InOut) :: ibuf (len_item, nloc)
02076       Integer,              Intent (Out)   :: ierror
02077     End Subroutine
02078 
02079     subroutine psmile_trans_loc2glob_gauss2 (grid_id, &
02080                     ibuf, len_item, nloc, ierror)
02081       Integer,              Intent (In)    :: grid_id, len_item, nloc
02082 !
02083       Integer,              Intent (InOut) :: ibuf (len_item, nloc)
02084       Integer,              Intent (Out)   :: ierror
02085     End Subroutine
02086 
02087     subroutine psmile_tricu_3d_extra_off (comp_info, search,   &
02088                     mask_array, mask_shape, mask_available,    &
02089                     ibuf, len_item, n_send, num_neigh,         &
02090                     grid_valid_shape, cyclic, ierror)
02091        Use PSMILe_common
02092 
02093        Type (Enddef_comp),   Intent (In)    :: comp_info
02094        Integer,              Intent (In)    :: mask_shape (2, ndim_3d)
02095        Logical,              Intent (In)    :: mask_array (mask_shape (1,1): 
02096                                                            mask_shape (2,1), 
02097                                                            mask_shape (1,2): 
02098                                                            mask_shape (2,2), 
02099                                                            mask_shape (1,3): 
02100                                                            mask_shape (2,3))
02101        Logical,              Intent (In)    :: mask_available
02102        Logical,              Intent (In)    :: cyclic (ndim_3d)
02103        Integer,              Intent (In)    :: len_item, n_send, num_neigh
02104        Integer,              Intent (In)    :: grid_valid_shape (2, ndim_3d)
02105        Type (Enddef_global_search), Intent (InOut) :: search
02106        Integer,              Intent (InOut) :: ibuf (len_item, n_send)
02107        Integer,              Intent (Out)   :: ierror
02108     End Subroutine
02109 
02110     subroutine psmile_trili_3d_extra_off (comp_info, search, grid_id, &
02111                     mask_array, mask_shape, mask_available,           &
02112                     ibuf, len_item, n_send, num_neigh,                &
02113                     ierror)
02114        Use PSMILe_common
02115 
02116        Type (Enddef_comp),   Intent (In)    :: comp_info
02117        Integer,              Intent (In)    :: mask_shape (2, ndim_3d)
02118        Logical,              Intent (In)    :: mask_array (mask_shape (1,1): 
02119                                                            mask_shape (2,1), 
02120                                                            mask_shape (1,2): 
02121                                                            mask_shape (2,2), 
02122                                                            mask_shape (1,3): 
02123                                                            mask_shape (2,3))
02124        Logical,              Intent (In)    :: mask_available
02125        Integer,              Intent (In)    :: grid_id
02126        Integer,              Intent (In)    :: len_item, n_send, num_neigh
02127        Type (Enddef_global_search), Intent (InOut) :: search
02128        Integer,              Intent (InOut) :: ibuf (len_item, n_send)
02129        Integer,              Intent (Out)   :: ierror
02130     End Subroutine
02131 
02132     subroutine psmile_mg_found_loc_to_3d (search, nlev,  &
02133                     source_grid_type,                    &
02134                     found, locations, len,               &
02135                     virtual_cell, virtual_cell_required, &
02136                     found_3d, locations_3d, virtual_3d, ierror)
02137        Use PSMILe_common
02138 
02139        Type (Enddef_search),  Intent (In)   :: search
02140        Integer,               Intent (In)   :: nlev
02141        Integer,               Intent (In)   :: source_grid_type
02142        Type (integer_vector), Intent (In)   :: found (search%npart, ndim_3d)
02143        Type (integer_vector), Intent (In)   :: locations (search%npart, ndim_3d)
02144        Type (integer_vector), Intent (In)   :: virtual_cell (search%npart)
02145        Logical,               Intent (In)   :: virtual_cell_required
02146        Integer,               Intent (In)   :: len (search%npart, *)
02147        Type (integer_vector), Intent (Out)  :: found_3d (search%npart)
02148        Type (integer_vector), Intent (Out)  :: locations_3d (search%npart)
02149        Type (integer_vector), Intent (Out)  :: virtual_3d (search%npart)
02150        Integer,               Intent (Out)  :: ierror
02151     End Subroutine
02152 !
02153     subroutine psmile_store_dest_locs_21d (found,  range,  control,     &
02154                                            foundz,send_info, nloc, opt, &
02155                                            nprev, nadd, ierror)
02156        Use PSMILe_common
02157        Integer, Intent (In)                  :: range   (2, ndim_3d)
02158        Integer, Intent (In)                  :: control (2, ndim_3d)
02159        Integer, Intent (In)                  :: found (*), foundz (*)
02160        Integer, Intent (In)                  :: nloc, nprev, opt
02161        Type(Send_information), Intent(Inout) :: send_info
02162        Integer, Intent (Out)                 :: ierror, nadd
02163     End Subroutine
02164 !
02165     subroutine psmile_store_dest_locs_3d (found, loc, range, control, &
02166                                           send_info, nloc, opt, &
02167                                           nprev, nadd, ierror)
02168        Use PSMILe_common
02169        Integer, Intent (In)                  :: range   (2, ndim_3d)
02170        Integer, Intent (In)                  :: control (2, ndim_3d)
02171 
02172        Integer, Intent (In)                  :: found (*)
02173        Integer, Intent (In)                  :: loc (ndim_3d, *)
02174        Integer, Intent (In)                  :: nloc, nprev, opt
02175        Type(Send_information), Intent(Inout) :: send_info
02176        Integer, Intent (Out)                 :: ierror, nadd
02177     End Subroutine
02178 !
02179     subroutine psmile_store_dest_locs_3d_msk (mask_array, mask_shape, &
02180                                           inter, send_info, nloc, &
02181                                           nprev, nadd, ierror)
02182        Use PSMILe_common
02183        Integer,                Intent (In)   :: mask_shape (2, ndim_3d)
02184        Logical,                Intent (In)   :: mask_array (                    
02185                                                 mask_shape(1,1):mask_shape(2,1),
02186                                                 mask_shape(1,2):mask_shape(2,2),
02187                                                 mask_shape(1,3):mask_shape(2,3))
02188        Integer,                Intent (In)   :: inter (2, ndim_3d)
02189        Integer,                Intent (In)   :: nloc, nprev
02190        Type(Send_information), Intent(Inout) :: send_info
02191        Integer,                Intent (Out)  :: ierror, nadd
02192     End Subroutine
02193 !
02194     subroutine psmile_store_dest_locs_3d_reg (found, loc, range, control, &
02195                                               send_info, nloc, opt, &
02196                                               nprev, nadd, ierror)
02197        Use PSMILe_common
02198        Integer, Intent (In)                  :: range   (2, ndim_3d)
02199        Integer, Intent (In)                  :: control (2, ndim_3d)
02200 
02201        Type (integer_vector), Intent (In)    :: found  (ndim_3d)
02202        Type (integer_vector), Intent (In)    :: loc  (ndim_3d)
02203        Integer, Intent (In)                  :: nloc, nprev, opt
02204        Type(Send_information), Intent(Inout) :: send_info
02205        Integer, Intent (Out)                 :: ierror, nadd
02206     End Subroutine
02207 !
02208     subroutine psmile_store_mask_locs_3d ( ipart, range,  control,  found,  &
02209                                            send_info, nprev, ncpl, ierror )
02210        Use PSMILe_common
02211        Integer, Intent(In)                   :: ipart
02212        Integer, Intent(In)                   :: range  (2,ndim_3d)
02213        Integer, Intent(In)                   :: control(2,ndim_3d)
02214        Integer, Intent(In)                   :: found ( range(1,1):range(2,1), 
02215                                                         range(1,2):range(2,2), 
02216                                                         range(1,3):range(2,3))
02217        Type(Send_information), Intent(InOut) :: send_info
02218        Integer, Intent(In)                   :: nprev
02219        Integer, Intent(In)                   :: ncpl
02220 
02221        Integer, Intent(Out)                  :: ierror
02222 
02223     End Subroutine
02224 
02225     subroutine psmile_store_source_locs_1d (found,  loc,  ibeg, len, &
02226                                             send_info, nloc, opt, ialloc, ipart,&
02227                                             nprev, nadd, ierror)
02228        Use PSMILe_common
02229        Integer, Intent (In)                  :: ibeg, len
02230        Integer, Intent (In)                  :: found (*)
02231        Integer, Intent (In)                  :: loc (*)
02232        Integer, Intent (In)                  :: nloc, nprev, opt, ialloc, ipart
02233        Type(Send_information), Intent(Inout) :: send_info
02234        Integer, Intent (Out)                 :: ierror, nadd
02235     End Subroutine
02236 !
02237     subroutine psmile_store_source_locs_2d (found,  loc,  ibeg, len, &
02238                                             send_info, nloc, opt, ialloc, ipart,&
02239                                             nprev, nadd, ierror)
02240        Use PSMILe_common
02241        Integer, Intent (In)                  :: ibeg, len
02242        Integer, Intent (In)                  :: found (*)
02243        Integer, Intent (In)                  :: loc (ndim_2d, *)
02244        Integer, Intent (In)                  :: nloc, nprev, opt, ialloc, ipart
02245        Type(Send_information), Intent(Inout) :: send_info
02246        Integer, Intent (Out)                 :: ierror, nadd
02247     End Subroutine
02248 !
02249     subroutine psmile_store_source_locs_3d (found, loc, ibeg, len, &
02250                                             send_info, nloc, opt,  &
02251                                             nprev, nadd, ierror)
02252        Use PSMILe_common
02253        Integer, Intent (In)                  :: ibeg, len
02254        Integer, Intent (In)                  :: found (*)
02255        Integer, Intent (In)                  :: loc (ndim_3d, *)
02256        Integer, Intent (In)                  :: nloc, nprev, opt
02257        Type(Send_information), Intent(Inout) :: send_info
02258        Integer, Intent (Out)                 :: ierror, nadd
02259     End Subroutine
02260 !
02261     subroutine psmile_store_source_locs_3d_msk (mask_array, mask_shape, &
02262                                                 inter, send_info, nloc, &
02263                                                 nprev, nadd, ierror)
02264        Use PSMILe_common
02265        Integer,                Intent (In)   :: mask_shape (2, ndim_3d)
02266        Logical,                Intent (In)   :: mask_array (                    
02267                                                 mask_shape(1,1):mask_shape(2,1),
02268                                                 mask_shape(1,2):mask_shape(2,2),
02269                                                 mask_shape(1,3):mask_shape(2,3))
02270        Integer,                Intent (In)   :: inter (2, ndim_3d)
02271        Integer,                Intent (In)   :: nloc, nprev
02272        Type(Send_information), Intent(Inout) :: send_info
02273        Integer,                Intent (Out)  :: ierror, nadd
02274     End Subroutine
02275 !
02276     subroutine psmile_store_source_locs_3d_reg (               &
02277                     found, loc, range, control,                &
02278                     send_info, nloc, opt, nprev, nadd, ierror)
02279        Use PSMILe_common
02280        Integer,                Intent (In)   :: range   (2, ndim_3d)
02281        Integer,                Intent (In)   :: control (2, ndim_3d)
02282        Type (integer_vector),  Intent (In)   :: found  (ndim_3d)
02283        Type (integer_vector),  Intent (In)   :: loc    (ndim_3d)
02284        Integer,                Intent (In)   :: nloc, nprev, opt
02285 !
02286        Type(Send_information), Intent(InOut) :: send_info
02287        Integer,                Intent (Out)  :: ierror, nadd
02288     End Subroutine
02289 !
02290     subroutine psmile_store_source_virt_3d (                           &
02291                     found, virtual_cell, ibeg, len,                    &
02292                     send_info, nloc, opt, ialloc, ipart, nprev, ierror)
02293        Use PSMILe_common
02294 !
02295        Integer,                Intent (In)   :: ibeg, len
02296        Integer,                Intent (In)   :: found (len)
02297        Integer,                Intent (In)   :: virtual_cell (len)
02298        Integer,                Intent (In)   :: nloc, nprev, opt
02299        Integer,                Intent (In)   :: ialloc, ipart
02300 !
02301        Type(Send_information), Intent(InOut) :: send_info
02302        Integer,                Intent (Out)  :: ierror
02303     End Subroutine
02304 !
02305     subroutine psmile_send_destinations (            &
02306                     method_id, cpl_index, dir_index, &
02307                     sender, tag, ierror)
02308        Integer,                Intent (In)   :: method_id
02309        Integer,                Intent (In)   :: cpl_index, dir_index
02310        Integer,                Intent (In)   :: sender, tag
02311 !
02312        Integer,                Intent (Out)  :: ierror
02313     End Subroutine
02314 !
02315 !   Multigrid for seach of donor cells
02316 !
02317     subroutine psmile_mg_clean (ierror)
02318        Integer,                Intent (Out)  :: ierror
02319     End Subroutine
02320 
02321     subroutine psmile_mg_setup (grid_id, range, tol, ierror)
02322        Use PSMILe_common
02323        Integer, Intent (In)               :: grid_id
02324        Integer, Intent (In)               :: range (2, ndim_3d)
02325        Double Precision, Intent (In)      :: tol
02326        Integer, Intent (Out)              :: ierror
02327     End Subroutine
02328 
02329     subroutine psmile_mg_first_level (grid_id, range, &
02330                     mg_info, tol, simplified_grid, ierror)
02331        Use PSMILe_common
02332        Integer,          Intent (In)    :: grid_id
02333        Integer,          Intent (In)    :: range (2, ndim_3d)
02334        Type (Enddef_mg), Intent (InOut) :: mg_info
02335        Real (PSMILe_float_kind), Intent (In) :: tol
02336        Logical,          Intent (In)    :: simplified_grid
02337        Integer,          Intent (Out)   :: ierror
02338     End Subroutine
02339 
02340     Logical Function PSMILe_to_be_coupled (comp_id1, comp_id2)
02341        Integer, Intent (In)           :: comp_id1, comp_id2
02342     End Function
02343 
02344     subroutine psmile_mg_coars_level (grid_id, mg_info_fine, &
02345                                       mg_info_coarse, &
02346                                       icoarse, ierror)
02347        Use PSMILe_common
02348 
02349        Integer, Intent (In)            :: grid_id
02350        Type (Enddef_mg), Intent (In)   :: mg_info_fine
02351        Type (Enddef_mg), Intent (InOut):: mg_info_coarse
02352        Integer, Intent (In)            :: icoarse (ndim_3d)
02353        Integer, Intent (Out)           :: ierror
02354     End Subroutine
02355 
02356     subroutine psmile_mg_get_cyclic (grid_id, range, &
02357                                      tol, ierror)
02358        Use PSMILe_common
02359 
02360        Integer, Intent (In)            :: grid_id
02361        Integer, Intent (In)            :: range (2, ndim_3d)
02362        Double Precision, Intent (In)   :: tol
02363        Integer, Intent (Out)           :: ierror
02364     End Subroutine
02365 
02366 ! Get info's on all active components in all processes
02367 
02368     subroutine psmile_get_act_comps (a_comps, nd_acomps, n_act, ierror)
02369        Integer, Intent (In)            :: nd_acomps
02370        Integer, Intent (Out)           :: a_comps (nd_acomps, *)
02371        Integer, Intent (Out)           :: ierror, n_act
02372     End Subroutine
02373 
02374 ! Get extension of SubGrids
02375 
02376     subroutine psmile_get_grid_extent (grid_id, extent, ierror)
02377        Use PSMILe_common
02378        Integer,                  Intent (In)  :: grid_id
02379        Real (PSMILe_float_kind), Intent (Out) :: extent (2, ndim_3d)
02380        Integer,                  Intent (Out) :: ierror
02381     End Subroutine
02382 
02383 ! Select range of a subgrid (intersection)
02384 
02385     subroutine psmile_sel_grid_range (grid_id, dinter, inter, ierror)
02386        Use PSMILe_common
02387        Integer,                  Intent (In)  :: grid_id
02388        Real (PSMILe_float_kind), Intent (In)  :: dinter (2, ndim_3d)
02389        Integer,                  Intent (Out) ::  inter (2, ndim_3d)
02390        Integer,                  Intent (Out) :: ierror
02391     End Subroutine
02392 
02393 ! Generate compact list of entries
02394 
02395     subroutine psmile_compact_locations ( grid_id, search, ndim, found, ierror )
02396       Use PSMILe_common
02397       Integer,                  Intent (In) :: grid_id
02398       Type (Enddef_search), Intent (In)     :: search
02399       Integer,                  Intent (In) :: ndim
02400       Type (integer_vector), Intent (InOut) :: found (search%npart, ndim)
02401       Integer, Intent (Out)                 :: ierror
02402 
02403     End Subroutine
02404 
02405     subroutine psmile_compact_neighbors_3d (neighbors_3d, nloc, num_neigh,  &
02406                                             grid_valid_shape, extra_search, &
02407                                             send_info, neighbors, ierror)
02408        Use PSMILe_common
02409 
02410        Integer, Intent (In)            :: nloc, num_neigh
02411        Integer, Intent (In)            :: neighbors_3d (ndim_3d, nloc, num_neigh)
02412        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
02413        Type(Extra_search_info), Intent(in)      :: extra_search
02414        Type (Send_information), Intent (InOut)  :: send_info
02415        Integer, Intent (Out)           :: neighbors (nloc, num_neigh)
02416        Integer, Intent (Out)           :: ierror
02417     End Subroutine
02418 !
02419     subroutine psmile_move0_neighbors (neighbors, nloc, num_neigh, ierror)
02420        Integer, Intent (In)            :: nloc, num_neigh
02421        Integer, Intent (InOut)         :: neighbors (nloc, num_neigh)
02422        Integer, Intent (Out)           :: ierror
02423     End Subroutine
02424 
02425 ! Utilities
02426 
02427     subroutine psmile_quicksort ( a, n )
02428       Integer, Intent(In)                  :: n
02429       Integer, Intent(InOut)               :: a(n)
02430     End Subroutine PSMILe_Quicksort
02431 
02432     subroutine psmile_quicksort_index ( a, n, t )
02433       Integer, Intent(In)                  :: n
02434       Integer, Intent(InOut)               :: a(n)
02435       Integer, Intent(InOut)               :: t(n)
02436     End Subroutine PSMILe_Quicksort_index
02437 
02438     subroutine psmile_type_create_subarray (ndims, array_of_sizes,  &
02439                                 array_of_subsizes, array_of_starts, &
02440                                 oldtype, newtype, ierror)
02441        Integer,            Intent (In)  :: ndims, oldtype
02442        Integer,            Intent (In)  :: array_of_sizes (ndims)
02443        Integer,            Intent (In)  :: array_of_subsizes (ndims)
02444        Integer,            Intent (In)  :: array_of_starts (ndims)
02445        Integer,            Intent (Out) :: newtype
02446        Integer,            Intent (Out) :: ierror
02447     End Subroutine
02448 
02449 ! Blocking send
02450 
02451     subroutine psmile_bsend_init (ftypes, flengths, number_of_ftypes, ierror)
02452        Integer, Intent (In)            :: number_of_ftypes
02453        Integer, Intent (In)            :: ftypes (number_of_ftypes)
02454        Integer, Intent (In)            :: flengths (number_of_ftypes)
02455        Integer, Intent (Out)           :: ierror
02456     End Subroutine
02457 
02458 !
02459 !   ------ Routines for Integer variables -----------
02460 !
02461 
02462 ! Utilities
02463 
02464     subroutine psmile_copy_subarray_3d_int (dest_vector, size, &
02465                iarray, idlow, idhigh, jdlow, jdhigh, kdlow, kdhigh, &
02466                sub, ierror)
02467        Use PSMILe_common
02468 
02469        Integer(kind=int64), Intent (In) :: size
02470        Integer, Intent (In)             :: idlow, idhigh, jdlow, jdhigh, 
02471                                            kdlow, kdhigh
02472        Integer, Intent (In)             :: sub (2, ndim_3d)
02473        Integer, Intent (In)             :: iarray (idlow:idhigh, jdlow:jdhigh, 
02474                                                    kdlow:kdhigh)
02475        Integer, Intent (Out)            :: dest_vector (size)
02476        Integer, Intent (Out)            :: ierror
02477     End Subroutine
02478 
02479 ! Get and Put
02480 
02481     subroutine psmile_ext_compact_list_log2int (send_info, extra_search,        &
02482                                                 array, shape, grid_valid_shape, &
02483                                                 dest_vector, dest_size, ierror)
02484        Use PSMILe_common
02485        Type(Send_information), Intent(In) :: send_info
02486        Type (Extra_search_info), Intent (InOut) :: extra_search
02487        Logical, Intent (In)               :: array (*)
02488        Integer, Intent (In)               :: shape (2, ndim_3d)
02489        Integer, Intent (In)               :: grid_valid_shape (2, ndim_3d)
02490        Integer, Intent (In)               :: dest_size
02491        Integer, Intent (Out)              :: dest_vector (dest_size)
02492        Integer, Intent (Out)              :: ierror
02493     End Subroutine
02494 
02495     subroutine psmile_ext_compact_list_3d_int (send_info, array, shape, &
02496                                                grid_valid_shape,        &
02497                                                dest_vector, dest_size, ierror)
02498        Use PSMILe_common
02499        Type(Send_information), Intent(In) :: send_info
02500        Integer, Intent (In)               :: array (*)
02501        Integer, Intent (In)               :: shape (2, ndim_3d)
02502        Integer, Intent (In)               :: grid_valid_shape (2, ndim_3d)
02503        Integer, Intent (In)               :: dest_size
02504        Integer, Intent (Out)              :: dest_vector (dest_size)
02505        Integer, Intent (Out)              :: ierror
02506     End Subroutine
02507 
02508     subroutine psmile_extract_indices_3d_int (array, shape, &
02509                                               dstijk, ncpl, &
02510                                               dest_vector, ierror)
02511        Use PSMILe_common
02512        Integer, Intent (In)               :: array (*)
02513        Integer, Intent (In)               :: shape (2, ndim_3d)
02514        Integer, Intent (In)               :: ncpl
02515        Integer, Intent (In)               :: dstijk (ndim_3d, ncpl)
02516        Integer, Intent (Out)              :: dest_vector (ncpl)
02517        Integer, Intent (Out)              :: ierror
02518     End Subroutine
02519 
02520     subroutine psmile_get_field_int (field_id, data_array, len, &
02521                                      nbr_fields, ierror)
02522 
02523        Integer, Intent (In)          :: field_id
02524        Integer, Intent (In)          :: len, nbr_fields
02525        Integer, Intent (InOut)       :: data_array(*)
02526        Integer, Intent (Out)         :: ierror
02527     End Subroutine
02528 
02529     subroutine psmile_get_irr_field_int (data_array, data_shape, nbr_fields,  &
02530                                          dstijk, npoints, dstars, nars, nloc, &
02531                                          source, tag, comm, ierror)
02532        Use PSMILe_common
02533 
02534        Integer, Intent (In)          :: nars, nloc, npoints, nbr_fields
02535        Integer, Intent (In)          :: source, tag, comm
02536        Integer, Intent (In)          :: data_shape (2, ndim_3d)
02537        Integer, Intent (In)          :: dstijk (ndim_3d, npoints)
02538        Integer, Intent (In)          :: dstars (2, ndim_3d, nars)
02539        Integer, Intent (InOut)       :: data_array (*)
02540        Integer, Intent (Out)         :: ierror
02541     End Subroutine
02542 
02543     subroutine psmile_put_compact_list_3d_int (source_list, dstijk, nloc, &
02544                                                array, shape, nbr_fields,  &
02545                                                ierror)
02546        Use PSMILe_common
02547        Integer, Intent (InOut)            :: array (*)
02548        Integer, Intent (In)               :: shape (2, ndim_3d)
02549        Integer, Intent (In)               :: nloc, nbr_fields
02550        Integer, Intent (In)               :: dstijk (ndim_3d, nbr_fields)
02551        Integer, Intent (In)               :: source_list (nloc, nbr_fields)
02552        Integer, Intent (Out)              :: ierror
02553     End Subroutine
02554 
02555     subroutine psmile_put_field_int (field_id, task_id, data_array, len, &
02556                                      nbr_fields, ierror)
02557 
02558        Integer, Intent (In)          :: field_id
02559        Integer, Intent (In)          :: task_id
02560        Integer, Intent (In)          :: len, nbr_fields
02561        Integer, Intent (In)          :: data_array(*)
02562        Integer, Intent (Out)         :: ierror
02563     End Subroutine
02564 
02565     subroutine psmile_put_field_gauss2_int  (data_array, data_shape, nbr_fields, &
02566                                           srcloc, nparts, nloc, npoints, &
02567                                           dest, tag, comm, ierror)
02568        Use PSMILe_common
02569 
02570        Integer, Intent (In)          :: nloc, dest, tag, comm, nbr_fields
02571        Integer, Intent (In)          :: nparts
02572        Integer, Intent (In)          :: npoints (2, nparts)
02573        Integer, Intent (In)          :: data_shape (2, ndim_3d)
02574        Type (integer_vector), Intent (In) :: srcloc (2, nparts)
02575        Integer, Intent (In)          :: data_array (*)
02576        Integer, Intent (Out)         :: ierror
02577     End Subroutine
02578 
02579     subroutine psmile_put_field_21d_int  (data_array, data_shape, nbr_fields, &
02580                                           srcloc, nparts, nloc, npoints, &
02581                                           dest, tag, comm, ierror)
02582        Use PSMILe_common
02583 
02584        Integer, Intent (In)          :: nloc, dest, tag, comm, nbr_fields
02585        Integer, Intent (In)          :: nparts
02586        Integer, Intent (In)          :: npoints (2, nparts)
02587        Integer, Intent (In)          :: data_shape (2, ndim_3d)
02588        Type (integer_vector), Intent (In) :: srcloc (2, nparts)
02589        Integer, Intent (In)          :: data_array (*)
02590        Integer, Intent (Out)         :: ierror
02591     End Subroutine
02592 
02593     subroutine psmile_put_field_3d_int  (data_array, data_shape, nbr_fields, &
02594                                          srcloc, nparts, nloc, npoints, &
02595                                          dest, tag, comm, ierror)
02596        Use PSMILe_common
02597 
02598        Integer, Intent (In)          :: nloc, dest, tag, comm, nbr_fields
02599        Integer, Intent (In)          :: nparts
02600        Integer, Intent (In)          :: npoints (ndim_3d, nparts)
02601        Integer, Intent (In)          :: data_shape (2, ndim_3d)
02602        Type (integer_vector), Intent (In) :: srcloc (ndim_3d, nparts)
02603        Integer, Intent (In)          :: data_array (*)
02604        Integer, Intent (Out)         :: ierror
02605     End Subroutine
02606 
02607     subroutine psmile_put_irr_field_int  (data_array, data_shape, nbr_fields,  &
02608                                           srcloc, npoints, srcars, nars, nloc, &
02609                                           dest, tag, comm, ierror)
02610        Use PSMILe_common
02611 
02612        Integer, Intent (In)          :: nars, nloc, npoints, nbr_fields
02613        Integer, Intent (In)          :: dest, tag, comm
02614        Integer, Intent (In)          :: data_shape (2, ndim_3d)
02615        Integer, Intent (In)          :: srcloc (ndim_3d, npoints)
02616        Integer, Intent (In)          :: srcars (2, ndim_3d, nars)
02617        Integer, Intent (In)          :: data_array (*)
02618        Integer, Intent (Out)         :: ierror
02619     End Subroutine
02620 !
02621 !   ------ Routines for Logical variables -----------
02622 !
02623 
02624 ! Utilities
02625 
02626     subroutine psmile_copy_subarray_2d_log (dest_vector, size, &
02627                darray, idlow, idhigh, jdlow, jdhigh, &
02628                        ibeg,  iend,   jbeg,  jend,   ierror)
02629        Use PSMILe_common
02630        Integer(kind=int64), Intent (In) :: size
02631        Integer, Intent (In)             :: idlow, idhigh, jdlow, jdhigh
02632        Integer, Intent (In)             :: ibeg,  iend,   jbeg,  jend
02633        Logical, Intent (In)             :: darray (idlow:idhigh, jdlow:jdhigh)
02634        Logical, Intent (Out)            :: dest_vector (size)
02635        Integer, Intent (Out)            :: ierror
02636     End Subroutine
02637 
02638     subroutine psmile_copy_subarray_3d_log  (dest_vector, size, &
02639                iarray, idlow, idhigh, jdlow, jdhigh, kdlow, kdhigh, &
02640                sub, ierror)
02641        Use PSMILe_common
02642 
02643        Integer(kind=int64), Intent (In)  :: size
02644        Integer,             Intent (In)  :: idlow, idhigh, jdlow, jdhigh, 
02645                                             kdlow, kdhigh
02646        Integer,             Intent (In)  :: sub (2, ndim_3d)
02647        Logical,             Intent (In)  :: iarray (idlow:idhigh, jdlow:jdhigh, 
02648                                                     kdlow:kdhigh)
02649        Logical,             Intent (Out) :: dest_vector (size)
02650        Integer,             Intent (Out) :: ierror
02651     End Subroutine
02652 
02653 !
02654 !   ------ Routines for Single Precision ------------
02655 !
02656 
02657     subroutine psmile_add_nn_found_real (search, extra_search,  &
02658                       index_sent, found, n_send,                &
02659                       index_found, distance, n_found, nb_extra, &
02660                       selected, sel_info, nrecv, ierror)
02661        Use PSMILe_common
02662 
02663        Integer,           Intent (InOut) :: nrecv
02664        Type (Enddef_search),      Intent (In)    :: search
02665        Type (Extra_search_info),  Intent (InOut) :: extra_search
02666        Type (Select_search_info), Intent (InOut) :: sel_info (nrecv)
02667        Integer,           Intent (In)    :: nb_extra, n_found, n_send
02668        Integer,           Intent (In)    :: index_sent  (n_send)
02669        Integer,           Intent (In)    :: found (n_send)
02670        Integer,           Intent (In)    :: index_found (n_found)
02671        Real,              Intent (In)    :: distance (n_found)
02672        Integer,           Intent (InOut) :: selected (2, extra_search%n_extra)
02673        Integer,           Intent (Out)   :: ierror
02674     End Subroutine
02675 
02676     subroutine psmile_bbcells_1d_real (array, shape, range, &
02677                                        corners, corner_shape, nbr_corners, &
02678                                        chmin, chmax, levdim, ierror)
02679        Integer,           Intent (In)  :: shape (2)
02680        Integer,           Intent (In)  :: range (2)
02681        Real,              Intent (In)  :: array (shape(1):shape(2))
02682        Integer,           Intent (In)  :: corner_shape (2), nbr_corners
02683        Real,              Intent (In)  :: corners (corner_shape(1):corner_shape(2), 
02684                                                    nbr_corners)
02685        Integer,           Intent (In)  :: levdim
02686        Real,              Intent (Out) :: chmin (range(1)-1:range(2))
02687        Real,              Intent (Out) :: chmax (range(1)-1:range(2))
02688        Integer,           Intent (Out) :: ierror
02689     End Subroutine
02690 
02691     subroutine psmile_bbcells_2d_real (           &
02692                     coords, coords_shape, sub_range, &
02693                     corner_shape,                    &
02694                     chmin, chmax, midp, levdim,      &
02695                     period, ierror)
02696        Use psmile_common
02697        Integer,           Intent (In)  :: coords_shape  (2, ndim_2d)
02698        Integer,           Intent (In)  :: sub_range  (2, ndim_2d)
02699        Integer,           Intent (In)  :: corner_shape (2, ndim_2d)
02700        Real,              Intent (In)  :: 
02701           coords(coords_shape(1,1):coords_shape(2,1), 
02702                  coords_shape(1,2):coords_shape(2,2))
02703        Integer,           Intent (In)  :: levdim (ndim_2d)
02704        Real,              Intent (In)  :: period
02705        Real,              Intent (Out) :: 
02706           chmin (sub_range(1,1)-1:sub_range(2,1), 
02707                  sub_range(1,2)-1:sub_range(2,2))
02708        Real,              Intent (Out) :: 
02709           chmax (sub_range(1,1)-1:sub_range(2,1), 
02710                  sub_range(1,2)-1:sub_range(2,2))
02711        Real,              Intent (Out) :: 
02712           midp  (sub_range(1,1)-1:sub_range(2,1), 
02713                  sub_range(1,2)-1:sub_range(2,2))
02714        Integer,           Intent (Out) :: ierror
02715     End Subroutine
02716 
02717     subroutine psmile_bbcells_virt_2d_real (method_id,                &
02718                     coords1, coords2, coords_shape, coords_range,     &
02719                     corners1, corners2, corner_shape, nbr_corners,    &
02720                     chmin1_corner, chmin2_corner,                     &
02721                     chmax1_corner, chmax2_corner, levdim_corner,      &
02722                     chmin1,  chmin2, chmax1, chmax2, midp1, midp2,    &
02723                     levdim,  period, bmaski, bmaskj, ierror)
02724        Use PSMILe_common
02725        Integer,           Intent (In)  :: method_id, nbr_corners
02726        Integer,           Intent (In)  :: coords_shape (2, ndim_2d)
02727        Integer,           Intent (In)  :: coords_range (2, ndim_2d)
02728        Integer,           Intent (In)  :: corner_shape (2, ndim_2d)
02729        Integer,           Intent (In)  :: levdim_corner (2, ndim_2d)
02730        Integer,           Intent (In)  :: levdim (ndim_2d)
02731        Real,              Intent (In)  :: period
02732        Real,              Intent (InOut)  ::              
02733           coords1(coords_shape(1,1):coords_shape(2,1), 
02734                   coords_shape(1,2):coords_shape(2,2))
02735        Real,              Intent (InOut)  ::              
02736           coords2(coords_shape(1,1):coords_shape(2,1), 
02737                   coords_shape(1,2):coords_shape(2,2))
02738        Real,              Intent (In)  :: 
02739           corners1 (corner_shape(1,1):corner_shape(2,1), 
02740                     corner_shape(1,2):corner_shape(2,2), 
02741                     nbr_corners)
02742        Real,              Intent (In)  :: 
02743           corners2 (corner_shape(1,1):corner_shape(2,1), 
02744                     corner_shape(1,2):corner_shape(2,2), 
02745                     nbr_corners)
02746        Real,              Intent (In)  :: 
02747           chmin1_corner (levdim_corner(1,1):levdim_corner(2,1), 
02748                          levdim_corner(1,2):levdim_corner(2,2))
02749        Real,              Intent (In)  :: 
02750           chmin2_corner (levdim_corner(1,1):levdim_corner(2,1), 
02751                          levdim_corner(1,2):levdim_corner(2,2))
02752        Real,              Intent (In)  :: 
02753           chmax1_corner (levdim_corner(1,1):levdim_corner(2,1), 
02754                          levdim_corner(1,2):levdim_corner(2,2))
02755        Real,              Intent (In)  :: 
02756           chmax2_corner (levdim_corner(1,1):levdim_corner(2,1), 
02757                          levdim_corner(1,2):levdim_corner(2,2))
02758        Real,             Intent (InOut) :: 
02759           chmin1 (coords_range(1,1)-1:coords_range(2,1), 
02760                   coords_range(1,2)-1:coords_range(2,2))
02761        Real,              Intent (InOut) :: 
02762           chmin2 (coords_range(1,1)-1:coords_range(2,1), 
02763                   coords_range(1,2)-1:coords_range(2,2))
02764        Real,             Intent (InOut) :: 
02765           chmax1 (coords_range(1,1)-1:coords_range(2,1), 
02766                   coords_range(1,2)-1:coords_range(2,2))
02767        Real,             Intent (InOut) :: 
02768           chmax2 (coords_range(1,1)-1:coords_range(2,1), 
02769                   coords_range(1,2)-1:coords_range(2,2))
02770        Real,             Intent (InOut) :: 
02771           midp1  (coords_range(1,1)-1:coords_range(2,1), 
02772                   coords_range(1,2)-1:coords_range(2,2))
02773        Real,             Intent (InOut) :: 
02774           midp2  (coords_range(1,1)-1:coords_range(2,1), 
02775                   coords_range(1,2)-1:coords_range(2,2))
02776        Integer,           Intent (Out) :: 
02777           bmaski (coords_range(1,1)-1:coords_range(2,1)+1, 2)
02778        Integer,           Intent (Out) :: 
02779           bmaskj (coords_range(1,2)-1:coords_range(2,2)+1, 2)
02780        Integer,           Intent (Out) :: ierror
02781     End Subroutine
02782 
02783     subroutine psmile_bbcells_3d_real (method_id, array, shape, range,     &
02784                                        corners, corner_shape, nbr_corners, &
02785                                        chmin, chmax, midp, levdim, cyclic, &
02786                                        period, ierror)
02787        Use PSMILe_common
02788        Integer,           Intent (In)  :: method_id
02789        Integer,           Intent (In)  :: shape (2, ndim_3d)
02790        Integer,           Intent (In)  :: range (2, ndim_3d)
02791        Integer,           Intent (In)  :: corner_shape (2, ndim_3d), nbr_corners
02792        Real,              Intent (In)  :: array(shape(1,1):shape(2,1), 
02793                                                 shape(1,2):shape(2,2), 
02794                                                 shape(1,3):shape(2,3))
02795        Integer,           Intent (In)  :: levdim (ndim_3d)
02796        Real,              Intent (In)  :: corners (corner_shape(1,1): 
02797                                                    corner_shape(2,1), 
02798                                                    corner_shape(1,2): 
02799                                                    corner_shape(2,2), 
02800                                                    corner_shape(1,3): 
02801                                                    corner_shape(2,3), 
02802                                                    nbr_corners)
02803        Logical,           Intent (In)  :: cyclic
02804        Real,              Intent (In)  :: period
02805        Real,              Intent (Out) :: chmin (range(1,1)-1:range(2,1), 
02806                                                  range(1,2)-1:range(2,2), 
02807                                                  range(1,3)-1:range(2,3))
02808        Real,              Intent (Out) :: chmax (range(1,1)-1:range(2,1), 
02809                                                  range(1,2)-1:range(2,2), 
02810                                                  range(1,3)-1:range(2,3))
02811        Real,              Intent (Out) :: midp  (range(1,1)-1:range(2,1), 
02812                                                  range(1,2)-1:range(2,2), 
02813                                                  range(1,3)-1:range(2,3))
02814        Integer,           Intent (Out) :: ierror
02815     End Subroutine
02816 
02817     subroutine psmile_bbcells_gauss2_real (array_x, array_y,          &
02818                                            shape, range, nbr_lats,    &
02819                                            points_per_lat, corners_y, &
02820                                            corner_shape, nbr_corners, &
02821                                            chmin_x, chmax_x, midp_x,  &
02822                                            chmin_y, chmax_y, midp_y,  &
02823                                            nbrs, levdim, ierror )
02824 
02825       Integer, Intent (In)             :: shape (2)
02826       Real, Intent (In)                :: array_x(shape(1):shape(2))
02827       Real, Intent (In)                :: array_y(shape(1):shape(2))
02828       Integer, Intent (In)             :: range (2)
02829       Integer, Intent (In)             :: corner_shape (2)
02830       Integer, Intent (In)             :: nbr_lats
02831       Integer, Intent (In)             :: points_per_lat(nbr_lats,1)
02832       Integer, Intent (In)             :: nbr_corners
02833       Real, Intent (In)                :: corners_y (corner_shape(1):corner_shape(2), 
02834                                                      nbr_corners)
02835       Integer, Intent (In)             :: levdim(1)
02836       Real, Intent (Out)               :: chmin_x (range(1)-1:range(2))
02837       Real, Intent (Out)               :: chmax_x (range(1)-1:range(2))
02838       Real, Intent (Out)               :: midp_x  (range(1)-1:range(2))
02839       Real, Intent (Out)               :: chmin_y (range(1)-1:range(2))
02840       Real, Intent (Out)               :: chmax_y (range(1)-1:range(2))
02841       Real, Intent (Out)               :: midp_y  (range(1)-1:range(2))
02842       Integer, Intent (Out)            :: nbrs    (range(2)-range(1)+1,4)
02843       Integer, Intent (Out)            :: ierror
02844     End Subroutine
02845 
02846     subroutine psmile_bbcells_pole_dble (              &
02847                    coords_shape, coords_x, coords_y,   &
02848                    corner_shape, sub_range,            &
02849                    chmin_x, chmax_x, chmin_y, chmax_y, &
02850                    midp_x, midp_y, pole_array, period, &
02851                    ierror)
02852       use psmile_common, only : ndim_2d, ndim_3d
02853       integer,          intent (in)    :: coords_shape (2, ndim_2d)
02854       double precision, intent (in)    :: 
02855          coords_x(coords_shape(1,1):coords_shape(2,1),  
02856                   coords_shape(1,2):coords_shape(2,2)), 
02857          coords_y(coords_shape(1,1):coords_shape(2,1),  
02858                   coords_shape(1,2):coords_shape(2,2))
02859       integer,          intent (in)    :: corner_shape (2, ndim_3d)
02860       integer,          intent (in)    :: sub_range (2, ndim_2d)
02861       integer,          intent (in)    :: pole_array(:)
02862       double precision, intent (in)    :: period
02863       double precision, intent (inout) :: chmin_x (sub_range(1,1)-1:sub_range(2,1), 
02864                                                    sub_range(1,2)-1:sub_range(2,2))
02865       double precision, intent (inout) :: chmax_x (sub_range(1,1)-1:sub_range(2,1), 
02866                                                    sub_range(1,2)-1:sub_range(2,2))
02867       double precision, intent (inout) :: chmin_y (sub_range(1,1)-1:sub_range(2,1), 
02868                                                    sub_range(1,2)-1:sub_range(2,2))
02869       double precision, intent (inout) :: chmax_y (sub_range(1,1)-1:sub_range(2,1), 
02870                                                    sub_range(1,2)-1:sub_range(2,2))
02871       double precision, intent (inout) :: midp_x(sub_range(1,1)-1:sub_range(2,1), 
02872                                                  sub_range(1,2)-1:sub_range(2,2))
02873       double precision, intent (inout) :: midp_y(sub_range(1,1)-1:sub_range(2,1), 
02874                                                  sub_range(1,2)-1:sub_range(2,2))
02875       integer,          intent (out)   :: ierror
02876     end subroutine psmile_bbcells_pole_dble
02877 
02878     subroutine psmile_bbcells_pole_real (              &
02879                    coords_shape, coords_x, coords_y,   &
02880                    corner_shape, sub_range,            &
02881                    chmin_x, chmax_x, chmin_y, chmax_y, &
02882                    midp_x, midp_y, pole_array, period, &
02883                    ierror)
02884       use psmile_common, only : ndim_2d, ndim_3d
02885       integer,          intent (in)    :: coords_shape (2, ndim_2d)
02886       real,             intent (in)    :: 
02887          coords_x(coords_shape(1,1):coords_shape(2,1),  
02888                   coords_shape(1,2):coords_shape(2,2)), 
02889          coords_y(coords_shape(1,1):coords_shape(2,1),  
02890                   coords_shape(1,2):coords_shape(2,2))
02891       integer,          intent (in)    :: corner_shape (2, ndim_3d)
02892       integer,          intent (in)    :: sub_range (2, ndim_2d)
02893       integer,          intent (in)    :: pole_array(:)
02894       real,             intent (in)    :: period
02895       real,             intent (inout) :: chmin_x (sub_range(1,1)-1:sub_range(2,1), 
02896                                                    sub_range(1,2)-1:sub_range(2,2))
02897       real,             intent (inout) :: chmax_x (sub_range(1,1)-1:sub_range(2,1), 
02898                                                    sub_range(1,2)-1:sub_range(2,2))
02899       real,             intent (inout) :: chmin_y (sub_range(1,1)-1:sub_range(2,1), 
02900                                                    sub_range(1,2)-1:sub_range(2,2))
02901       real,             intent (inout) :: chmax_y (sub_range(1,1)-1:sub_range(2,1), 
02902                                                    sub_range(1,2)-1:sub_range(2,2))
02903       real,             intent (inout) :: midp_x(sub_range(1,1)-1:sub_range(2,1), 
02904                                                  sub_range(1,2)-1:sub_range(2,2))
02905       real,             intent (inout) :: midp_y(sub_range(1,1)-1:sub_range(2,1), 
02906                                                  sub_range(1,2)-1:sub_range(2,2))
02907       integer,          intent (out)   :: ierror
02908     end subroutine psmile_bbcells_pole_real
02909 
02910     subroutine psmile_celltest_real ( grid_id, range, sense, ierror )
02911       Use PSMILe_common
02912       Integer, Intent (In)             :: grid_id
02913       Integer, Intent (In)             :: range(2,ndim_2d)
02914       Integer, Intent (Out)            :: sense
02915       Integer, Intent (Out)            :: ierror
02916     End Subroutine
02917 
02918     subroutine psmile_ccompact_gauss2_real ( send_info,     &
02919                grid_valid_shape, shape, nb_corners,         &
02920                array_x, array_y, array_z,                   &
02921                extra_search, dest_size, nbr_cells_tot,      &
02922                source_cell_index,                           &
02923                neighcells, dest_x, dest_y, dest_z, ierror )
02924 
02925        USE PSMILe_Common
02926 
02927        Type (Send_information), Intent (InOut)  :: send_info
02928        Integer, Intent (In)                     :: grid_valid_shape (2, ndim_3d)
02929        Integer, Intent (In)                     :: shape (2, ndim_3d)
02930        Integer, Intent (In)                     :: nb_corners
02931        Real, Intent (In)                        :: array_x ( shape(1,1):shape(2,1), 
02932                                                              nb_corners )
02933        Real, Intent (In)                        :: array_y ( shape(1,1):shape(2,1), 
02934                                                              nb_corners )
02935        Real, Intent (In)                        :: array_z ( shape(1,3):shape(2,3) )
02936        Integer, Intent (In)                     :: dest_size
02937        Integer, Intent (In)                     :: nbr_cells_tot
02938        Type (Extra_search_info), Intent (InOut) :: extra_search
02939        Integer, Intent (InOut)                  :: source_cell_index (nbr_cells_tot)
02940        Integer, Intent (InOut)                  :: neighcells (nbr_cells_tot, nb_corners)
02941        Real, Intent (Out)                       :: dest_x (2*dest_size)
02942        Real, Intent (Out)                       :: dest_y (2*dest_size)
02943        Real, Intent (Out)                       :: dest_z (2*dest_size)
02944        Integer, Intent (Out)                    :: ierror
02945     End Subroutine
02946 
02947     subroutine psmile_ccompact_irreg2_real ( send_info,     &
02948                grid_valid_shape, shape, nb_corners,         &
02949                array_x, array_y, array_z,                   &
02950                extra_search, dest_size, nbr_cells_tot,      &
02951                source_cell_index,                           &
02952                neighcells, dest_x, dest_y, dest_z, ierror )
02953 
02954        USE PSMILe_Common
02955 
02956        Type (Send_information), Intent (InOut)  :: send_info
02957        Type (Extra_search_info), Intent (InOut) :: extra_search
02958 
02959        Integer, Intent (In)                     :: grid_valid_shape (2, ndim_3d)
02960        Integer, Intent (In)                     :: shape (2, ndim_3d)
02961        Integer, Intent (In)                     :: nb_corners
02962        Real, Intent (In)                        :: array_x ( shape(1,1):shape(2,1), 
02963                                                              shape(1,2):shape(2,2), 
02964                                                              nb_corners )
02965        Real, Intent (In)                        :: array_y ( shape(1,1):shape(2,1), 
02966                                                              shape(1,2):shape(2,2), 
02967                                                              nb_corners )
02968        Real, Intent (In)                        :: array_z ( shape(1,3):shape(2,3) )
02969        Integer, Intent (In)                     :: dest_size
02970        Integer, Intent (In)                     :: nbr_cells_tot
02971        Integer, Intent (InOut)                  :: source_cell_index (nbr_cells_tot)
02972        Integer, Intent (InOut)                  :: neighcells(nbr_cells_tot, nb_corners)
02973        Real, Intent (Out)                       :: dest_x (dest_size)
02974        Real, Intent (Out)                       :: dest_y (dest_size)
02975        Real, Intent (Out)                       :: dest_z (dest_size)
02976        Integer, Intent (Out)                    :: ierror
02977     End Subroutine
02978 
02979     subroutine psmile_ccompact_3d_reg_real ( send_info,     &
02980                grid_valid_shape, shape, nb_corners,         &
02981                array_x, array_y, array_z,                   &
02982                extra_search, dest_size, nbr_cells_tot,      &
02983                source_cell_index,                           &
02984                neighcells, dest_x, dest_y, dest_z, ierror )
02985 
02986        USE PSMILe_Common
02987 
02988        Type (Send_information), Intent (InOut)  :: send_info
02989        Integer, Intent (In)                     :: grid_valid_shape (2, ndim_3d)
02990        Integer, Intent (In)                     :: shape (2, ndim_3d)
02991        Integer, Intent (In)                     :: nb_corners
02992        Real, Intent (In)                        :: array_x ( shape(1,1):shape(2,1), 
02993                                                              nb_corners )
02994        Real, Intent (In)                        :: array_y ( shape(1,2):shape(2,2), 
02995                                                              nb_corners )
02996        Real, Intent (In)                        :: array_z ( shape(1,3):shape(2,3) )
02997        Type (Extra_search_info), Intent (InOut) :: extra_search
02998        Integer, Intent (In)                     :: dest_size
02999        Integer, Intent (In)                     :: nbr_cells_tot
03000        Integer, Intent (InOut)                  :: source_cell_index (nbr_cells_tot)
03001        Real, Intent (Out)                       :: dest_x (dest_size)
03002        Real, Intent (Out)                       :: dest_y (dest_size)
03003        Real, Intent (Out)                       :: dest_z (dest_size)
03004        Integer, Intent (InOut)                  :: neighcells (nbr_cells_tot, nb_corners)
03005        Integer, Intent (Out)                    :: ierror
03006     End Subroutine
03007 
03008     subroutine psmile_control_cell_2d_real (grid_id,               &
03009                     ic, nc, icdim1, list, j, k,                    &
03010                     coords1,  coords2,  shape,                     &
03011                     corners1, corners2, corner_shape, nbr_corners, &
03012                     tol, fnd, ierror)
03013       Use PSMILe_common
03014 
03015       Integer,          Intent (In)   :: grid_id, nc, icdim1
03016       Integer,          Intent (In)   :: ic (icdim1, ndim_2d)
03017       Integer,          Intent (In)   :: list (nc), j, k
03018       Integer,          Intent (In)   :: shape (2, ndim_3d)
03019       Real,             Intent (In)   :: coords1 (shape(1,1):shape(2,1), 
03020                                                   shape(1,2):shape(2,2), 
03021                                                   shape(1,3):shape(2,3))
03022       Real,             Intent (In)   :: coords2 (shape(1,1):shape(2,1), 
03023                                                   shape(1,2):shape(2,2), 
03024                                                   shape(1,3):shape(2,3))
03025       Integer,          Intent (In)   :: corner_shape (2, ndim_2d)
03026       Integer,          Intent (In)   :: nbr_corners
03027       Real,             Intent (In)   ::                 
03028          corners1 ( corner_shape(1,1):corner_shape(2,1), 
03029                     corner_shape(1,2):corner_shape(2,2), nbr_corners)
03030       Real,             Intent (In)   ::                 
03031          corners2 ( corner_shape(1,1):corner_shape(2,1), 
03032                     corner_shape(1,2):corner_shape(2,2), nbr_corners)
03033       Real,             Intent (In)   :: tol
03034       Logical,          Intent (Out)  :: fnd (nc)
03035       Integer,          Intent (Out)  :: ierror
03036     End Subroutine
03037 
03038     subroutine psmile_control_cell_gauss2_real (grid_id,           &
03039                     ic, nc, list, j, k,                            &
03040                     coords1,  coords2,  shape,                     &
03041                     corners1, corners2, corner_shape, nbr_corners, &
03042                     tol, fnd, ierror)
03043       Use PSMILe_common
03044 
03045       Integer,          Intent (In)   :: grid_id, nc
03046       Integer,          Intent (In)   :: ic (nc)
03047       Integer,          Intent (In)   :: list (nc), j, k
03048       Integer,          Intent (In)   :: shape (2, ndim_3d)
03049       Real,             Intent (In)   :: 
03050          coords1 (shape(1,1):shape(2,1), shape(1,2):shape(2,2), 
03051                   shape(1,3):shape(2,3))
03052       Real,             Intent (In)   :: 
03053          coords2 (shape(1,1):shape(2,1), shape(1,2):shape(2,2), 
03054                   shape(1,3):shape(2,3))
03055       Integer,          Intent (In)   :: corner_shape (2, ndim_2d)
03056       Integer,          Intent (In)   :: nbr_corners
03057       Real,             Intent (In)   ::                 
03058          corners1 ( corner_shape(1,1):corner_shape(2,1), 
03059                     corner_shape(1,2):corner_shape(2,2), nbr_corners)
03060       Real,             Intent (In)   ::                 
03061          corners2 ( corner_shape(1,1):corner_shape(2,1), 
03062                     corner_shape(1,2):corner_shape(2,2), nbr_corners)
03063       Real,             Intent (In)   :: tol
03064       Logical,          Intent (Out)  :: fnd (nc)
03065       Integer,          Intent (Out)  :: ierror
03066     End Subroutine
03067 
03068     subroutine psmile_ext_compact_irreg2_real (send_info, array, shape, &
03069                                                grid_valid_shape,        &
03070                                                dest_vector, dest_size, ierror)
03071        Use PSMILe_common
03072        Type(Send_information), Intent(InOut) :: send_info
03073        Real, Intent (In)                     :: array (*)
03074        Integer, Intent (In)                  :: shape (2, ndim_2d)
03075        Integer, Intent (In)                  :: grid_valid_shape (2, ndim_3d)
03076        Integer, Intent (In)                  :: dest_size
03077        Real, Intent (Out)                    :: dest_vector (dest_size)
03078        Integer, Intent (Out)                 :: ierror
03079     End Subroutine
03080 
03081     subroutine psmile_ext_compact_list_3d_real (send_info, array, shape, &
03082                                                 grid_valid_shape,        &
03083                                                 dest_vector, dest_size, ierror)
03084        Use PSMILe_common
03085        Type(Send_information), Intent(In)    :: send_info
03086        Real, Intent (In)                     :: array (*)
03087        Integer, Intent (In)                  :: shape (2, ndim_3d)
03088        Integer, Intent (In)                  :: grid_valid_shape (2, ndim_3d)
03089        Integer, Intent (In)                  :: dest_size
03090        Real, Intent (Out)                    :: dest_vector (dest_size)
03091        Integer, Intent (Out)                 :: ierror
03092     End Subroutine
03093 
03094     subroutine psmile_put_compact_list_3d_real (source_list, dstijk, nloc, &
03095                                                 array, shape, nbr_fields,  &
03096                                                 ierror)
03097        Use PSMILe_common
03098        Real, Intent (InOut)               :: array (*)
03099        Integer, Intent (In)               :: shape (2, ndim_3d)
03100        Integer, Intent (In)               :: nloc, nbr_fields
03101        Integer, Intent (In)               :: dstijk (ndim_3d, nbr_fields)
03102        Real, Intent (In)                  :: source_list (nloc, nbr_fields)
03103        Integer, Intent (Out)              :: ierror
03104     End Subroutine
03105 
03106     subroutine psmile_extract_indices_2d_real (array, shape, &
03107                                                dstijk, ncpl, &
03108                                                dest_vector, ierror)
03109        Use PSMILe_common
03110        Real, Intent (In)                  :: array (*)
03111        Integer, Intent (In)               :: shape (2, ndim_2d)
03112        Integer, Intent (In)               :: ncpl
03113        Integer, Intent (In)               :: dstijk (ndim_3d, ncpl)
03114        Real, Intent (Out)                 :: dest_vector (ncpl)
03115        Integer, Intent (Out)              :: ierror
03116     End Subroutine
03117 
03118     subroutine psmile_extract_indices_3d_real (array, shape, &
03119                                                dstijk, ncpl, &
03120                                                dest_vector, ierror)
03121        Use PSMILe_common
03122        Real, Intent (In)                  :: array (*)
03123        Integer, Intent (In)               :: shape (2, ndim_3d)
03124        Integer, Intent (In)               :: ncpl
03125        Integer, Intent (In)               :: dstijk (ndim_3d, ncpl)
03126        Real, Intent (Out)                 :: dest_vector (ncpl)
03127        Integer, Intent (Out)              :: ierror
03128     End Subroutine
03129 
03130     subroutine psmile_extent_subgrid_1d_real (           &
03131                     array, idlow, idhigh, nbr_corners,   &
03132                            ibeg,  iend,                  &
03133                     extent, ierror)
03134        Integer, Intent (In)            :: idlow, idhigh, nbr_corners
03135        Integer, Intent (In)            :: ibeg, iend
03136        Real, Intent (In)               :: array (idlow:idhigh, nbr_corners)
03137        Real, Intent (Out)              :: extent (2)
03138        Integer, Intent (Out)           :: ierror
03139     End Subroutine
03140 
03141     subroutine psmile_extent_subgrid_2d_real (           &
03142                     array, idlow, idhigh, jdlow, jdhigh, nbr_corners,   &
03143                            ibeg,  iend,   jbeg,  jend,                  &
03144                     extent, ierror)
03145        Integer, Intent (In)            :: idlow, idhigh
03146        Integer, Intent (In)            :: jdlow, jdhigh, nbr_corners
03147        Integer, Intent (In)            :: ibeg, iend, jbeg, jend
03148        Real, Intent (In)               :: array (idlow:idhigh,          
03149                                                  jdlow:jdhigh, nbr_corners)
03150        Real, Intent (Out)              :: extent (2)
03151        Integer, Intent (Out)           :: ierror
03152     End Subroutine
03153 
03154     subroutine psmile_extent_subgrid_3d_real (           &
03155                     array, idlow, idhigh, jdlow, jdhigh, &
03156                            kdlow, kdhigh, nbr_corners,   &
03157                            grid_shape,                   &
03158                     extent, ierror)
03159        Use PSMILe_common
03160        Integer, Intent (In)            :: idlow, idhigh, jdlow, jdhigh
03161        Integer, Intent (In)            :: kdlow, kdhigh, nbr_corners
03162        Integer, Intent (In)            :: grid_shape (2, ndim_3d)
03163        Real, Intent (In)               :: array (idlow:idhigh, jdlow:jdhigh, 
03164                                                  kdlow:kdhigh, nbr_corners)
03165        Real, Intent (Out)              :: extent (2)
03166        Integer, Intent (Out)           :: ierror
03167     End Subroutine
03168 
03169     subroutine psmile_gauss_setup_real (grid_id, counts, displs, ierror)
03170       Integer, Intent (In)             :: grid_id
03171       Integer, Intent (In)             :: counts (*)
03172       Integer, Intent (In)             :: displs (*)
03173       Integer, Intent (Out)            :: ierror
03174     End Subroutine PSMILe_gauss_setup_real
03175 
03176     subroutine psmile_generate_1d_3d_real (            &
03177                     vector1, vector2, vector3, shape,  &
03178                     dest_array, dest_shape,            &
03179                     grid_valid_shape, ierror)
03180        Use PSMILe_common
03181 
03182        Real,             Intent (In)   :: vector1 (*)
03183        Real,             Intent (In)   :: vector2 (*)
03184        Real,             Intent (In)   :: vector3 (*)
03185        Integer,          Intent (In)   :: shape (2, ndim_3d)
03186        Integer,          Intent (In)   :: dest_shape (2, ndim_3d)
03187        Real,             Intent (Out)  :: dest_array ( 
03188                                              dest_shape(1,1):dest_shape(2,1), 
03189                                              dest_shape(1,2):dest_shape(2,2), 
03190                                              dest_shape(1,3):dest_shape(2,3))
03191        Integer,          Intent (In)   :: grid_valid_shape (2, ndim_3d)
03192        Integer,          Intent (Out)  :: ierror
03193     End Subroutine
03194 !
03195     subroutine psmile_get_cyclic_dir_3d_real (                 &
03196                            chmin, chmin2, chmin3,              &
03197                            chmax, chmax2, chmax3, levdim,      &
03198                            corners, corners2, corners3,        &
03199                            corner_shape, nbr_corners,          &
03200                            grid_valid_shape,                   &
03201                            len_cyclic, rtol, index, cyclic, ierror)
03202        Use PSMILe_common
03203 
03204        Real, Intent (In)               :: chmin (*)
03205        Real, Intent (In)               :: chmax (*)
03206        Real, Intent (In)               :: chmin2 (*)
03207        Real, Intent (In)               :: chmax2 (*)
03208        Real, Intent (In)               :: chmin3 (*)
03209        Real, Intent (In)               :: chmax3 (*)
03210        Integer, Intent (In)            :: levdim (ndim_3d)
03211        Real, Intent (In)               :: corners (*)
03212        Real, Intent (In)               :: corners2 (*)
03213        Real, Intent (In)               :: corners3 (*)
03214        Integer, Intent (In)            :: corner_shape (2, ndim_3d)
03215        Integer, Intent (In)            :: nbr_corners
03216        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
03217        Real, Intent (In)               :: len_cyclic, rtol
03218        Integer, Intent (In)            :: index
03219        Logical, Intent (Out)           :: cyclic
03220        Integer, Intent (Out)           :: ierror
03221     End Subroutine
03222 
03223     subroutine psmile_get_faces_3d_real (search, extra_search,     &
03224                     corners1, corners2, corners3,                  &
03225                     corner_shape, nbr_corners, grid_valid_shape,   &
03226                     neighbors_3d, nloc, num_neigh,                 &
03227                     faces, n_faces, nreq, ierror)
03228        Use PSMILe_common
03229 
03230        Type (Enddef_search),     Intent (In)  :: search
03231        Type (Extra_search_info), Intent (In)  :: extra_search
03232        Integer,                  Intent (In)  :: nbr_corners, nloc, num_neigh
03233        Integer,                  Intent (In)  :: nreq
03234        Integer,                  Intent (In)  :: corner_shape     (2, ndim_3d)
03235        Integer,                  Intent (In)  :: grid_valid_shape (2, ndim_3d)
03236        Real,                     Intent (In)  :: 
03237           corners1 ( corner_shape(1,1):corner_shape(2,1), 
03238                      corner_shape(1,2):corner_shape(2,2), 
03239                      corner_shape(1,3):corner_shape(2,3), nbr_corners)
03240        Real,                     Intent (In)  :: 
03241           corners2 ( corner_shape(1,1):corner_shape(2,1), 
03242                      corner_shape(1,2):corner_shape(2,2), 
03243                      corner_shape(1,3):corner_shape(2,3), nbr_corners)
03244        Real,                     Intent (In)  :: 
03245           corners3 ( corner_shape(1,1):corner_shape(2,1), 
03246                      corner_shape(1,2):corner_shape(2,2), 
03247                      corner_shape(1,3):corner_shape(2,3), nbr_corners)
03248        Integer,                  Intent (In)  :: 
03249           neighbors_3d (ndim_3d, nloc, num_neigh)
03250 !
03251        Real,                     Intent (Out) :: faces (2, ndim_3d, nreq)
03252        Integer,                  Intent (Out) :: n_faces (nreq)
03253        Integer,                  Intent (Out) :: ierror
03254     End Subroutine
03255 
03256     subroutine psmile_get_faces_3d_reg_real (search, extra_search, &
03257                     corners1, corners2, corners3,                  &
03258                     corner_shape, nbr_corners, grid_valid_shape,   &
03259                     neighbors_3d, nloc, num_neigh,                 &
03260                     faces, n_faces, nreq, ierror)
03261        Use PSMILe_common
03262 
03263        Type (Enddef_search),     Intent (In)  :: search
03264        Type (Extra_search_info), Intent (In)  :: extra_search
03265        Integer,                  Intent (In)  :: nbr_corners, nloc, num_neigh
03266        Integer,                  Intent (In)  :: nreq
03267        Integer,                  Intent (In)  :: corner_shape     (2, ndim_3d)
03268        Integer,                  Intent (In)  :: grid_valid_shape (2, ndim_3d)
03269        Real,                     Intent (In)  :: 
03270           corners1 ( corner_shape(1,1):corner_shape(2,1), 2)
03271        Real,                     Intent (In)  :: 
03272           corners2 ( corner_shape(1,2):corner_shape(2,2), 2)
03273        Real,                     Intent (In)  :: 
03274           corners3 ( corner_shape(1,3):corner_shape(2,3), 2)
03275        Integer,                  Intent (In)  :: 
03276           neighbors_3d (ndim_3d, nloc, num_neigh)
03277 !
03278        Real,                     Intent (Out) :: faces (2, ndim_3d, nreq)
03279        Integer,                  Intent (Out) :: n_faces (nreq)
03280        Integer,                  Intent (Out) :: ierror
03281     End Subroutine
03282 
03283     subroutine psmile_get_faces_gauss2_real (search, extra_search, &
03284                     corners1, corners2, corners3,                  &
03285                     corner_shape, nbr_corners, grid_valid_shape,   &
03286                     neighbors_3d, nloc, num_neigh,                 &
03287                     faces, nreq, ierror)
03288 
03289        Use PSMILe_common
03290 
03291        Type (Enddef_search),     Intent (In)  :: search
03292        Type (Extra_search_info), Intent (In)  :: extra_search
03293        Integer,                  Intent (In)  :: nbr_corners, nloc, num_neigh
03294        Integer,                  Intent (In)  :: nreq
03295        Integer,                  Intent (In)  :: corner_shape     (2, ndim_3d)
03296        Integer,                  Intent (In)  :: grid_valid_shape (2, ndim_3d)
03297        Real,                     Intent (In)  :: 
03298           corners1 ( corner_shape(1,1):corner_shape(2,1), 2 )
03299        Real,                     Intent (In)  :: 
03300           corners2 ( corner_shape(1,1):corner_shape(2,1), 2 )
03301        Real,                     Intent (In)  :: 
03302           corners3 ( corner_shape(1,3):corner_shape(2,3), 2 )
03303        Integer,                  Intent (In)  :: 
03304           neighbors_3d (ndim_3d, nloc, num_neigh)
03305 !
03306        Real,                     Intent (Out) :: faces (2, ndim_3d, nreq)
03307        Integer,                  Intent (Out) :: ierror
03308     End Subroutine
03309 
03310     subroutine psmile_get_faces_irreg2_real (search, extra_search, &
03311                     corners1, corners2, corners3,                  &
03312                     corner_shape, nbr_corners, grid_valid_shape,   &
03313                     neighbors_3d, nloc, num_neigh,                 &
03314                     faces, n_faces, nreq, ierror)
03315        Use PSMILe_common
03316 
03317        Type (Enddef_search),     Intent (In)  :: search
03318        Type (Extra_search_info), Intent (In)  :: extra_search
03319        Integer,                  Intent (In)  :: nbr_corners, nloc, num_neigh
03320        Integer,                  Intent (In)  :: nreq
03321        Integer,                  Intent (In)  :: corner_shape     (2, ndim_3d)
03322        Integer,                  Intent (In)  :: grid_valid_shape (2, ndim_3d)
03323        Real,                     Intent (In)  :: 
03324           corners1 ( corner_shape(1,1):corner_shape(2,1), 
03325                      corner_shape(1,2):corner_shape(2,2), nbr_corners/2)
03326        Real,                     Intent (In)  :: 
03327           corners2 ( corner_shape(1,1):corner_shape(2,1), 
03328                      corner_shape(1,2):corner_shape(2,2), nbr_corners/2)
03329        Real,                     Intent (In)  :: 
03330           corners3 ( corner_shape(1,3):corner_shape(2,3), 2)
03331        Integer,                  Intent (In)  :: 
03332           neighbors_3d (ndim_3d, nloc, num_neigh)
03333 !
03334        Real,                     Intent (Out) :: faces (2, ndim_3d, nreq)
03335        Integer,                  Intent (Out) :: n_faces (nreq)
03336        Integer,                  Intent (Out) :: ierror
03337     End Subroutine
03338 
03339     subroutine psmile_get_grid_extent_real (grid_id, extent, ierror)
03340        Use PSMILe_common
03341        Integer,                  Intent (In)   :: grid_id
03342        Real (PSMILe_float_kind), Intent (Out)  :: extent (2, ndim_3d)
03343        Integer,                  Intent (Out)  :: ierror
03344     End Subroutine
03345 
03346     subroutine psmile_global_search_nnx_real (comp_info,         &
03347                     search, var_id,                              &
03348                     tgt_coords_x, tgt_coords_y, tgt_coords_z,    &
03349                     neighbors_3d, nloc, num_neigh, nb_extra,     &
03350                     extra_search, send_index,                    &
03351                     ierror)
03352        Use PSMILe_common
03353 
03354        Type (Enddef_comp),   Intent (In)    :: comp_info
03355        Type (Enddef_search), Intent (InOut) :: search
03356        Integer,              Intent (In)    :: var_id
03357        Integer,              Intent (In)    :: send_index
03358        Integer,              Intent (In)    :: nb_extra, nloc, num_neigh
03359        Real,                 Intent (In)    :: tgt_coords_x (nloc)
03360        Real,                 Intent (In)    :: tgt_coords_y (nloc)
03361        Real,                 Intent (In)    :: tgt_coords_z (nloc)
03362        Integer,              Intent (InOut) :: 
03363           neighbors_3d (ndim_3d, nloc,  num_neigh)
03364        Type (Extra_search_info), Intent (InOut) :: extra_search
03365        Integer,              Intent (Out)   :: ierror
03366     End Subroutine
03367 
03368     subroutine psmile_global_search_real (comp_info,             &
03369                     control, len_cpl, var_id, grid_valid_shape,  &
03370                     search, tgt_coords,                          &
03371                     neighbors_3d, nloc, num_neigh, extra_search, &
03372                     interpolation_methods, interpolation_search, n_intmethods, &
03373                     send_index,                                  &
03374                     mask_available, use_mask, use_how,           &
03375                     grid_type, ierror)
03376        Use PSMILe_common
03377 
03378        Type (Enddef_comp),   Intent (In)    :: comp_info
03379        Type (Enddef_search), Intent (InOut) :: search
03380        Type (real_vector),   Intent (In)    :: tgt_coords (ndim_3d)
03381        Integer,              Intent (In)    :: control (2, ndim_3d, 
03382                                                search%npart)
03383        Integer,              Intent (In)    :: len_cpl (search%npart)
03384        Integer,              Intent (In)    :: var_id
03385        Integer,              Intent (In)    :: grid_valid_shape (2, ndim_3d)
03386        Integer,              Intent (In)    :: send_index
03387        Integer,              Intent (In)    :: nloc, num_neigh
03388        Integer,              Intent (In)    :: n_intmethods
03389        Integer,              Intent (In)    :: interpolation_methods (n_intmethods)
03390        Logical,              Intent (In)    :: interpolation_search  (n_intmethods)
03391        Logical,              Intent (In)    :: mask_available, use_mask
03392        Integer,              Intent (In)    :: use_how
03393        Integer,              Intent (In)    :: grid_type
03394        Integer,              Intent (InOut) :: neighbors_3d (ndim_3d, nloc, 
03395                                                              num_neigh)
03396        Type (Extra_search_info), Intent (InOut) :: extra_search
03397        Integer,              Intent (Out)   :: ierror
03398     End Subroutine
03399 
03400     subroutine psmile_global_search_cell_real ( grid_id, var_id,    &
03401                   comp_info, send_info, search, extra_search, ncpl, &
03402                   nbr_cells, n_intmethods, interpolation_methods,   &
03403                   interpolation_search, ierror )
03404        Use PSMILe_common
03405 
03406        Integer,                  Intent (In)    :: grid_id
03407        Integer,                  Intent (In)    :: var_id
03408        Type (Enddef_comp),       Intent (In)    :: comp_info
03409        Type (Send_information),  Intent (InOut) :: send_info
03410        Type (Enddef_search),     Intent (InOut) :: search
03411        Type (Extra_search_info), Intent (InOut) :: extra_search
03412        Integer,                  Intent (In)    :: ncpl
03413        Integer,                  Intent (InOut) :: nbr_cells(ncpl)
03414        Integer,                  Intent (In)    :: n_intmethods
03415        Integer,                  Intent (In)    :: interpolation_methods (n_intmethods)
03416        Logical,                  Intent (In)    :: interpolation_search  (n_intmethods)
03417        Integer,                  Intent (Out)   :: ierror
03418     End Subroutine
03419 
03420     subroutine psmile_return_extra_off_real (comp_info, search, var_id, &
03421                       found, distance, nd_dist, nb_extra, ierror)
03422        Use PSMILe_common
03423 
03424        Type (Enddef_comp),          Intent (In)    :: comp_info
03425        Type (Enddef_global_search), Intent (InOut) :: search
03426        Integer,                     Intent (In)    :: var_id
03427        Integer,                     Intent (In)    :: nd_dist, nb_extra
03428        Integer,                     Intent (In)    :: found (nd_dist)
03429        Real,                        Intent (In)    :: distance (nd_dist, 
03430                                                                 nb_extra)
03431 
03432        Integer,                     Intent (Out)   :: ierror
03433     End Subroutine
03434 
03435     subroutine psmile_sel_grid_range_real (grid_id, dinter, inter, ierror)
03436        Use PSMILe_common
03437        Integer,                  Intent (In)  :: grid_id
03438        Real (PSMILe_float_kind), Intent (In)  :: dinter (2, ndim_3d)
03439        Integer,                  Intent (Out) ::  inter (2, ndim_3d)
03440        Integer,                  Intent (Out) :: ierror
03441     End Subroutine
03442 
03443     subroutine psmile_range_subgrid_1d_real (            &
03444                     array, idlow, idhigh, nbr_corners,   &
03445                            ibeg,  iend,                  &
03446                     extent, inter, ierror)
03447        Integer, Intent (In)            :: idlow, idhigh, nbr_corners
03448        Integer, Intent (In)            :: ibeg, iend
03449        Real, Intent (In)               :: array (idlow:idhigh, nbr_corners)
03450        Real, Intent (In)               :: extent (2)
03451        Integer, Intent (Out)           :: inter (2)
03452        Integer, Intent (Out)           :: ierror
03453     End Subroutine
03454 
03455     subroutine psmile_range_subgrid_2d_real (           &
03456                     array1, array2,                                     &
03457                           idlow, idhigh, jdlow, jdhigh, nbr_corners,    &
03458                            ibeg,  iend,   jbeg,  jend,                  &
03459                     extent, inter, ierror)
03460        Integer, Intent (In)            :: idlow, idhigh
03461        Integer, Intent (In)            :: jdlow, jdhigh, nbr_corners
03462        Integer, Intent (In)            :: ibeg, iend, jbeg, jend
03463        Real, Intent (In)               :: array1(idlow:idhigh,          
03464                                                  jdlow:jdhigh, nbr_corners)
03465        Real, Intent (In)               :: array2(idlow:idhigh,          
03466                                                  jdlow:jdhigh, nbr_corners)
03467        Real, Intent (In)               :: extent (2,2)
03468        Integer, Intent (Out)           :: inter (2,2)
03469        Integer, Intent (Out)           :: ierror
03470     End Subroutine
03471 
03472     subroutine psmile_range_subgrid_3d_real (           &
03473                    array1, array2, array3,               &
03474                            idlow, idhigh, jdlow, jdhigh, &
03475                            kdlow, kdhigh, nbr_corners,   &
03476                            grid_shape,                   &
03477                            rinter, inter, ierror)
03478        Use PSMILe_common
03479        Integer, Intent (In)            :: idlow, idhigh, jdlow, jdhigh
03480        Integer, Intent (In)            :: kdlow, kdhigh, nbr_corners
03481        Real, Intent (In)               :: array1(idlow:idhigh, jdlow:jdhigh, 
03482                                                  kdlow:kdhigh, nbr_corners)
03483        Real, Intent (In)               :: array2(idlow:idhigh, jdlow:jdhigh, 
03484                                                  kdlow:kdhigh, nbr_corners)
03485        Real, Intent (In)               :: array3(idlow:idhigh, jdlow:jdhigh, 
03486                                                  kdlow:kdhigh, nbr_corners)
03487        Integer, Intent (In)            :: grid_shape (2, ndim_3d)
03488        Real, Intent (In)               :: rinter (2, ndim_3d)
03489        Integer, Intent (Out)           ::  inter (2, ndim_3d)
03490        Integer, Intent (Out)           :: ierror
03491     End Subroutine
03492 
03493     subroutine psmile_mg_ctrl_subgrid_1d_real (       &
03494                     array, corner_shape, nbr_corners, &
03495                            range,                     &
03496                     chmin, chmax, levdim, period,     &
03497                     grid_id, ind, ierror)
03498        Integer, Intent (In)             :: nbr_corners
03499        Integer, Intent (In)             :: corner_shape (2)
03500        Integer, Intent (In)             :: range (2)
03501        Integer, Intent (In)             :: levdim
03502        Real, Intent (In)                :: period
03503        Real, Intent (In)                :: array(corner_shape(1):
03504                                                  corner_shape(2),
03505                                                  nbr_corners)
03506        Real, Intent (In)                :: chmin (0:levdim)
03507        Real, Intent (In)                :: chmax (0:levdim)
03508        Integer, Intent (In)             :: grid_id, ind
03509        Integer, Intent (Out)            :: ierror
03510     End Subroutine
03511 
03512     subroutine psmile_mg_ctrl_subgrid_2d_real (       &
03513                     array, corner_shape, nbr_corners, &
03514                            range,                     &
03515                     chmin, chmax, levdim, period,     &
03516                     grid_id, ind, ierror)
03517        Integer, Intent (In)             :: nbr_corners
03518        Integer, Intent (In)             :: corner_shape (2, 2)
03519        Integer, Intent (In)             :: range (2, 2)
03520        Integer, Intent (In)             :: levdim (2)
03521        Real, Intent (In)                :: period
03522        Real, Intent (In)                :: array(corner_shape(1,1):
03523                                                  corner_shape(2,1),
03524                                                  corner_shape(1,2):
03525                                                  corner_shape(2,2),
03526                                                  nbr_corners)
03527        Real, Intent (In)                :: chmin (0:levdim(1), 0:levdim(2))
03528        Real, Intent (In)                :: chmax (0:levdim(1), 0:levdim(2))
03529        Integer, Intent (In)             :: grid_id, ind
03530        Integer, Intent (Out)            :: ierror
03531     End Subroutine
03532 
03533     subroutine psmile_mg_ctrl_subgrid_3d_real (       &
03534                     array, corner_shape, nbr_corners, &
03535                            range,                     &
03536                     chmin, chmax, levdim, period,     &
03537                     grid_id, ind, ierror)
03538        Use PSMILe_common
03539        Integer, Intent (In)             :: nbr_corners
03540        Integer, Intent (In)             :: corner_shape (2, ndim_3d)
03541        Integer, Intent (In)             :: range (2, ndim_3d)
03542        Integer, Intent (In)             :: levdim (ndim_3d)
03543        Real, Intent (In)                :: period
03544        Real, Intent (In)                :: array(corner_shape(1,1):
03545                                                  corner_shape(2,1),
03546                                                  corner_shape(1,2):
03547                                                  corner_shape(2,2),
03548                                                  corner_shape(1,3):
03549                                                  corner_shape(2,3),
03550                                                  nbr_corners)
03551        Real, Intent (In)                :: chmin (0:levdim(1), 0:levdim(2), 
03552                                                   0:levdim(3))
03553        Real, Intent (In)                :: chmax (0:levdim(1), 0:levdim(2), 
03554                                                   0:levdim(3))
03555        Integer, Intent (In)             :: grid_id, ind
03556        Integer, Intent (Out)            :: ierror
03557     End Subroutine
03558 
03559 
03560     subroutine psmile_mg_first_level_real (grid_id, range, &
03561                     mg_info, tol, simplified_grid, ierror)
03562        Use PSMILe_common
03563        Integer,          Intent (In)    :: grid_id
03564        Integer,          Intent (In)    :: range (2, ndim_3d)
03565        Type (Enddef_mg), Intent (InOut) :: mg_info
03566        Real (PSMILe_float_kind), Intent (In) :: tol
03567        Logical,          Intent (In)    :: simplified_grid
03568        Integer,          Intent (Out)   :: ierror
03569     End Subroutine
03570 
03571     subroutine psmile_mg_first_subgrid_1d_real (         &
03572                     array, idlow, idhigh, nbr_corners,   &
03573                            range,                        &
03574                     chmin, chmax, midp,                  &
03575                     levdim, ierror)
03576        Integer, Intent (In)            :: idlow, idhigh, nbr_corners
03577        Integer, Intent (In)            :: range (2)
03578        Integer, Intent (In)            :: levdim
03579        Real, Intent (In)               :: array (idlow:idhigh, nbr_corners)
03580        Real, Intent (Out)              :: chmin (0:levdim)
03581        Real, Intent (Out)              :: chmax (0:levdim)
03582        Real, Intent (Out)              :: midp  (0:levdim)
03583        Integer, Intent (Out)           :: ierror
03584     End Subroutine
03585 
03586     subroutine psmile_mg_first_subgrid_2d_real (array, &
03587                     idlow, idhigh, jdlow, jdhigh, nbr_corners,   &
03588                            range,                        &
03589                     chmin, chmax, midp,                  &
03590                     levdim1, levdim2, ierror)
03591        Integer, Intent (In)            :: idlow, idhigh, jdlow, jdhigh
03592        Integer, Intent (In)            :: nbr_corners
03593        Integer, Intent (In)            :: range (2, 2)
03594        Integer, Intent (In)            :: levdim1, levdim2
03595        Real, Intent (In)               :: array (idlow:idhigh, jdlow:jdhigh, 
03596                                                  nbr_corners)
03597        Real, Intent (Out)              :: chmin (0:levdim1, 0:levdim2)
03598        Real, Intent (Out)              :: chmax (0:levdim1, 0:levdim2)
03599        Real, Intent (Out)              :: midp  (0:levdim1, 0:levdim2)
03600        Integer, Intent (Out)           :: ierror
03601     End Subroutine
03602 
03603     subroutine psmile_mg_first_subgrid_3d_real (array, &
03604                     idlow, idhigh, jdlow, jdhigh, kdlow, kdhigh, &
03605                     nbr_corners,   &
03606                            range,                        &
03607                     chmin, chmax, midp,                  &
03608                     levdim1, levdim2, levdim3, ierror)
03609        Use PSMILe_common
03610        Integer, Intent (In)            :: idlow, idhigh, jdlow, jdhigh, kdlow, kdhigh
03611        Integer, Intent (In)            :: nbr_corners
03612        Real, Intent (In)               :: array (idlow:idhigh, jdlow:jdhigh, 
03613                                                  kdlow:kdhigh, nbr_corners)
03614        Integer, Intent (In)            :: range (2, ndim_3d)
03615        Integer, Intent (In)            :: levdim1, levdim2, levdim3
03616        Real, Intent (Out)              :: chmin (0:levdim1, 0:levdim2, 0:levdim3)
03617        Real, Intent (Out)              :: chmax (0:levdim1, 0:levdim2, 0:levdim3)
03618        Real, Intent (Out)              :: midp  (0:levdim1, 0:levdim2, 0:levdim3)
03619        Integer, Intent (Out)           :: ierror
03620     End Subroutine
03621 
03622     subroutine psmile_mg_coars_level_real (grid_id, mg_info_fine, &
03623                                      mg_info_coarse, &
03624                                      icoarse, ierror)
03625        Use PSMILe_common
03626        Integer, Intent (In)            :: grid_id
03627        Type (Enddef_mg), Intent (In)   :: mg_info_fine
03628        Type (Enddef_mg), Intent (InOut):: mg_info_coarse
03629        Integer, Intent (In)            :: icoarse (ndim_3d)
03630        Integer, Intent (Out)           :: ierror
03631     End Subroutine
03632 
03633     subroutine psmile_mg_coars_subgrid_3d_real ( chfmin, chfmax, midfp, &
03634                              levdim1_fine, levdim2_fine, levdim3_fine,  &
03635                                                 chcmin, chcmax, midcp,  &
03636                                             levdim1, levdim2, levdim3,  &
03637                                                 icoarse, ierror)
03638        Use PSMILe_common
03639        Integer, Intent (In)            :: levdim1_fine, levdim2_fine, 
03640                                           levdim3_fine
03641        Integer, Intent (In)            :: levdim1, levdim2, levdim3
03642        Real, Intent (In)               :: chfmin (0:levdim1_fine,  
03643                                                   0:levdim2_fine,  
03644                                                   0:levdim3_fine)
03645        Real, Intent (In)               :: chfmax (0:levdim1_fine,  
03646                                                   0:levdim2_fine,  
03647                                                   0:levdim3_fine)
03648        Real, Intent (In)               ::  midfp (0:levdim1_fine,  
03649                                                   0:levdim2_fine,  
03650                                                   0:levdim3_fine)
03651        Real, Intent (Out)              :: chcmin (0:levdim1, 0:levdim2, 
03652                                                   0:levdim3)
03653        Real, Intent (Out)              :: chcmax (0:levdim1, 0:levdim2, 
03654                                                   0:levdim3)
03655        Real, Intent (Out)              ::  midcp (0:levdim1, 0:levdim2, 
03656                                                   0:levdim3)
03657        Integer, Intent (In)            :: icoarse (ndim_3d)
03658        Integer, Intent (Out)           :: ierror
03659     End Subroutine
03660 
03661     subroutine psmile_mg_get_cyclic_real (grid_id, range, &
03662                                           tol, ierror)
03663        Use PSMILe_common
03664 
03665        Integer, Intent (In)               :: grid_id
03666        Integer, Intent (In)               :: range (2, ndim_3d)
03667        Real, Intent (In)                  :: tol
03668        Integer, Intent (Out)              :: ierror
03669     End Subroutine
03670 !
03671     subroutine psmile_neigh_extra_search_real (search, extra_search, &
03672                                                nb_extra, ierror)
03673        Use PSMILe_common
03674 
03675        Type (Enddef_search),     Intent (In)    :: search
03676        Type (Extra_search_info), Intent (InOut) :: extra_search
03677        Integer,                  Intent (In)    :: nb_extra
03678        Integer,                  Intent (Out)   :: ierror
03679     End Subroutine
03680 !
03681     subroutine psmile_send_req_coords_real (msg_intersections, &
03682                                             dest, tag, ierror)
03683        use psmile_common, only : enddef_msg_intersections
03684 
03685        Integer, Intent (In)                         :: dest, tag
03686        Type (enddef_msg_intersections), Intent (In) :: msg_intersections
03687        Integer, Intent (Out)                        :: ierror
03688     End Subroutine
03689 !
03690     subroutine psmile_send_req_corners_real (msg_intersections, &
03691                                              dest, tag, ierror)
03692        use psmile_common, only : enddef_msg_intersections
03693 
03694        Integer, Intent (In)                         :: dest, tag
03695        Type (enddef_msg_intersections), Intent (In) :: msg_intersections
03696        Integer, Intent (Out)                        :: ierror
03697 
03698     End Subroutine
03699 !
03700     subroutine psmile_recv_req_coords_real (sender, tag, search, &
03701                                             recv_req, recv_mask, new_search, ierror)
03702        Use PSMILe_common
03703        Integer, Intent (In)                 :: sender, tag
03704        Logical, Intent (In)                 :: recv_mask, new_search
03705        Type (Enddef_search), Intent (InOut) :: search
03706        Integer, Intent (Out)                :: recv_req (ndim_3d+2, *)
03707        Integer, Intent (Out)                :: ierror
03708     End Subroutine
03709 !
03710     subroutine psmile_recv_req_corners_real (sender, tag,      &
03711                                              search, recv_req, &
03712                                              recv_mask, new_search, &
03713                                              ierror)
03714        Use PSMILe_common
03715        Integer, Intent (In)                 :: sender, tag
03716        Logical, Intent (In)                 :: recv_mask, new_search
03717        Type (Enddef_search), Intent (InOut) :: search
03718        Integer, Intent (Out)                :: recv_req (ndim_3d+2, *)
03719        Integer, Intent (Out)                :: ierror
03720     End Subroutine
03721 !
03722     subroutine psmile_search_donor_1d_real (grid_id, idim, found, &
03723                                             locations, coords, len, &
03724                                             tol, ierror)
03725        Use PSMILe_common
03726 
03727        Integer, Intent (In)            :: grid_id
03728        Integer, Intent (In)            :: idim
03729        Integer, Intent (In)            :: len
03730        Integer, Intent (InOut)         :: found (len)
03731        Integer, Intent (InOut)         :: locations (len)
03732        Real, Intent (In)               :: coords (len)
03733        Real, Intent (In)               :: tol
03734        Integer, Intent (Out)           :: ierror
03735     End Subroutine
03736 
03737     subroutine psmile_search_donor_2d_real (found, &
03738                                             locations, len, &
03739                                             search, ipart, &
03740                                             grid_id, method_id, var_id, &
03741                                             tol, ierror)
03742        Use PSMILe_common
03743 
03744        Integer, Intent (In)            :: len
03745        Integer, Intent (InOut)         :: found (len)
03746        Integer, Intent (InOut)         :: locations (ndim_2d, len)
03747        Type (Enddef_search)            :: search
03748        Integer, Intent (In)            :: ipart
03749        Integer, Intent (In)            :: grid_id, method_id, var_id
03750        Real, Intent (In)               :: tol
03751        Integer, Intent (Out)           :: ierror
03752     End Subroutine
03753 
03754     subroutine psmile_search_donor_3d_real (comp_info, found, &
03755                                             locations, len, search, &
03756                                             field_list, n_vars, &
03757                                             grid_id, method_id, var_id, &
03758                                             tol, ierror)
03759        Use PSMILe_common
03760 
03761        Type (Enddef_comp), Intent (In) :: comp_info
03762        Type (integer_vector)           :: found (*)
03763        Type (integer_vector)           :: locations (*)
03764        Integer, Intent (In)            :: len (*)
03765        Type (Enddef_search)            :: search
03766        Integer, Intent (In)            :: grid_id
03767        Integer, Intent (InOut)         :: method_id, var_id
03768        Integer, Intent (In)            :: n_vars
03769        Integer, Intent (In)            :: field_list (nd_field_list, n_vars)
03770        Real, Intent (In)               :: tol
03771        Integer, Intent (Out)           :: ierror
03772     End Subroutine
03773 
03774     subroutine psmile_search_donor_3d_reg_real (comp_info,   &
03775                                             found, locations, len, &
03776                                             search, field_list, n_vars, &
03777                                             grid_id, method_id, var_id, &
03778                                             tol, ierror)
03779        Use PSMILe_common
03780 
03781        Type (Enddef_comp),    Intent (In)    :: comp_info
03782        Type (Enddef_search)                  :: search
03783        Type (integer_vector), Intent (InOut) :: found (ndim_3d, *)
03784        Type (integer_vector), Intent (InOut) :: locations (ndim_3d, *)
03785        Integer, Intent (In)            :: len (search%npart)
03786        Integer, Intent (In)            :: grid_id
03787        Integer, Intent (InOut)         :: method_id, var_id
03788        Integer, Intent (In)            :: n_vars
03789        Integer, Intent (In)            :: field_list (nd_field_list, n_vars)
03790        Real, Intent (In)               :: tol
03791        Integer, Intent (Out)           :: ierror
03792     End Subroutine
03793 
03794     subroutine psmile_search_donor_gauss2_real (comp_info, found, &
03795                                             locations, len, search, &
03796                                             field_list, n_vars, &
03797                                             grid_id, method_id, var_id, &
03798                                             tol, ierror)
03799        Use PSMILe_common
03800 
03801        Type (Enddef_comp), Intent (In) :: comp_info
03802        Type (Enddef_search)            :: search
03803        Type (integer_vector)           :: found (search%npart, 2)
03804        Type (integer_vector)           :: locations (search%npart, 2)
03805        Integer, Intent (In)            :: len (search%npart, 2)
03806        Integer, Intent (In)            :: grid_id
03807        Integer, Intent (InOut)         :: method_id, var_id
03808        Integer, Intent (In)            :: n_vars
03809        Integer, Intent (In)            :: field_list (nd_field_list, n_vars)
03810        Real, Intent (In)               :: tol
03811        Integer, Intent (Out)           :: ierror
03812     End Subroutine
03813 
03814     subroutine psmile_search_donor_irreg2_real (comp_info, found,     &
03815                       locations, len, search,                         &
03816                       field_list, n_vars, grid_id, method_id, var_id, &
03817                       tol, ierror)
03818        Use PSMILe_common
03819 
03820        Type (Enddef_comp), Intent (In) :: comp_info
03821        Type (Enddef_search)            :: search
03822        Type (integer_vector)           :: found (search%npart, 2)
03823        Type (integer_vector)           :: locations (search%npart, 2)
03824        Integer, Intent (In)            :: len (search%npart, 2)
03825        Integer, Intent (In)            :: grid_id
03826        Integer, Intent (InOut)         :: method_id, var_id
03827        Integer, Intent (In)            :: n_vars
03828        Integer, Intent (In)            :: field_list (nd_field_list, n_vars)
03829        Real,               Intent (In) :: tol
03830        Integer, Intent (Out)           :: ierror
03831     End Subroutine
03832 
03833     subroutine psmile_search_donor_nnx_real (comp_info, search, var_id, &
03834                       coords1, coords2, coords3, distance,              &
03835                       nfound, locations, n_send, nb_extra,              &
03836                       tol, ierror)
03837        Use PSMILe_common
03838 
03839        Type (Enddef_comp),          Intent (In)    :: comp_info
03840        Integer,                     Intent (In)    :: var_id
03841        Integer,                     Intent (In)    :: n_send
03842        Integer,                     Intent (In)    :: nb_extra
03843        Real,                        Intent (In)    :: coords1 (n_send)
03844        Real,                        Intent (In)    :: coords2 (n_send)
03845        Real,                        Intent (In)    :: coords3 (n_send)
03846        Real,                        Intent (InOut) :: distance (n_send)
03847        Real,                        Intent (In)    :: tol
03848        Type (Enddef_global_search), Intent (InOut) :: search
03849        Integer,                     Intent (InOut) :: nfound (n_send)
03850        Integer,                     Intent (Out)   :: locations (ndim_3d, n_send)
03851        Integer,                     Intent (Out)   :: ierror
03852     End Subroutine
03853 
03854     subroutine psmile_search_nn_3d_real (                         &
03855                       sin_search, cos_search, z_search, distance, &
03856                       nfound, locations, n_send,                  &
03857                       x_coords, y_coords, z_coords, coords_shape, &
03858                       sin_values, cos_values, grid_valid_shape,   &
03859                       mask_array, mask_shape, mask_available,     &
03860                       tol, ierror)
03861        Use PSMILe_common
03862 
03863        Integer,                     Intent (In)    :: n_send
03864        Real,                        Intent (In)    :: sin_search (n_send, 2)
03865        Real,                        Intent (In)    :: cos_search (n_send, 2)
03866        Real,                        Intent (In)    :: z_search (n_send)
03867        Integer,                     Intent (In)    :: coords_shape (2, ndim_3d)
03868        Real,                        Intent (In)    ::    
03869           x_coords (coords_shape(1,1):coords_shape(2,1), 
03870                     coords_shape(1,2):coords_shape(2,2), 
03871                     coords_shape(1,3):coords_shape(2,3))
03872        Real,                        Intent (In)    ::    
03873           y_coords (coords_shape(1,1):coords_shape(2,1), 
03874                     coords_shape(1,2):coords_shape(2,2), 
03875                     coords_shape(1,3):coords_shape(2,3))
03876        Real,                        Intent (In)    ::    
03877           z_coords (coords_shape(1,1):coords_shape(2,1), 
03878                     coords_shape(1,2):coords_shape(2,2), 
03879                     coords_shape(1,3):coords_shape(2,3))
03880 
03881        Integer,                     Intent (In)    :: mask_shape (2, ndim_3d)
03882        Logical,                     Intent (In)    ::    
03883           mask_array (mask_shape (1,1):mask_shape (2,1), 
03884                       mask_shape (1,2):mask_shape (2,2), 
03885                       mask_shape (1,3):mask_shape (2,3))
03886        Logical,                     Intent (In)    :: mask_available
03887        Integer,                     Intent (In)    :: 
03888           grid_valid_shape (2, ndim_3d)
03889 
03890        Real,                        Intent (In)   ::               
03891           sin_values (grid_valid_shape(1,1):grid_valid_shape(2,1), 
03892                       grid_valid_shape(1,2):grid_valid_shape(2,2), 2)
03893        Real,                        Intent (In)   ::               
03894           cos_values (grid_valid_shape(1,1):grid_valid_shape(2,1), 
03895                       grid_valid_shape(1,2):grid_valid_shape(2,2), 2)
03896        Real,                        Intent (In)    :: tol
03897        Real,                        Intent (InOut) :: distance (n_send)
03898        Integer,                     Intent (InOut) :: nfound (n_send)
03899        Integer,                     Intent (Out)   :: locations (ndim_3d, n_send)
03900        Integer,                     Intent (Out)   :: ierror
03901     End Subroutine
03902 
03903     subroutine psmile_search_nn_3d_reg_real (                     &
03904                       sin_search, cos_search, z_search, distance, &
03905                       nfound, locations, n_send,                  &
03906                       x_coords, y_coords, z_coords, coords_shape, &
03907                       sin_values_lon, cos_values_lon,             &
03908                       sin_values_lat, cos_values_lat,             &
03909                       grid_valid_shape,                           &
03910                       mask_array, mask_shape, mask_available,     &
03911                       tol, ierror)
03912        Use PSMILe_common
03913 
03914        Integer,                     Intent (In)    :: n_send
03915        Real,                        Intent (In)    :: sin_search (n_send, 2)
03916        Real,                        Intent (In)    :: cos_search (n_send, 2)
03917        Real,                        Intent (In)    :: z_search (n_send)
03918        Integer,                     Intent (In)    :: coords_shape (2, ndim_3d)
03919        Real,                        Intent (In)    ::    
03920           x_coords (coords_shape(1,1):coords_shape(2,1))
03921        Real,                        Intent (In)    ::    
03922           y_coords (coords_shape(1,1):coords_shape(2,1))
03923        Real,                        Intent (In)    ::    
03924           z_coords (coords_shape(1,3):coords_shape(2,3))
03925 
03926        Integer,                     Intent (In)    :: mask_shape (2, ndim_3d)
03927        Logical,                     Intent (In)    ::    
03928           mask_array (mask_shape (1,1):mask_shape (2,1), 
03929                       mask_shape (1,2):mask_shape (2,2), 
03930                       mask_shape (1,3):mask_shape (2,3))
03931        Logical,                     Intent (In)    :: mask_available
03932        Integer,                     Intent (In)    :: 
03933           grid_valid_shape (2, ndim_3d)
03934 
03935        Real,                        Intent (In)    ::                  
03936           sin_values_lon (grid_valid_shape(1,1):grid_valid_shape(2,1))
03937        Real,                        Intent (In)    ::                  
03938           cos_values_lon (grid_valid_shape(1,1):grid_valid_shape(2,1))
03939        Real,                        Intent (In)   ::                   
03940           sin_values_lat (grid_valid_shape(1,2):grid_valid_shape(2,2))
03941        Real,                        Intent (In)   ::                   
03942           cos_values_lat (grid_valid_shape(1,2):grid_valid_shape(2,2))
03943        Real,                        Intent (In)    :: tol
03944        Real,                        Intent (InOut) :: distance (n_send)
03945        Integer,                     Intent (InOut) :: nfound (n_send)
03946        Integer,                     Intent (Out)   :: locations (ndim_3d, n_send)
03947        Integer,                     Intent (Out)   :: ierror
03948     End Subroutine
03949 
03950     subroutine psmile_search_nn_irreg2_real (                     &
03951                       sin_search, cos_search, z_search, distance, &
03952                       nfound, locations, n_send,                  &
03953                       x_coords, y_coords, z_coords, coords_shape, &
03954                       sin_values, cos_values, grid_valid_shape,   &
03955                       mask_array, mask_shape, mask_available,     &
03956                       tol, ierror)
03957        Use PSMILe_common
03958 
03959        Integer,                     Intent (In)    :: n_send
03960        Real,                        Intent (In)    :: sin_search (n_send, 2)
03961        Real,                        Intent (In)    :: cos_search (n_send, 2)
03962        Real,                        Intent (In)    :: z_search (n_send)
03963        Integer,                     Intent (In)    :: coords_shape (2, ndim_3d)
03964        Real,                        Intent (In)    :: x_coords(  
03965                                                         coords_shape(1,1):coords_shape(2,1), 
03966                                                         coords_shape(1,2):coords_shape(2,2))
03967        Real,                        Intent (In)    :: y_coords(  
03968                                                         coords_shape(1,1):coords_shape(2,1), 
03969                                                         coords_shape(1,2):coords_shape(2,2))
03970        Real,                        Intent (In)    :: z_coords(  
03971                                                         coords_shape(1,3):coords_shape(2,3))
03972 
03973        Integer,                     Intent (In)    :: mask_shape (2, ndim_3d)
03974        Logical,                     Intent (In)    :: mask_array ( 
03975                                                         mask_shape (1,1):mask_shape (2,1), 
03976                                                         mask_shape (1,2):mask_shape (2,2), 
03977                                                         mask_shape (1,3):mask_shape (2,3))
03978        Logical,                     Intent (In)    :: mask_available
03979        Integer,                     Intent (In)    :: grid_valid_shape (2, ndim_3d)
03980 
03981        Real,                        Intent (In)   :: sin_values ( 
03982                                                         grid_valid_shape(1,1):grid_valid_shape(2,1), 
03983                                                         grid_valid_shape(1,2):grid_valid_shape(2,2), 
03984                                                         2)
03985        Real,                        Intent (In)   :: cos_values ( 
03986                                                        grid_valid_shape(1,1):grid_valid_shape(2,1), 
03987                                                        grid_valid_shape(1,2):grid_valid_shape(2,2), 
03988                                                        2)
03989        Real,                        Intent (In)    :: tol
03990        Real,                        Intent (InOut) :: distance (n_send)
03991        Integer,                     Intent (InOut) :: nfound (n_send)
03992        Integer,                     Intent (Out)   :: locations (ndim_3d, n_send)
03993        Integer,                     Intent (Out)   :: ierror
03994     End Subroutine
03995 
03996     subroutine psmile_select_nn_found (search, extra_search,      &
03997                         send_info,                                &
03998                         selected, sel_info, nrecv, nb_extra,      &
03999                         neighbors_3d, nloc, num_neigh,            &
04000                         grid_valid_shape, ierror)
04001        Use PSMILe_common
04002 
04003        Type (Enddef_search),      Intent (In)    :: search
04004        Integer,                   Intent (In)    :: nb_extra
04005        Integer,                   Intent (In)    :: nloc
04006        Integer,                   Intent (In)    :: num_neigh
04007        Integer,                   Intent (In)    :: grid_valid_shape (2, ndim_3d)
04008        Integer,                   Intent (InOut) :: nrecv
04009        Type (Extra_search_info),  Intent (InOut) :: extra_search
04010        Type (Send_information),   Intent (InOut) :: send_info
04011        Integer,                   Intent (InOut) :: selected (2, extra_search%n_extra)
04012        Type (Select_search_info), Intent (InOut) :: sel_info (nrecv)
04013        Integer,                   Intent (InOut) :: neighbors_3d (ndim_3d, nloc, 
04014                                                           num_neigh)
04015        Integer,                   Intent (Out)   :: ierror
04016     End Subroutine
04017 
04018     subroutine psmile_store_faces_3d_real (indices_req, required,     &
04019                     nreq,                                             &
04020                     tgt_coords1, tgt_coords2, tgt_coords3, ncpl,      &
04021                     corners1, corners2, corners3,                     &
04022                     corner_shape, nbr_corners, grid_valid_shape,      &
04023                     send_mask, srcloc_ind,                            &
04024                     ibuf, len_item, ndibuf, ipia,                     &
04025                      buf, len_rtem, ndrbuf, ipa, ierror)
04026        Use PSMILe_common
04027 
04028        Integer,                  Intent (In)  :: nreq, ncpl
04029        Integer,                  Intent (In)  :: indices_req (nreq)
04030        Integer,                  Intent (In)  :: required    (nreq)
04031        Integer,                  Intent (In)  :: nbr_corners
04032        Integer,                  Intent (In)  :: corner_shape (2, ndim_3d)
04033        Integer,                  Intent (In)  :: grid_valid_shape (2, ndim_3d)
04034        Real,                     Intent (In)  :: tgt_coords1 (ncpl)
04035        Real,                     Intent (In)  :: tgt_coords2 (ncpl)
04036        Real,                     Intent (In)  :: tgt_coords3 (ncpl)
04037        Real,                     Intent (In)  :: corners1 (                          
04038                                                  corner_shape(1,1):corner_shape(2,1),
04039                                                  corner_shape(1,2):corner_shape(2,2),
04040                                                  corner_shape(1,3):corner_shape(2,3),
04041                                                  nbr_corners)
04042        Real,                     Intent (In)  :: corners2 (                          
04043                                                  corner_shape(1,1):corner_shape(2,1),
04044                                                  corner_shape(1,2):corner_shape(2,2),
04045                                                  corner_shape(1,3):corner_shape(2,3),
04046                                                  nbr_corners)
04047        Real,                     Intent (In)  :: corners3 (                          
04048                                                  corner_shape(1,1):corner_shape(2,1),
04049                                                  corner_shape(1,2):corner_shape(2,2),
04050                                                  corner_shape(1,3):corner_shape(2,3),
04051                                                  nbr_corners)
04052        Logical,                  Intent (In)  :: send_mask (nreq)
04053        Integer,                  Intent (In)  :: len_item, len_rtem, ndibuf, ndrbuf
04054        Integer,                  Intent (In)  :: srcloc_ind (ndim_3d, ndibuf)
04055        Real,                     Intent (InOut) ::  buf (len_rtem, ndrbuf)
04056        Integer,                  Intent (InOut) :: ibuf (len_item, ndibuf)
04057        Integer,                  Intent (InOut) :: ipa, ipia
04058        Integer,                  Intent (Out) :: ierror
04059     End Subroutine
04060 
04061     subroutine psmile_store_faces_3d_reg_real (indices_req, required, &
04062                     nreq,                                             &
04063                     tgt_coords1, tgt_coords2, tgt_coords3, ncpl,      &
04064                     corners1, corners2, corners3,                     &
04065                     corner_shape, nbr_corners, grid_valid_shape,      &
04066                     send_mask, srcloc_ind,                            &
04067                     ibuf, len_item, ndibuf, ipia,                     &
04068                      buf, len_rtem, ndrbuf, ipa, ierror)
04069        Use PSMILe_common
04070 
04071        Integer,                  Intent (In)  :: nreq, ncpl
04072        Integer,                  Intent (In)  :: indices_req (nreq)
04073        Integer,                  Intent (In)  :: required    (nreq)
04074        Integer,                  Intent (In)  :: nbr_corners
04075        Integer,                  Intent (In)  :: corner_shape (2, ndim_3d)
04076        Integer,                  Intent (In)  :: grid_valid_shape (2, ndim_3d)
04077        Real,                     Intent (In)  :: tgt_coords1 (ncpl)
04078        Real,                     Intent (In)  :: tgt_coords2 (ncpl)
04079        Real,                     Intent (In)  :: tgt_coords3 (ncpl)
04080        Real,                     Intent (In)  :: corners1 (                             
04081                                                     corner_shape(1,1):corner_shape(2,1),
04082                                                     2)
04083        Real,                     Intent (In)  :: corners2 (                             
04084                                                     corner_shape(1,2):corner_shape(2,2),
04085                                                     2)
04086        Real,                     Intent (In)  :: corners3 (                             
04087                                                     corner_shape(1,3):corner_shape(2,3),
04088                                                     2)
04089        Logical,                  Intent (In)  :: send_mask (nreq)
04090        Integer,                  Intent (In)  :: len_item, len_rtem, ndibuf, ndrbuf
04091        Integer,                  Intent (In)  :: srcloc_ind (ndim_3d, ndibuf)
04092        Real,                     Intent (InOut) ::  buf (len_rtem, ndrbuf)
04093        Integer,                  Intent (InOut) :: ibuf (len_item, ndibuf)
04094        Integer,                  Intent (InOut) :: ipa, ipia
04095        Integer,                  Intent (Out) :: ierror
04096     End Subroutine
04097 
04098     subroutine psmile_store_faces_gauss2_real (indices_req,      &
04099                       required, nreq,                              &
04100                       tgt_coords1, tgt_coords2, tgt_coords3, ncpl, &
04101                       corners1, corners2, corners3, corner_shape,  &
04102                       nbr_corners, grid_id, grid_valid_shape,      &
04103                       send_mask, srcloc_ind,                       &
04104                       virtual_ind, virtual_cell_available,         &
04105                       ibuf, len_item, ndibuf, ipia,                &
04106                       buf,  len_rtem, ndrbuf, ipa, ierror)
04107       Use PSMILe_common
04108 
04109       Integer,           Intent (In)    :: nreq
04110       Integer,           Intent (In)    :: indices_req (nreq)
04111       Integer,           Intent (In)    :: required    (nreq)
04112       Integer,           Intent (In)    :: corner_shape (2, ndim_3d)
04113       Integer,           Intent (In)    :: nbr_corners
04114       Integer,           Intent (In)    :: grid_id
04115       Integer,           Intent (In)    :: grid_valid_shape (2, ndim_3d)
04116       Integer,           Intent (In)    :: ncpl
04117       Real,              Intent (In)    :: tgt_coords1 (ncpl)
04118       Real,              Intent (In)    :: tgt_coords2 (ncpl)
04119       Real,              Intent (In)    :: tgt_coords3 (ncpl)
04120       Real,              Intent (In)    :: corners1 ( corner_shape(1,1):corner_shape(2,1), 2)
04121       Real,              Intent (In)    :: corners2 ( corner_shape(1,1):corner_shape(2,1), 2)
04122       Real,              Intent (In)    :: corners3 ( corner_shape(1,3):corner_shape(2,3), 2)
04123       Logical,           Intent (In)    :: send_mask (nreq)
04124       Integer,           Intent (In)    :: ndibuf
04125       Integer,           Intent (In)    :: srcloc_ind (ndim_3d, ndibuf)
04126       Integer,           Intent (In)    :: virtual_ind (ndibuf)
04127       Logical,           Intent (In)    :: virtual_cell_available
04128       Integer,           Intent (In)    :: len_item
04129       Integer,           Intent (In)    :: ndrbuf
04130       Integer,           Intent (In)    :: len_rtem
04131       Real,              Intent (InOut) :: buf (len_rtem, ndrbuf)
04132       Integer,           Intent (InOut) :: ipa
04133       Integer,           Intent (InOut) :: ibuf (len_item, ndibuf)
04134       Integer,           Intent (InOut) :: ipia
04135       Integer,           Intent (Out)   :: ierror
04136     End Subroutine
04137 
04138     subroutine psmile_store_faces_irreg2_real (indices_req, required, &
04139                     nreq,                                             &
04140                     tgt_coords1, tgt_coords2, tgt_coords3, ncpl,      &
04141                     corners1, corners2, corners3,                     &
04142                     corner_shape, nbr_corners, grid_valid_shape,      &
04143                     send_mask, srcloc_ind,                            &
04144                     ibuf, len_item, ndibuf, ipia,                     &
04145                      buf, len_rtem, ndrbuf, ipa, ierror)
04146        Use PSMILe_common
04147 
04148        Integer,                  Intent (In)  :: nreq, ncpl
04149        Integer,                  Intent (In)  :: indices_req (nreq)
04150        Integer,                  Intent (In)  :: required    (nreq)
04151        Integer,                  Intent (In)  :: nbr_corners
04152        Integer,                  Intent (In)  :: corner_shape     (2, ndim_3d)
04153        Integer,                  Intent (In)  :: grid_valid_shape (2, ndim_3d)
04154        Real,                     Intent (In)  :: tgt_coords1 (ncpl)
04155        Real,                     Intent (In)  :: tgt_coords2 (ncpl)
04156        Real,                     Intent (In)  :: tgt_coords3 (ncpl)
04157        Real,                     Intent (In)  :: 
04158           corners1 ( corner_shape(1,1):corner_shape(2,1), 
04159                      corner_shape(1,2):corner_shape(2,2), nbr_corners/2)
04160        Real,                     Intent (In)  :: 
04161           corners2 ( corner_shape(1,1):corner_shape(2,1), 
04162                      corner_shape(1,2):corner_shape(2,2), nbr_corners/2)
04163        Real,                     Intent (In)  :: 
04164           corners3 ( corner_shape(1,3):corner_shape(2,3), 2)
04165        Logical,                  Intent (In)  :: send_mask (nreq)
04166        Integer,                  Intent (In)  :: len_item, len_rtem
04167        Integer,                  Intent (In)  :: ndibuf, ndrbuf
04168        Integer,                  Intent (In)  :: srcloc_ind (ndim_3d, ndibuf)
04169 !
04170        Real,                     Intent (InOut) ::  buf (len_rtem, ndrbuf)
04171        Integer,                  Intent (InOut) :: ibuf (len_item, ndibuf)
04172        Integer,                  Intent (InOut) :: ipa, ipia
04173        Integer,                  Intent (Out)   :: ierror
04174     End Subroutine
04175 
04176     subroutine psmile_trf_lonlat_1d_real (x_coords, y_coords,        &
04177                                           coords_shape, grid_valid_shape, &
04178                                           sin_values_lon, cos_values_lon, &
04179                                           sin_values_lat, cos_values_lat, ierror)
04180        Use PSMILe_common
04181 
04182        Integer, Intent (In)            :: coords_shape (2, ndim_2d)
04183        Integer, Intent (In)            :: grid_valid_shape (2, ndim_2d)
04184 
04185        Real, Intent (In)               :: x_coords(coords_shape(1,1): 
04186                                                    coords_shape(2,1))
04187        Real, Intent (In)               :: y_coords(coords_shape(1,2): 
04188                                                    coords_shape(2,2))
04189        Real, Intent (Out)              :: sin_values_lon (grid_valid_shape(1,1):
04190                                                           grid_valid_shape(2,1))
04191        Real, Intent (Out)              :: sin_values_lat (grid_valid_shape(1,2):
04192                                                           grid_valid_shape(2,2))
04193        Real, Intent (Out)              :: cos_values_lon (grid_valid_shape(1,1):
04194                                                           grid_valid_shape(2,1))
04195        Real, Intent (Out)              :: cos_values_lat (grid_valid_shape(1,2):
04196                                                           grid_valid_shape(2,2))
04197        Integer, Intent (Out)           :: ierror
04198     End Subroutine
04199 
04200     subroutine psmile_trf_lonlat_2d_real (x_coords, y_coords,             &
04201                                           coords_shape, grid_valid_shape, &
04202                                           sin_values, cos_values, ierror)
04203        Use PSMILe_common
04204 
04205        Integer, Intent (In)            :: coords_shape (2, ndim_2d)
04206        Integer, Intent (In)            :: grid_valid_shape (2, ndim_2d)
04207 
04208        Real, Intent (In)               :: x_coords(coords_shape(1,1): 
04209                                                    coords_shape(2,1), 
04210                                                    coords_shape(1,2): 
04211                                                    coords_shape(2,2))
04212        Real, Intent (In)               :: y_coords(coords_shape(1,1): 
04213                                                    coords_shape(2,1), 
04214                                                    coords_shape(1,2): 
04215                                                    coords_shape(2,2))
04216        Real, Intent (Out)              :: sin_values (grid_valid_shape(1,1): 
04217                                                       grid_valid_shape(2,1), 
04218                                                       grid_valid_shape(1,2): 
04219                                                       grid_valid_shape(2,2), 
04220                                                       2)
04221        Real, Intent (Out)              :: cos_values (grid_valid_shape(1,1): 
04222                                                       grid_valid_shape(2,1), 
04223                                                       grid_valid_shape(1,2): 
04224                                                       grid_valid_shape(2,2), 
04225                                                       2)
04226        Integer, Intent (Out)           :: ierror
04227     End Subroutine
04228 
04229     subroutine psmile_trf_lonlat_3d_real (x_coords, y_coords,             &
04230                                           coords_shape, grid_valid_shape, &
04231                                           sin_values, cos_values, ierror)
04232        Use PSMILe_common
04233 
04234        Integer, Intent (In)            :: coords_shape (2, ndim_3d)
04235        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
04236 
04237        Real, Intent (In)               :: x_coords(coords_shape(1,1): 
04238                                                    coords_shape(2,1), 
04239                                                    coords_shape(1,2): 
04240                                                    coords_shape(2,2), 
04241                                                    coords_shape(1,3): 
04242                                                    coords_shape(2,3))
04243        Real, Intent (In)               :: y_coords(coords_shape(1,1): 
04244                                                    coords_shape(2,1), 
04245                                                    coords_shape(1,2): 
04246                                                    coords_shape(2,2), 
04247                                                    coords_shape(1,3): 
04248                                                    coords_shape(2,3))
04249        Real, Intent (Out)              :: sin_values (grid_valid_shape(1,1): 
04250                                                       grid_valid_shape(2,1), 
04251                                                       grid_valid_shape(1,2): 
04252                                                       grid_valid_shape(2,2), 
04253                                                       grid_valid_shape(1,3): 
04254                                                       grid_valid_shape(2,3), 
04255                                                       2)
04256        Real, Intent (Out)              :: cos_values (grid_valid_shape(1,1): 
04257                                                       grid_valid_shape(2,1), 
04258                                                       grid_valid_shape(1,2): 
04259                                                       grid_valid_shape(2,2), 
04260                                                       grid_valid_shape(1,3): 
04261                                                       grid_valid_shape(2,3), 
04262                                                       2)
04263        Integer, Intent (Out)           :: ierror
04264     End Subroutine
04265 
04266     subroutine psmile_info_coords_3d_reg_real (              &
04267                              x_coords, y_coords, z_coords,   &
04268                              coords_shape, grid_valid_shape, &
04269                              sinvec, cosvec, ierror)
04270        Use PSMILe_common
04271 
04272        Integer, Intent (In)            :: coords_shape (2, ndim_3d)
04273        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
04274 
04275        Real, Intent (In)               :: x_coords(*)
04276        Real, Intent (In)               :: y_coords(*)
04277        Real, Intent (In)               :: z_coords(*)
04278 
04279        Type (real_vector)              :: sinvec (ndim_2d)
04280        Type (real_vector)              :: cosvec (ndim_2d)
04281        Integer, Intent (Out)           :: ierror
04282     End Subroutine
04283 
04284     subroutine psmile_info_coords_irreg2_real (              &
04285                              x_coords, y_coords, z_coords,   &
04286                              coords_shape, grid_valid_shape, &
04287                              sinvec, cosvec, ierror)
04288        Use PSMILe_common
04289 
04290        Integer, Intent (In)            :: coords_shape (2, ndim_3d)
04291        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
04292 
04293        Real, Intent (In)               :: x_coords(*)
04294        Real, Intent (In)               :: y_coords(*)
04295        Real, Intent (In)               :: z_coords(*)
04296 
04297        Type (real_vector)              :: sinvec
04298        Type (real_vector)              :: cosvec
04299        Integer, Intent (Out)           :: ierror
04300     End Subroutine
04301 
04302     subroutine psmile_info_trf_coords_3d_real (              &
04303                              x_coords, y_coords, z_coords,   &
04304                              coords_shape, grid_valid_shape, &
04305                              sinvec, cosvec, ierror)
04306        Use PSMILe_common
04307 
04308        Integer, Intent (In)            :: coords_shape (2, ndim_3d)
04309        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
04310 
04311        Real, Intent (In)               :: x_coords(*)
04312        Real, Intent (In)               :: y_coords(*)
04313        Real, Intent (In)               :: z_coords(*)
04314 
04315        Type (real_vector)              :: sinvec
04316        Type (real_vector)              :: cosvec
04317        Integer, Intent (Out)           :: ierror
04318     End Subroutine
04319 
04320     subroutine psmile_info_trs_locs_3d_real (comp_info,                 &
04321                                              coords, shape, control,    &
04322                                              len_cpl,                   &
04323                                              var_id, grid_valid_shape,  &
04324                                              search,                    &
04325                                              method_id, send_index,     &
04326                                              ierror)
04327        Use PSMILe_common
04328 
04329        Type (Enddef_comp), Intent (In)      :: comp_info
04330        Type (Enddef_search), Intent (InOut) :: search
04331        Type (real_vector), Intent (In)      :: coords (ndim_3d, search%npart)
04332        Integer, Intent (In)                 :: shape (2, ndim_3d, search%npart)
04333        Integer, Intent (In)                 :: control (2, ndim_3d, search%npart)
04334        Integer, Intent (In)                 :: len_cpl (search%npart)
04335        Integer, Intent (In)                 :: var_id, method_id
04336        Integer, Intent (In)                 :: grid_valid_shape (2, ndim_3d)
04337        Integer, Intent (InOut)              :: send_index
04338        Integer, Intent (Out)                :: ierror
04339     End Subroutine
04340 
04341     subroutine psmile_info_trs_loc_3d_reg_real (comp_info,              &
04342                                              coords, shape, control,    &
04343                                              len_cpl,                   &
04344                                              var_id, grid_valid_shape,  &
04345                                              search,                    &
04346                                              method_id, send_index,     &
04347                                              ierror)
04348        Use PSMILe_common
04349 
04350        Type (Enddef_comp), Intent (In)      :: comp_info
04351        Type (Enddef_search), Intent (InOut) :: search
04352        Type (real_vector), Intent (In)      :: coords (ndim_3d, search%npart)
04353        Integer, Intent (In)                 :: shape (2, ndim_3d, search%npart)
04354        Integer, Intent (In)                 :: control (2, ndim_3d, search%npart)
04355        Integer, Intent (InOut)              :: len_cpl (search%npart)
04356        Integer, Intent (In)                 :: var_id, method_id
04357        Integer, Intent (In)                 :: grid_valid_shape (2, ndim_3d)
04358        Integer, Intent (InOut)              :: send_index
04359        Integer, Intent (Out)                :: ierror
04360     End Subroutine
04361 
04362     subroutine psmile_info_trs_loc_irreg2_real (comp_info,              &
04363                                              coords, shape, control,    &
04364                                              len_cpl,                   &
04365                                              var_id, grid_valid_shape,  &
04366                                              search,                    &
04367                                              method_id, send_index,     &
04368                                              ierror)
04369        Use PSMILe_common
04370 
04371        Type (Enddef_comp), Intent (In)      :: comp_info
04372        Type (Enddef_search), Intent (InOut) :: search
04373        Type (real_vector), Intent (In)      :: coords (ndim_3d, search%npart)
04374        Integer, Intent (In)                 :: shape (2, ndim_3d, search%npart)
04375        Integer, Intent (In)                 :: control (2, ndim_3d, search%npart)
04376        Integer, Intent (InOut)              :: len_cpl (search%npart)
04377        Integer, Intent (In)                 :: var_id, method_id
04378        Integer, Intent (In)                 :: grid_valid_shape (2, ndim_3d)
04379        Integer, Intent (InOut)              :: send_index
04380        Integer, Intent (Out)                :: ierror
04381     End Subroutine
04382 
04383     subroutine psmile_info_trs_loc_gauss2_real (comp_info,                      &
04384                                              coords, shape, control, len_cpl,   &
04385                                              var_id, grid_valid_shape,          &
04386                                              search, method_id,                 &
04387                                              send_index, ierror)
04388        Use PSMILe_common
04389 
04390        Type (Enddef_comp), Intent (In)      :: comp_info
04391        Type (Enddef_search), Intent (InOut) :: search
04392        Type (real_vector), Intent (In)      :: coords (ndim_3d, search%npart)
04393        Integer, Intent (In)                 :: shape (2, ndim_3d, search%npart)
04394        Integer, Intent (In)                 :: control (2, ndim_3d, search%npart)
04395        Integer, Intent (InOut)              :: len_cpl (search%npart)
04396        Integer, Intent (In)                 :: var_id, method_id
04397        Integer, Intent (In)                 :: grid_valid_shape (2, ndim_3d)
04398        Integer, Intent (InOut)              :: send_index
04399        Integer, Intent (Out)                :: ierror
04400     End Subroutine
04401 
04402     subroutine psmile_neigh_cells_3d_real ( use_how,        &
04403                grid_shape, interpolation_mode, cyclic,      &
04404                corner_shape_3d, nbr_corners,                &
04405                corner_x, corner_y, corner_z,                &
04406                search,  control, tgt_cell, tgt_corners,     &
04407                npoints, srclocs, msklocs, ncpl,             &
04408                num_neigh, nbr_cells, ierror )
04409 
04410       USE PSMILe_Common
04411 
04412       Integer, Intent (In)            :: use_how(3)
04413       Integer, Intent (In)            :: grid_shape (2, ndim_3d)
04414       Integer, Intent (In)            :: interpolation_mode
04415       Logical, Intent (In)            :: cyclic (ndim_3d)
04416       Integer, Intent (In)            :: corner_shape_3d (2,ndim_3d,ndim_3d)
04417       Integer, Intent (In)            :: nbr_corners(ndim_3d)
04418       Type (Enddef_search), Intent (InOut) :: search
04419       Integer, Intent (In)            :: control (2, ndim_3d, search%npart)
04420       Type (real_vector), Intent (InOut) :: tgt_cell(ndim_3d)
04421       Integer, Intent (In)            :: tgt_corners(ndim_3d)
04422       Integer, Intent (In)            :: npoints
04423       Integer, Intent (In)            :: ncpl
04424       Integer, Intent (In)            :: srclocs (ndim_3d, npoints)
04425       Logical, Intent (In)            :: msklocs (npoints)
04426       Integer, Intent (In)            :: num_neigh
04427       Real, Intent (In)               :: corner_x (corner_shape_3d (1,1,1):corner_shape_3d(2,1,1), 
04428                                                    corner_shape_3d (1,2,1):corner_shape_3d(2,2,1), 
04429                                                    corner_shape_3d (1,3,1):corner_shape_3d(2,3,1), 
04430                                                    nbr_corners(1))
04431 
04432       Real, Intent (In)               :: corner_y (corner_shape_3d (1,1,2):corner_shape_3d(2,1,2), 
04433                                                    corner_shape_3d (1,2,2):corner_shape_3d(2,2,2), 
04434                                                    corner_shape_3d (1,3,2):corner_shape_3d(2,3,2), 
04435                                                    nbr_corners(2))
04436 
04437       Real, Intent (In)               :: corner_z (corner_shape_3d (1,1,3):corner_shape_3d(2,1,3), 
04438                                                    corner_shape_3d (1,2,3):corner_shape_3d(2,2,3), 
04439                                                    corner_shape_3d (1,3,3):corner_shape_3d(2,3,3), 
04440                                                    nbr_corners(3))
04441       Integer, Intent (Out)           :: nbr_cells(ncpl)
04442       Integer, Intent (Out)           :: ierror
04443     End Subroutine
04444 
04445     subroutine psmile_neigh_cells_3d_reg_real (      &
04446                grid_valid_shape, interpolation_mode, &
04447                cyclic, grid_id, search, corners,     &
04448                npoints, srclocs, ncpl, nbr_cells,    &
04449                ierror )
04450 
04451       USE PSMILe_Common
04452 
04453       Integer, Intent (In)               :: grid_valid_shape (2, ndim_3d)
04454       Integer,            Intent (In)    :: interpolation_mode
04455       Logical,            Intent (In)    :: cyclic (ndim_3d)
04456       Integer,            Intent (In)    :: grid_id
04457       Type (Enddef_search), Intent (In)  :: search
04458       Type (real_vector), Intent (In)    :: corners (ndim_3d, search%npart)
04459       Integer, Intent (In)               :: npoints (ndim_3d, search%npart)
04460       Type (integer_vector), Intent (In) :: srclocs (ndim_3d, search%npart)
04461       Integer, Intent (In)               :: ncpl
04462       Integer, Intent (Out)              :: nbr_cells(ncpl)
04463       Integer, Intent (Out)              :: ierror
04464     End Subroutine
04465 
04466     subroutine psmile_neigh_cells_irreg2_real ( use_how,        &
04467                grid_shape, interpolation_mode, cyclic,          &
04468                corner_shape_3d, nbr_corners,                    &
04469                corner_x, corner_y,                              &
04470                search,  control, tgt_cell, tgt_corners,         &
04471                npoints, srclocs, msklocs, ncpl,                 &
04472                num_neigh, nbr_cells, ierror )
04473 
04474       USE PSMILe_Common
04475 
04476       Integer, Intent (In)            :: use_how(3)
04477       Integer, Intent (In)            :: grid_shape (2, ndim_3d)
04478       Integer, Intent (In)            :: interpolation_mode
04479       Logical, Intent (In)            :: cyclic (ndim_3d)
04480       Integer, Intent (In)            :: corner_shape_3d(2,ndim_3d,ndim_3d)
04481       Integer, Intent (In)            :: nbr_corners(ndim_3d)
04482       Type (Enddef_search), Intent (InOut) :: search
04483       Integer, Intent (In)            :: control (2, ndim_3d, search%npart)
04484       Type (real_vector), Intent (InOut) :: tgt_cell(ndim_3d)
04485       Integer, Intent (In)            :: tgt_corners
04486       Integer, Intent (In)            :: npoints (ndim_2d, search%npart)
04487       Integer, Intent (In)            :: ncpl
04488       Type (integer_vector), Intent (In) :: srclocs (2,search%npart)
04489       Type (logical_vector), Intent (In) :: msklocs (2,search%npart)
04490       Integer, Intent (In)            :: num_neigh
04491       Real, Intent (In)               :: corner_x (corner_shape_3d (1,1,1):corner_shape_3d(2,1,1), 
04492                                                    corner_shape_3d (1,2,1):corner_shape_3d(2,2,1), 
04493                                                    nbr_corners(1))
04494       Real, Intent (In)               :: corner_y (corner_shape_3d (1,1,2):corner_shape_3d(2,1,2), 
04495                                                    corner_shape_3d (1,2,2):corner_shape_3d(2,2,2), 
04496                                                    nbr_corners(2))
04497       Integer, Intent (Out)           :: nbr_cells(ncpl)
04498       Integer, Intent (Out)           :: ierror
04499     End Subroutine
04500 !
04501     subroutine psmile_neigh_near_irr2_3d_real (grid_id,    &
04502                coords1, coords2, coords3,                  &
04503                x_coords, y_coords, z_coords,               &
04504                coords_shape,                               &
04505                mask_array, mask_shape,  mask_available,    &
04506                sin_values, cos_values, grid_valid_shape,   &
04507                search_mode,                                &
04508                srcloc, nloc, nprev, nsearch,               &
04509                neighbors_3d, num_neigh,                    &
04510                extra_search, ierror)
04511 
04512        Use PSMILe_common
04513 
04514        Integer, Intent (In)            :: grid_id
04515        Integer, Intent (In)            :: nloc, nprev, nsearch, search_mode
04516        Real, Intent (In)               :: coords1 (nloc)
04517        Real, Intent (In)               :: coords2 (nloc)
04518        Real, Intent (In)               :: coords3 (nloc)
04519        Integer, Intent (In)            :: coords_shape (2, ndim_3d)
04520        Real, Intent (In)               :: x_coords (*)
04521        Real, Intent (In)               :: y_coords (*)
04522        Real, Intent (In)               :: z_coords (*)
04523        Logical, Intent (In)            :: mask_array (*)
04524        Integer, Intent (In)            :: mask_shape (2, ndim_3d)
04525        Logical, Intent (In)            :: mask_available
04526        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
04527        Real, Intent (In)               :: sin_values (*)
04528        Real, Intent (In)               :: cos_values (*)
04529        Integer, Intent (In)            :: srcloc (ndim_3d, nloc)
04530        Integer, Intent (In)            :: num_neigh
04531        Integer, Intent (Out)           :: neighbors_3d (ndim_3d, nloc, num_neigh)
04532        Type (Extra_search_info)        :: extra_search
04533        Integer, Intent (Out)           :: ierror
04534     End Subroutine
04535 
04536     subroutine psmile_neigh_near_3d_irr2_real (grid_id,    &
04537                coords1, coords2, coords3,                  &
04538                x_coords, y_coords, z_coords,               &
04539                coords_shape,                               &
04540                mask_array, mask_shape,  mask_available,    &
04541                sin_values_lon, cos_values_lon,             &
04542                sin_values_lat, cos_values_lat,             &
04543                grid_valid_shape, search_mode,              &
04544                srcloc, srclocz, nlocs, nloc, nprev,        &
04545                neighbors_3d, num_neigh,                    &
04546                extra_search, ierror)
04547 
04548        Use PSMILe_common
04549 
04550        Integer, Intent (In)            :: grid_id
04551        Integer, Intent (In)            :: nloc, nprev, search_mode
04552        Integer, Intent (In)            :: nlocs (ndim_2d)
04553        Real, Intent (In)               :: coords1 (*)
04554        Real, Intent (In)               :: coords2 (*)
04555        Real, Intent (In)               :: coords3 (*)
04556        Integer, Intent (In)            :: coords_shape (2, ndim_3d)
04557        Real, Intent (In)               :: x_coords (*)
04558        Real, Intent (In)               :: y_coords (*)
04559        Real, Intent (In)               :: z_coords (*)
04560        Logical, Intent (In)            :: mask_array (*)
04561        Integer, Intent (In)            :: mask_shape (2, ndim_3d)
04562        Logical, Intent (In)            :: mask_available
04563        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
04564        Real, Intent (In)               :: sin_values_lon (*)
04565        Real, Intent (In)               :: cos_values_lon (*)
04566        Real, Intent (In)               :: sin_values_lat (*)
04567        Real, Intent (In)               :: cos_values_lat (*)
04568        Integer, Intent (In)            :: srcloc (ndim_2d, nlocs(1))
04569        Integer, Intent (In)            :: srclocz (nlocs(2))
04570        Integer, Intent (In)            :: num_neigh
04571        Integer, Intent (Out)           :: neighbors_3d (ndim_3d, nloc, num_neigh)
04572        Type (Extra_search_info)        :: extra_search
04573        Integer, Intent (Out)           :: ierror
04574     End Subroutine
04575 
04576     subroutine psmile_neigh_near_3d_irr3_real (grid_id,    &
04577                coords1, coords2, coords3,                  &
04578                x_coords, y_coords, z_coords,               &
04579                coords_shape,                               &
04580                mask_array, mask_shape,  mask_available,    &
04581                sin_values_lon, cos_values_lon,             &
04582                sin_values_lat, cos_values_lat,             &
04583                grid_valid_shape, search_mode,              &
04584                srcloc, nsearch, nloc, nprev,               &
04585                neighbors_3d, num_neigh,                    &
04586                extra_search, ierror)
04587 
04588        Use PSMILe_common
04589 
04590        Integer,            Intent (In)  :: grid_id
04591        Integer,            Intent (In)  :: nloc, nprev, search_mode
04592        Integer,            Intent (In)  :: nsearch
04593        Real,               Intent (In)  :: coords1 (*)
04594        Real,               Intent (In)  :: coords2 (*)
04595        Real,               Intent (In)  :: coords3 (*)
04596        Integer,            Intent (In)  :: coords_shape (2, ndim_3d)
04597        Real,               Intent (In)  :: x_coords (*)
04598        Real,               Intent (In)  :: y_coords (*)
04599        Real,               Intent (In)  :: z_coords (*)
04600        Logical,            Intent (In)  :: mask_array (*)
04601        Integer,            Intent (In)  :: mask_shape (2, ndim_3d)
04602        Logical,            Intent (In)  :: mask_available
04603        Integer,            Intent (In)  :: grid_valid_shape (2, ndim_3d)
04604        Real,               Intent (In)  :: sin_values_lon (*)
04605        Real,               Intent (In)  :: cos_values_lon (*)
04606        Real,               Intent (In)  :: sin_values_lat (*)
04607        Real,               Intent (In)  :: cos_values_lat (*)
04608        Integer,            Intent (In)  :: srcloc (ndim_3d, nloc)
04609        Integer,            Intent (In)  :: num_neigh
04610        Integer,            Intent (Out) :: neighbors_3d (ndim_3d, nloc, 
04611                                                           num_neigh)
04612        Type (Extra_search_info)         :: extra_search
04613        Integer,            Intent (Out) :: ierror
04614     End Subroutine
04615 
04616     subroutine psmile_neigh_nearx_irr2_3d_real (grid_id,   &
04617                coords1, coords2, coords3,                  &
04618                x_coords, y_coords, z_coords,               &
04619                coords_shape,                               &
04620                mask_array, mask_shape,  mask_available,    &
04621                sin_values, cos_values, grid_valid_shape,   &
04622                search_mode,                                &
04623                srcloc, nloc, nprev, nsearch,               &
04624                neighbors_3d, num_neigh,                    &
04625                extra_search, ierror)
04626 
04627        Use PSMILe_common
04628 
04629        Integer,            Intent (In)  :: grid_id
04630        Integer,            Intent (In)  :: nloc, nprev, nsearch, search_mode
04631        Real,               Intent (In)  :: coords1 (nloc)
04632        Real,               Intent (In)  :: coords2 (nloc)
04633        Real,               Intent (In)  :: coords3 (nloc)
04634        Integer,            Intent (In)  :: coords_shape (2, ndim_3d)
04635        Real,               Intent (In)  :: x_coords (*)
04636        Real,               Intent (In)  :: y_coords (*)
04637        Real,               Intent (In)  :: z_coords (*)
04638        Logical,            Intent (In)  :: mask_array (*)
04639        Integer,            Intent (In)  :: mask_shape (2, ndim_3d)
04640        Logical,            Intent (In)  :: mask_available
04641        Integer,            Intent (In)  :: grid_valid_shape (2, ndim_3d)
04642        Real,               Intent (In)  :: sin_values (*)
04643        Real,               Intent (In)  :: cos_values (*)
04644        Integer,            Intent (In)  :: srcloc (ndim_3d, nloc)
04645        Integer,            Intent (In)  :: num_neigh
04646        Integer,            Intent (Out) :: neighbors_3d (ndim_3d, nloc, 
04647                                                          num_neigh)
04648        Type (Extra_search_info)         :: extra_search
04649        Integer,            Intent (Out) :: ierror
04650     End Subroutine
04651 
04652     subroutine psmile_neigh_near_3d_reg_real (grid_id,     &
04653                coords1, coords2, coords3,                  &
04654                x_coords, y_coords, z_coords,               &
04655                coords_shape,                               &
04656                mask_array, mask_shape,  mask_available,    &
04657                sin_values_lon, cos_values_lon,             &
04658                sin_values_lat, cos_values_lat,             &
04659                grid_valid_shape, search_mode,              &
04660                srclocs, nlocs, nloc, nprev,                &
04661                neighbors_3d, num_neigh,                    &
04662                extra_search, ierror)
04663 
04664        Use PSMILe_common
04665 
04666        Integer, Intent (In)            :: grid_id
04667        Integer, Intent (In)            :: nloc, nprev, search_mode
04668        Integer, Intent (In)            :: nlocs (ndim_3d)
04669        Real, Intent (In)               :: coords1 (*)
04670        Real, Intent (In)               :: coords2 (*)
04671        Real, Intent (In)               :: coords3 (*)
04672        Integer, Intent (In)            :: coords_shape (2, ndim_3d)
04673        Real, Intent (In)               :: x_coords (*)
04674        Real, Intent (In)               :: y_coords (*)
04675        Real, Intent (In)               :: z_coords (*)
04676        Logical, Intent (In)            :: mask_array (*)
04677        Integer, Intent (In)            :: mask_shape (2, ndim_3d)
04678        Logical, Intent (In)            :: mask_available
04679        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
04680        Real, Intent (In)               :: sin_values_lon (*)
04681        Real, Intent (In)               :: cos_values_lon (*)
04682        Real, Intent (In)               :: sin_values_lat (*)
04683        Real, Intent (In)               :: cos_values_lat (*)
04684        Type (integer_vector), Intent (In) :: srclocs (ndim_3d)
04685        Integer, Intent (In)            :: num_neigh
04686        Integer, Intent (Out)           :: neighbors_3d (ndim_3d, nloc, num_neigh)
04687        Type (Extra_search_info)        :: extra_search
04688        Integer, Intent (Out)           :: ierror
04689     End Subroutine
04690 
04691     subroutine psmile_neigh_nearx_3d_irr2_real (grid_id,   &
04692                coords1, coords2, coords3,                  &
04693                x_coords, y_coords, z_coords,               &
04694                coords_shape,                               &
04695                mask_array, mask_shape,  mask_available,    &
04696                sin_values_lon, cos_values_lon,             &
04697                sin_values_lat, cos_values_lat,             &
04698                grid_valid_shape, search_mode,              &
04699                srcloc, srclocz, nlocs, nloc, nprev,        &
04700                neighbors_3d, num_neigh,                    &
04701                extra_search, ierror)
04702 
04703        Use PSMILe_common
04704 
04705        Integer, Intent (In)            :: grid_id
04706        Integer, Intent (In)            :: nloc, nprev, search_mode
04707        Integer, Intent (In)            :: nlocs (ndim_2d)
04708        Real, Intent (In)               :: coords1 (*)
04709        Real, Intent (In)               :: coords2 (*)
04710        Real, Intent (In)               :: coords3 (*)
04711        Integer, Intent (In)            :: coords_shape (2, ndim_3d)
04712        Real, Intent (In)               :: x_coords (*)
04713        Real, Intent (In)               :: y_coords (*)
04714        Real, Intent (In)               :: z_coords (*)
04715        Logical, Intent (In)            :: mask_array (*)
04716        Integer, Intent (In)            :: mask_shape (2, ndim_3d)
04717        Logical, Intent (In)            :: mask_available
04718        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
04719        Real, Intent (In)               :: sin_values_lon (*)
04720        Real, Intent (In)               :: cos_values_lon (*)
04721        Real, Intent (In)               :: sin_values_lat (*)
04722        Real, Intent (In)               :: cos_values_lat (*)
04723        Integer, Intent (In)            :: srcloc (ndim_2d, nlocs(1))
04724        Integer, Intent (In)            :: srclocz (nlocs(2))
04725        Integer, Intent (In)            :: num_neigh
04726        Integer, Intent (Out)           :: neighbors_3d (ndim_3d, nloc, num_neigh)
04727        Type (Extra_search_info)        :: extra_search
04728        Integer, Intent (Out)           :: ierror
04729     End Subroutine
04730 
04731     subroutine psmile_neigh_nearx_3d_irr3_real (grid_id,   &
04732                coords1, coords2, coords3,                  &
04733                x_coords, y_coords, z_coords,               &
04734                coords_shape,                               &
04735                mask_array, mask_shape,  mask_available,    &
04736                sin_values_lon, cos_values_lon,             &
04737                sin_values_lat, cos_values_lat,             &
04738                grid_valid_shape, search_mode,              &
04739                srcloc, nsearch, nloc, nprev,               &
04740                neighbors_3d, num_neigh,                    &
04741                extra_search, ierror)
04742 
04743        Use PSMILe_common
04744 
04745        Integer, Intent (In)            :: grid_id
04746        Integer, Intent (In)            :: nloc, nprev, search_mode
04747        Integer, Intent (In)            :: nsearch
04748        Real, Intent (In)               :: coords1 (*)
04749        Real, Intent (In)               :: coords2 (*)
04750        Real, Intent (In)               :: coords3 (*)
04751        Integer, Intent (In)            :: coords_shape (2, ndim_3d)
04752        Real, Intent (In)               :: x_coords (*)
04753        Real, Intent (In)               :: y_coords (*)
04754        Real, Intent (In)               :: z_coords (*)
04755        Logical, Intent (In)            :: mask_array (*)
04756        Integer, Intent (In)            :: mask_shape (2, ndim_3d)
04757        Logical, Intent (In)            :: mask_available
04758        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
04759        Real, Intent (In)               :: sin_values_lon (*)
04760        Real, Intent (In)               :: cos_values_lon (*)
04761        Real, Intent (In)               :: sin_values_lat (*)
04762        Real, Intent (In)               :: cos_values_lat (*)
04763        Integer, Intent (In)            :: srcloc (ndim_3d, nloc)
04764        Integer, Intent (In)            :: num_neigh
04765        Integer, Intent (Out)           :: neighbors_3d (ndim_3d, nloc, num_neigh)
04766        Type (Extra_search_info)        :: extra_search
04767        Integer, Intent (Out)           :: ierror
04768     End Subroutine
04769 
04770     subroutine psmile_neigh_nearx_3d_reg_real (grid_id,    &
04771                coords1, coords2, coords3,                  &
04772                x_coords, y_coords, z_coords,               &
04773                coords_shape,                               &
04774                mask_array, mask_shape,  mask_available,    &
04775                sin_values_lon, cos_values_lon,             &
04776                sin_values_lat, cos_values_lat,             &
04777                grid_valid_shape, search_mode,              &
04778                srclocs, nlocs, nloc, nprev,                &
04779                neighbors_3d, num_neigh,                    &
04780                extra_search, ierror)
04781 
04782        Use PSMILe_common
04783 
04784        Integer, Intent (In)            :: grid_id
04785        Integer, Intent (In)            :: nloc, nprev, search_mode
04786        Integer, Intent (In)            :: nlocs (ndim_3d)
04787        Real, Intent (In)               :: coords1 (*)
04788        Real, Intent (In)               :: coords2 (*)
04789        Real, Intent (In)               :: coords3 (*)
04790        Integer, Intent (In)            :: coords_shape (2, ndim_3d)
04791        Real, Intent (In)               :: x_coords (*)
04792        Real, Intent (In)               :: y_coords (*)
04793        Real, Intent (In)               :: z_coords (*)
04794        Logical, Intent (In)            :: mask_array (*)
04795        Integer, Intent (In)            :: mask_shape (2, ndim_3d)
04796        Logical, Intent (In)            :: mask_available
04797        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
04798        Real, Intent (In)               :: sin_values_lon (*)
04799        Real, Intent (In)               :: cos_values_lon (*)
04800        Real, Intent (In)               :: sin_values_lat (*)
04801        Real, Intent (In)               :: cos_values_lat (*)
04802        Type (integer_vector), Intent (In) :: srclocs (ndim_3d)
04803        Integer, Intent (In)            :: num_neigh
04804        Integer, Intent (Out)           :: neighbors_3d (ndim_3d, nloc, num_neigh)
04805        Type (Extra_search_info)        :: extra_search
04806        Integer, Intent (Out)           :: ierror
04807     End Subroutine
04808 
04809     subroutine psmile_neigh_near_irreg2_real (grid_id,     &
04810                coords1, coords2, coords3,                  &
04811                x_coords, y_coords, z_coords,               &
04812                coords_shape,                               &
04813                mask_array, mask_shape,  mask_available,    &
04814                sin_values, cos_values, grid_valid_shape,   &
04815                search_mode,                                &
04816                srcloc, srclocz, nlocs,                     &
04817                nloc, nprev,                                &
04818                neighbors_3d, num_neigh,                    &
04819                extra_search, ierror)
04820 
04821        Use PSMILe_common
04822 
04823        Integer, Intent (In)            :: grid_id
04824        Integer, Intent (In)            :: nloc, nprev, search_mode
04825        Integer, Intent (In)            :: nlocs (ndim_2d)
04826        Real, Intent (In)               :: coords1 (nlocs(1)*nlocs(2))
04827        Real, Intent (In)               :: coords2 (nlocs(1)*nlocs(2))
04828        Real, Intent (In)               :: coords3 (nlocs(1)*nlocs(2))
04829        Integer, Intent (In)            :: coords_shape (2, ndim_3d)
04830        Real, Intent (In)               :: x_coords (*)
04831        Real, Intent (In)               :: y_coords (*)
04832        Real, Intent (In)               :: z_coords (*)
04833        Logical, Intent (In)            :: mask_array (*)
04834        Integer, Intent (In)            :: mask_shape (2, ndim_3d)
04835        Logical, Intent (In)            :: mask_available
04836        Real, Intent (In)               :: sin_values (*)
04837        Real, Intent (In)               :: cos_values (*)
04838        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
04839        Integer, Intent (In)            :: srcloc (ndim_2d, nlocs(1))
04840        Integer, Intent (In)            :: srclocz (nlocs(2))
04841        Integer, Intent (In)            :: num_neigh
04842        Integer, Intent (Out)           :: neighbors_3d (ndim_3d, nloc, num_neigh)
04843        Type (Extra_search_info)        :: extra_search
04844        Integer, Intent (Out)           :: ierror
04845     End Subroutine
04846 
04847     subroutine psmile_neigh_nearx_irreg2_real (grid_id,    &
04848                coords1, coords2, coords3,                  &
04849                x_coords, y_coords, z_coords,               &
04850                coords_shape,                               &
04851                mask_array, mask_shape,  mask_available,    &
04852                sin_values, cos_values, grid_valid_shape,   &
04853                search_mode,                                &
04854                srcloc, srclocz, nlocs,                     &
04855                nloc, nprev,                                &
04856                neighbors_3d, num_neigh,                    &
04857                extra_search, ierror)
04858 
04859        Use PSMILe_common
04860 
04861        Integer, Intent (In)            :: grid_id
04862        Integer, Intent (In)            :: nloc, nprev, search_mode
04863        Integer, Intent (In)            :: nlocs (ndim_2d)
04864        Real, Intent (In)               :: coords1 (nlocs(1)*nlocs(2))
04865        Real, Intent (In)               :: coords2 (nlocs(1)*nlocs(2))
04866        Real, Intent (In)               :: coords3 (nlocs(1)*nlocs(2))
04867        Integer, Intent (In)            :: coords_shape (2, ndim_3d)
04868        Real, Intent (In)               :: x_coords (*)
04869        Real, Intent (In)               :: y_coords (*)
04870        Real, Intent (In)               :: z_coords (*)
04871        Logical, Intent (In)            :: mask_array (*)
04872        Integer, Intent (In)            :: mask_shape (2, ndim_3d)
04873        Logical, Intent (In)            :: mask_available
04874        Real, Intent (In)               :: sin_values (*)
04875        Real, Intent (In)               :: cos_values (*)
04876        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
04877        Integer, Intent (In)            :: srcloc (ndim_2d, nlocs(1))
04878        Integer, Intent (In)            :: srclocz (nlocs(2))
04879        Integer, Intent (In)            :: num_neigh
04880        Integer, Intent (Out)           :: neighbors_3d (ndim_3d, nloc, num_neigh)
04881        Type (Extra_search_info)        :: extra_search
04882        Integer, Intent (Out)           :: ierror
04883     End Subroutine
04884 
04885     subroutine psmile_neigh_nearx_sub_irr_real (           &
04886                            grid_id,                        &
04887                            x_coords, y_coords, z_coords,   &
04888                            coords_shape,                   &
04889                            mask_array, mask_shape,  mask_available,    &
04890                            sin_values, cos_values,         &
04891                            grid_valid_shape, search_mode,  &
04892                            neighbors_3d, num_neigh, nloc,  &
04893                            extra_search,                   &
04894                            ijk, sin_search, cos_search,    &
04895                            z_search, jbeg, jend, width, ierror)
04896 
04897        Use PSMILe_common
04898 
04899        Integer,            Intent (In)   :: grid_id
04900        Integer,            Intent (In)   :: search_mode
04901        Integer,            Intent (In)   :: coords_shape (2, ndim_3d)
04902        Real,               Intent (In)   :: x_coords (*)
04903        Real,               Intent (In)   :: y_coords (*)
04904        Real,               Intent (In)   :: z_coords (*)
04905        Logical,            Intent (In)   :: mask_array (*)
04906        Integer,            Intent (In)   :: mask_shape (2, ndim_3d)
04907        Logical,            Intent (In)   :: mask_available
04908        Integer,            Intent (In)   :: grid_valid_shape (2, ndim_3d)
04909        Real,               Intent (In)   :: sin_values (*)
04910        Real,               Intent (In)   :: cos_values (*)
04911        Integer,            Intent (In)   :: nloc, num_neigh
04912        Type (Extra_search_info), Intent(InOut) :: extra_search
04913        Integer,            Intent (In)   :: jbeg, jend
04914        Integer,            Intent (In)   :: ijk (ndim_3d, jbeg:jend)
04915        Integer,            Intent (In)   :: width (ndim_3d)
04916        Real,               Intent (In)   :: sin_search (jbeg:jend, 2)
04917        Real,               Intent (In)   :: cos_search (jbeg:jend, 2)
04918        Real,               Intent (In)   :: z_search   (jbeg:jend)
04919        Integer,            Intent (Out)  :: neighbors_3d (ndim_3d, nloc, num_neigh)
04920        Integer,            Intent (Out)  :: ierror
04921     End Subroutine
04922 
04923     subroutine psmile_neigh_nearx_sub_reg_real (           &
04924                            grid_id,                        &
04925                            x_coords, y_coords, z_coords,   &
04926                            coords_shape,                   &
04927                            mask_array, mask_shape,  mask_available,    &
04928                            sin_values_lon, cos_values_lon, &
04929                            sin_values_lat, cos_values_lat, &
04930                            grid_valid_shape, search_mode,  &
04931                            neighbors_3d, num_neigh, nloc,  &
04932                            extra_search,                   &
04933                            ijk, sin_search, cos_search,    &
04934                            z_search, jbeg, jend, width, ierror)
04935 
04936        Use PSMILe_common
04937 
04938        Integer,            Intent (In)   :: grid_id
04939        Integer,            Intent (In)   :: search_mode
04940        Integer,            Intent (In)   :: coords_shape (2, ndim_3d)
04941        Real,               Intent (In)   :: x_coords (*)
04942        Real,               Intent (In)   :: y_coords (*)
04943        Real,               Intent (In)   :: z_coords (*)
04944        Logical,            Intent (In)   :: mask_array (*)
04945        Integer,            Intent (In)   :: mask_shape (2, ndim_3d)
04946        Logical,            Intent (In)   :: mask_available
04947        Integer,            Intent (In)   :: grid_valid_shape (2, ndim_3d)
04948        Real,               Intent (In)   :: sin_values_lon (*)
04949        Real,               Intent (In)   :: cos_values_lon (*)
04950        Real,               Intent (In)   :: sin_values_lat (*)
04951        Real,               Intent (In)   :: cos_values_lat (*)
04952        Integer,            Intent (In)   :: nloc, num_neigh
04953        Type (Extra_search_info), Intent(In) :: extra_search
04954        Integer,            Intent (In)   :: jbeg, jend
04955        Integer,            Intent (In)   :: ijk (ndim_3d, jbeg:jend)
04956        Integer,            Intent (In)   :: width (ndim_3d)
04957        Real,               Intent (In)   :: sin_search (jbeg:jend, 2)
04958        Real,               Intent (In)   :: cos_search (jbeg:jend, 2)
04959        Real,               Intent (In)   :: z_search   (jbeg:jend)
04960        Integer,            Intent (Out)  :: neighbors_3d (ndim_3d, nloc, num_neigh)
04961        Integer,            Intent (Out)  :: ierror
04962     End Subroutine
04963 
04964     subroutine psmile_neigh_nearest_3d_real (grid_id,         &
04965                     coords1, coords2, coords3,                &
04966                     x_coords, y_coords, z_coords,             &
04967                     coords_shape,                             &
04968                     mask_array, mask_shape,  mask_available,  &
04969                     sin_values, cos_values, grid_valid_shape, &
04970                     srcloc, nloc, nprev, nsearch,             &
04971                     neighbors_3d, num_neigh,                  &
04972                     extra_search, ierror)
04973 
04974        Use PSMILe_common
04975 
04976        Integer, Intent (In)            :: grid_id
04977        Integer, Intent (In)            :: coords_shape (2, ndim_3d)
04978        Integer, Intent (In)            ::   mask_shape (2, ndim_3d)
04979        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
04980        Real, Intent (In)               :: x_coords (*)
04981        Real, Intent (In)               :: y_coords (*)
04982        Real, Intent (In)               :: z_coords (*)
04983        Logical, Intent (In)            :: mask_array (*)
04984        Logical, Intent (In)            :: mask_available
04985        Real, Intent (In)               :: sin_values (*)
04986        Real, Intent (In)               :: cos_values (*)
04987        Integer, Intent (In)            :: nloc, nprev, nsearch
04988        Integer, Intent (In)            :: srcloc (ndim_3d, nloc)
04989        Real, Intent (In)               :: coords1 (nloc)
04990        Real, Intent (In)               :: coords2 (nloc)
04991        Real, Intent (In)               :: coords3 (nloc)
04992        Integer, Intent (In)            :: num_neigh
04993 !
04994        Integer, Intent (Out)           :: neighbors_3d (ndim_3d, nloc, num_neigh)
04995        Type (Extra_search_info)        :: extra_search
04996        Integer, Intent (Out)           :: ierror
04997     End Subroutine
04998 
04999     subroutine psmile_neigh_nearestx_3d_real (grid_id,     &
05000                coords1, coords2, coords3,                  &
05001                x_coords, y_coords, z_coords,               &
05002                coords_shape,                               &
05003                mask_array, mask_shape,  mask_available,    &
05004                sin_values, cos_values, grid_valid_shape,   &
05005                srcloc, nloc, nprev, nsearch,               &
05006                neighbors_3d, num_neigh,                    &
05007                extra_search, ierror)
05008 
05009        Use PSMILe_common
05010 
05011        Integer, Intent (In)            :: grid_id
05012        Integer, Intent (In)            :: nloc, nprev, nsearch
05013        Integer, Intent (In)            :: coords_shape (2, ndim_3d)
05014        Integer, Intent (In)            :: mask_shape   (2, ndim_3d)
05015        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
05016        Real, Intent (In)               :: coords1 (nloc)
05017        Real, Intent (In)               :: coords2 (nloc)
05018        Real, Intent (In)               :: coords3 (nloc)
05019        Real, Intent (In)               :: x_coords (*)
05020        Real, Intent (In)               :: y_coords (*)
05021        Real, Intent (In)               :: z_coords (*)
05022        Logical, Intent (In)            :: mask_array (*)
05023        Logical, Intent (In)            :: mask_available
05024        Real, Intent (In)               :: sin_values (*)
05025        Real, Intent (In)               :: cos_values (*)
05026        Integer, Intent (In)            :: srcloc (ndim_3d, nloc)
05027        Integer, Intent (In)            :: num_neigh
05028        Integer, Intent (Out)           :: neighbors_3d (ndim_3d, nloc, num_neigh)
05029 !
05030        Type (Extra_search_info)        :: extra_search
05031        Integer, Intent (Out)           :: ierror
05032     End Subroutine
05033 
05034     subroutine psmile_neigh_tricu_3d (                       &
05035                     grid_valid_shape, interp_mode, cyclic,   &
05036                     srcloc, nloc,neighbors_3d, num_neigh, ierror)
05037 
05038        Use PSMILe_common
05039 
05040        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
05041        Integer, Intent (In)            :: interp_mode
05042        Logical, Intent (In)            :: cyclic (ndim_3d)
05043        Integer, Intent (In)            :: nloc
05044        Integer, Intent (In)            :: srcloc (ndim_3d, nloc)
05045        Integer, Intent (In)            :: num_neigh
05046        Integer, Intent (Out)           :: neighbors_3d (ndim_3d, nloc, num_neigh)
05047        Integer, Intent (Out)           :: ierror
05048     End Subroutine
05049 
05050     subroutine psmile_neigh_tricu_3d_reg (                            &
05051                     grid_valid_shape, interp_mode, cyclic,            &
05052                     srclocs, nlocs, nloc, nprev, neighbors_3d,        &
05053                     num_neigh, ierror)
05054 
05055        Use PSMILe_common
05056 
05057        Integer, Intent (In)               :: grid_valid_shape (2, ndim_3d)
05058        Integer, Intent (In)               :: interp_mode
05059        Logical, Intent (In)               :: cyclic (ndim_3d)
05060        Type (integer_vector), Intent (In) :: srclocs (ndim_3d)
05061        Integer, Intent (In)               :: nlocs (ndim_3d)
05062        Integer, Intent (In)               :: nloc, nprev
05063        Integer, Intent (In)               :: num_neigh
05064        Integer, Intent (Out)              :: neighbors_3d (ndim_3d, nloc, num_neigh)
05065        Integer, Intent (Out)              :: ierror
05066     End Subroutine
05067 
05068     subroutine psmile_neigh_tricu_gauss2 (                            &
05069                     grid_id, grid_valid_shape, interp_mode,           &
05070                     srcloc, virtual_cell, nloc,virtual_cell_available,&
05071                     neighbors_3d, num_neigh, neigh_bascule, ierror)
05072 
05073        Use PSMILe_common
05074 
05075        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
05076        Integer, Intent (In)            :: grid_id, interp_mode
05077        Logical, Intent (In)            :: virtual_cell_available
05078        Integer, Intent (In)            :: nloc
05079        Integer, Intent (In)            :: srcloc (ndim_3d, nloc)
05080        Integer, Intent (In)            :: virtual_cell (nloc)
05081        Integer, Intent (In)            :: num_neigh
05082        Integer, Intent (Out)           :: neighbors_3d (ndim_3d, nloc, num_neigh)
05083        Integer, Intent (Out)           :: neigh_bascule(nloc)
05084        Integer, Intent (Out)           :: ierror
05085     End Subroutine
05086 
05087     subroutine psmile_neigh_tricu_gauss2_irreg (                      &
05088                     grid_id, grid_valid_shape, interp_mode,           &
05089                     srcloc, srclocz, virtual_cell, nlocs, nloc, nprev,&
05090                     virtual_cell_available, neighbors_3d, num_neigh,  &
05091                     neigh_bascule, ierror)
05092 
05093        Use PSMILe_common
05094 
05095        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
05096        Integer, Intent (In)            :: grid_id, interp_mode
05097        Integer, Intent (In)            :: nlocs (ndim_2d)
05098        Integer, Intent (In)            :: srcloc (ndim_2d, nlocs(1))
05099        Integer, Intent (In)            :: srclocz (nlocs(2))
05100        Integer, Intent (In)            :: virtual_cell (nlocs(1))
05101        Integer, Intent (In)            :: nloc, nprev
05102        Integer, Intent (In)            :: num_neigh
05103        Logical, Intent (In)            :: virtual_cell_available
05104        Integer, Intent (Out)           :: neighbors_3d (ndim_3d, nloc, num_neigh)
05105        Integer, Intent (Out)           :: neigh_bascule(nloc)
05106        Integer, Intent (Out)           :: ierror
05107     End Subroutine
05108 
05109     subroutine psmile_neigh_tricu_irreg2 (                            &
05110                     grid_valid_shape, interp_mode, cyclic,            &
05111                     srcloc, srclocz, nlocs, nloc, nprev,neighbors_3d, &
05112                     num_neigh, ierror)
05113 
05114        Use PSMILe_common
05115 
05116        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
05117        Integer, Intent (In)            :: interp_mode
05118        Logical, Intent (In)            :: cyclic (ndim_3d)
05119        Integer, Intent (In)            :: nlocs (ndim_2d)
05120        Integer, Intent (In)            :: srcloc (ndim_2d, nlocs(1))
05121        Integer, Intent (In)            :: srclocz (nlocs(2))
05122        Integer, Intent (In)            :: nloc, nprev
05123        Integer, Intent (In)            :: num_neigh
05124        Integer, Intent (Out)           :: neighbors_3d (ndim_3d, nloc, num_neigh)
05125        Integer, Intent (Out)           :: ierror
05126     End Subroutine
05127 
05128     subroutine psmile_neigh_trili_3d (                       &
05129                     grid_valid_shape, interp_mode, cyclic,   &
05130                     srcloc, nloc, neighbors_3d, num_neigh,   &
05131                     ierror)
05132 
05133        Use PSMILe_common
05134 
05135        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
05136        Integer, Intent (In)            :: interp_mode
05137        Logical, Intent (In)            :: cyclic (ndim_3d)
05138        Integer, Intent (In)            :: nloc
05139        Integer, Intent (In)            :: srcloc (ndim_3d, nloc)
05140        Integer, Intent (In)            :: num_neigh
05141        Integer, Intent (Out)           :: neighbors_3d (ndim_3d, nloc, num_neigh)
05142        Integer, Intent (Out)           :: ierror
05143     End Subroutine
05144 
05145     subroutine psmile_neigh_trili_3d_reg (                            &
05146                     grid_valid_shape, interp_mode, cyclic,            &
05147                     srclocs, nlocs, nloc, nprev,neighbors_3d,         &
05148                     num_neigh, ierror)
05149 
05150        Use PSMILe_common
05151 
05152        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
05153        Integer, Intent (In)            :: interp_mode
05154        Logical, Intent (In)            :: cyclic (ndim_3d)
05155        Type (integer_vector), Intent (In) :: srclocs (ndim_3d)
05156        Integer, Intent (In)            :: nlocs (ndim_3d)
05157        Integer, Intent (In)            :: nloc, nprev
05158        Integer, Intent (In)            :: num_neigh
05159        Integer, Intent (Out)           :: neighbors_3d (ndim_3d, nloc, num_neigh)
05160        Integer, Intent (Out)           :: ierror
05161     End Subroutine
05162 
05163     subroutine psmile_neigh_trili_gauss2 (                          &
05164                     grid_id, grid_valid_shape, interp_mode, srcloc, &
05165                     virtual_cell, nloc, virtual_cell_available,     &
05166                     neighbors_3d, num_neigh, ierror)
05167 
05168        Use PSMILe_common
05169 
05170        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
05171        Integer, Intent (In)            :: grid_id, interp_mode
05172        Logical, Intent (In)            :: virtual_cell_available
05173        Integer, Intent (In)            :: nloc
05174        Integer, Intent (In)            :: srcloc (ndim_3d, nloc)
05175        Integer, Intent (In)            :: virtual_cell (nloc)
05176        Integer, Intent (In)            :: num_neigh
05177        Integer, Intent (Out)           :: neighbors_3d (ndim_3d, nloc, num_neigh)
05178        Integer, Intent (Out)           :: ierror
05179     End Subroutine
05180 
05181     subroutine psmile_neigh_trili_gauss2_irreg (                      &
05182                     grid_id, grid_valid_shape, interp_mode,           &
05183                     srcloc, srclocz, virtual_cell, nlocs,             &
05184                     nloc, nprev, virtual_cell_available,neighbors_3d, &
05185                     num_neigh, ierror)
05186 
05187        Use PSMILe_common
05188 
05189        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
05190        Integer, Intent (In)            :: grid_id, interp_mode
05191        Integer, Intent (In)            :: nlocs (ndim_2d)
05192        Integer, Intent (In)            :: srcloc (ndim_2d, nlocs(1))
05193        Integer, Intent (In)            :: srclocz (nlocs(2))
05194        Integer, Intent (In)            :: virtual_cell (nlocs(1))
05195        Integer, Intent (In)            :: nloc, nprev
05196        Integer, Intent (In)            :: num_neigh
05197        Logical, Intent (In)            :: virtual_cell_available
05198        Integer, Intent (Out)           :: neighbors_3d (ndim_3d, nloc, num_neigh)
05199        Integer, Intent (Out)           :: ierror
05200     End Subroutine
05201 
05202     subroutine psmile_neigh_trili_irreg2 (                            &
05203                     grid_valid_shape, interp_mode, cyclic,            &
05204                     srcloc, srclocz, nlocs, nloc, nprev, neighbors_3d,&
05205                     num_neigh, ierror)
05206 
05207        Use PSMILe_common
05208 
05209        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
05210        Integer, Intent (In)            :: interp_mode
05211        Logical, Intent (In)            :: cyclic (ndim_3d)
05212        Integer, Intent (In)            :: nlocs (ndim_2d)
05213        Integer, Intent (In)            :: srcloc (ndim_2d, nlocs(1))
05214        Integer, Intent (In)            :: srclocz (nlocs(2))
05215        Integer, Intent (In)            :: nloc, nprev
05216        Integer, Intent (In)            :: num_neigh
05217        Integer, Intent (Out)           :: neighbors_3d (ndim_3d, nloc, num_neigh)
05218        Integer, Intent (Out)           :: ierror
05219     End Subroutine
05220 
05221     subroutine psmile_mg_coarse_1d_real (lev, chmin, chmax,        &
05222                                          found, locations, coords, &
05223                                          ibeg, iend)
05224        Integer, Intent (In)            :: lev
05225        Integer, Intent (InOut)         :: ibeg, iend
05226        Real, Intent (In)               :: chmin (0:0), chmax (0:0)
05227        Integer, Intent (InOut)         :: found (iend)
05228        Integer, Intent (InOut)         :: locations (iend)
05229        Real, Intent (In)               :: coords (iend)
05230     End Subroutine
05231 
05232     subroutine psmile_mg_coarse_2d_real (lev, chmin, chmax,         &
05233                                          found, locations, coords1, &
05234                                          coords2, ibeg, iend)
05235        Use PSMILe_common
05236 
05237        Integer, Intent (In)            :: lev
05238        Integer, Intent (InOut)         :: ibeg, iend
05239        Type (real_vector), Intent (In) :: chmin (ndim_2d), chmax (ndim_2d)
05240        Integer, Intent (InOut)         :: found (iend)
05241        Integer, Intent (InOut)         :: locations (iend)
05242        Real, Intent (In)               :: coords1 (iend)
05243        Real, Intent (In)               :: coords2 (iend)
05244     End Subroutine
05245 
05246     subroutine psmile_mg_coarse_3d_real (lev, chmin, chmax,         &
05247                                          found, locations, coords1, &
05248                                          coords2, coords3, ibeg, iend)
05249        Use PSMILe_common
05250 
05251        Integer, Intent (In)            :: lev
05252        Integer, Intent (InOut)         :: ibeg, iend
05253        Type (real_vector), Intent (In) :: chmin (ndim_3d), chmax (ndim_3d)
05254        Integer, Intent (InOut)         :: found (iend)
05255        Integer, Intent (InOut)         :: locations (iend)
05256        Real, Intent (In)               :: coords1 (iend)
05257        Real, Intent (In)               :: coords2 (iend)
05258        Real, Intent (In)               :: coords3 (iend)
05259     End Subroutine
05260 
05261     subroutine psmile_mg_next_level_1d_real (grid_id, idim,          &
05262                                      lev, nlev,                      &
05263                                      chmin, chmax, midp, levdim,     &
05264                                      found, loc, coords, ibeg, iend, &
05265                                      ijkinc, ijkcoa, ierror)
05266 
05267        Use PSMILe_common
05268        Integer, Intent (In)            :: grid_id
05269        Integer, Intent (In)            :: idim, levdim
05270        Integer, Intent (InOut)         :: ibeg, iend
05271        Integer, Intent (In)            :: lev, nlev, ijkinc, ijkcoa
05272        Real, Intent (In)               :: chmin (0:levdim)
05273        Real, Intent (In)               :: chmax (0:levdim)
05274        Real, Intent (In)               :: midp  (0:levdim)
05275        Integer, Intent (InOut)         :: found (iend)
05276        Integer, Intent (InOut)         :: loc   (iend)
05277        Real, Intent (In)               :: coords (iend)
05278        Integer, Intent (Out)           :: ierror
05279     End Subroutine
05280 
05281     subroutine psmile_mg_next_level_2d_real (grid_id, lev, nlev,     &
05282                                      chmin1, chmin2,                 &
05283                                      chmax1, chmax2,                 &
05284                                      midp1,  midp2,                  &
05285                                      levdim,                         &
05286                                      found, loc, range,              &
05287                                      coords1, coords2,               &
05288                                      shape, control,                 &
05289                                      ijkinc, ijkcoa, ierror)
05290 
05291        Use PSMILe_common
05292        Integer, Intent (In)            :: grid_id
05293        Integer, Intent (In)            :: levdim (ndim_2d)
05294        Integer, Intent (In)            :: lev, nlev
05295        Integer, Intent (In)            :: ijkinc(ndim_3d), ijkcoa(ndim_2d)
05296        Real, Intent (In)               :: chmin1 (*), chmin2 (*)
05297        Real, Intent (In)               :: chmax1 (*), chmax2 (*)
05298        Real, Intent (In)               :: midp1  (*), midp2  (*)
05299        Integer, Intent (InOut)         :: found (*)
05300        Integer, Intent (InOut)         :: loc   (2, *)
05301        Integer, Intent (In)            :: range (2, ndim_3d)
05302        Real, Intent (In)               :: coords1 (*)
05303        Real, Intent (In)               :: coords2 (*)
05304        Integer, Intent (In)            :: shape (2, ndim_3d)
05305        Integer, Intent (InOut)         :: control (2, ndim_3d)
05306        Integer, Intent (Out)           :: ierror
05307     End Subroutine
05308 
05309     subroutine psmile_mg_next_level_3d_real (grid_id, lev, nlev,     &
05310                                      chmin1, chmin2, chmin3,         &
05311                                      chmax1, chmax2, chmax3,         &
05312                                      midp1,  midp2,  midp3,          &
05313                                      levdim,                         &
05314                                      found, loc, range,              &
05315                                      coords1, coords2, coords3,      &
05316                                      shape, control,                 &
05317                                      ijkinc, ijkcoa, ierror)
05318 
05319        Use PSMILe_common
05320        Integer, Intent (In)            :: grid_id
05321        Integer, Intent (In)            :: levdim (ndim_3d)
05322        Integer, Intent (In)            :: lev, nlev
05323        Integer, Intent (In)            :: ijkinc(ndim_3d), ijkcoa(ndim_3d)
05324        Real, Intent (In)               :: chmin1 (*), chmin2 (*), chmin3 (*)
05325        Real, Intent (In)               :: chmax1 (*), chmax2 (*), chmax3 (*)
05326        Real, Intent (In)               :: midp1  (*), midp2  (*), midp3  (*)
05327        Integer, Intent (InOut)         :: found (*)
05328        Integer, Intent (InOut)         :: loc   (ndim_3d, *)
05329        Integer, Intent (In)            :: range (2, ndim_3d)
05330        Real, Intent (In)               :: coords1 (*)
05331        Real, Intent (In)               :: coords2 (*)
05332        Real, Intent (In)               :: coords3 (*)
05333        Integer, Intent (In)            :: shape (2, ndim_3d)
05334        Integer, Intent (InOut)         :: control (2, ndim_3d)
05335        Integer, Intent (Out)           :: ierror
05336     End Subroutine
05337 
05338     subroutine psmile_mg_prev_levels_1d_real (grid_id, idim,   &
05339                            lev, nlev,                          &
05340                            lstijk, xyz, found, newijk)
05341        Use PSMILe_common
05342        Integer, Intent (In)            :: grid_id
05343        Integer, Intent (In)            :: idim
05344        Integer, Intent (In)            :: lev, nlev
05345        Integer, Intent (In)            :: lstijk
05346        Real, Intent (In)               :: xyz
05347        Integer, Intent (Out)           :: found, newijk
05348     End Subroutine
05349 
05350     subroutine psmile_mg_prev_levels_2d_real (grid_id, &
05351                            lev, nlev,                  &
05352                            lstijk, xyz, found, newijk, nc)
05353        Use PSMILe_Common
05354        Integer,          Intent (In)   :: grid_id
05355        Integer,          Intent (In)   :: lev, nlev, nc
05356        Integer,          Intent (In)   :: lstijk (ndim_2d, nc)
05357        Real,             Intent (In)   :: xyz (ndim_2d, nc)
05358        Integer,          Intent (Out)  :: found (nc), newijk (ndim_2d, nc)
05359     End Subroutine
05360 
05361     subroutine psmile_mg_prev_levels_3d_real (grid_id, &
05362                            lev, nlev,                  &
05363                            lstijk, xyz, found, newijk)
05364        Use PSMILe_common
05365        Integer, Intent (In)            :: grid_id
05366        Integer, Intent (In)            :: lev, nlev
05367        Integer, Intent (In)            :: lstijk (ndim_3d)
05368        Real, Intent (In)               :: xyz (ndim_3d)
05369        Integer, Intent (Out)           :: found, newijk (ndim_3d)
05370     End Subroutine
05371 
05372     subroutine psmile_mg_cells_1d_real ( nlev, found, loc, range,    &
05373                                          search_grid_type,           &
05374                                          corners1, search_dim,       &
05375                                          shape, control,             &
05376                                          grid_valid_shape, cyclic,   &
05377                                          chmin, chmax, tol, ierror )
05378       Use PSMILe_common
05379       Integer, Intent (In)            :: nlev
05380       Integer, Intent (In)            :: search_grid_type
05381       Integer, Intent (In)            :: range (2, ndim_3d)
05382       Integer, Intent (In)            :: shape (2, ndim_3d)
05383       Integer, Intent (InOut)         :: found (range(1,1):range(2,1), 
05384                                                 range(1,2):range(2,2), 
05385                                                 range(1,3):range(2,3))
05386       Integer, Intent (InOut)         :: loc   (range(1,1):range(2,1), 
05387                                                 range(1,2):range(2,2), 
05388                                                 range(1,3):range(2,3))
05389       Real, Intent (In)               :: corners1 (shape(1,1):shape(2,1), 
05390                                                    shape(1,2):shape(2,2), 
05391                                                    shape(1,3):shape(2,3))
05392       Integer, Intent (In)            :: control (2, ndim_3d)
05393       Integer,          Intent (In)   :: search_dim
05394       Integer,          Intent (In)   :: grid_valid_shape (2)
05395       Logical,          Intent (In)   :: cyclic
05396       Real, Intent (In)               :: chmin (grid_valid_shape(1): 
05397                                                 grid_valid_shape(2)+2)
05398       Real, Intent (In)               :: chmax (grid_valid_shape(1): 
05399                                                 grid_valid_shape(2)+2)
05400       Real, Intent (In)               :: tol
05401       Integer, Intent (Out)           :: ierror
05402     End Subroutine
05403 
05404     subroutine psmile_mg_cells_2d_real ( grid_id, search_grid_type,            &
05405                                          found, loc, loc_fnd_shape,            &
05406                                          tgt_corners_x, tgt_corners_y,         &
05407                                          tgt_corner_shape, control,            &
05408                                          grid_valid_shape,                     &
05409                                          ipart, src_corner_shape, nbr_corners, &
05410                                          src_corners_x, src_corners_y,         &
05411                                          chmin1, chmax1, chmin2, chmax2,       &
05412                                          tol, ierror )
05413       Use PSMILe_common
05414       Integer, Intent (In)            :: grid_id
05415       Integer, Intent (In)            :: search_grid_type
05416       Integer, Intent (In)            :: loc_fnd_shape (2, ndim_3d)
05417       Integer, Intent (In)            :: tgt_corner_shape (2, ndim_3d)
05418       Integer, Intent (InOut)         :: found (loc_fnd_shape(1,1):loc_fnd_shape(2,1), 
05419                                                 loc_fnd_shape(1,2):loc_fnd_shape(2,2), 
05420                                                 loc_fnd_shape(1,3):loc_fnd_shape(2,3))
05421       Integer, Intent (InOut)         :: loc   (ndim_2d,                               
05422                                                 loc_fnd_shape(1,1):loc_fnd_shape(2,1), 
05423                                                 loc_fnd_shape(1,2):loc_fnd_shape(2,2), 
05424                                                 loc_fnd_shape(1,3):loc_fnd_shape(2,3))
05425       Real, Intent (In)               :: tgt_corners_x (                               
05426                                           tgt_corner_shape(1,1):tgt_corner_shape(2,1), 
05427                                           tgt_corner_shape(1,2):tgt_corner_shape(2,2), 
05428                                           tgt_corner_shape(1,3):tgt_corner_shape(2,3))
05429       Real, Intent (In)               :: tgt_corners_y (                               
05430                                           tgt_corner_shape(1,1):tgt_corner_shape(2,1), 
05431                                           tgt_corner_shape(1,2):tgt_corner_shape(2,2), 
05432                                           tgt_corner_shape(1,3):tgt_corner_shape(2,3))
05433       Integer, Intent (In)            :: control (2,  ndim_3d)
05434       Integer,          Intent (In)   :: grid_valid_shape(2,ndim_2d)
05435       Integer,          Intent (In)   :: ipart
05436       Integer,          Intent (In)   :: src_corner_shape (2,2)
05437       Integer,          Intent (In)   :: nbr_corners
05438       Real, Intent (In)               :: src_corners_x (                                
05439                                           src_corner_shape (1,1):src_corner_shape(2,1), 
05440                                           src_corner_shape (1,2):src_corner_shape(2,2), 
05441                                           nbr_corners)
05442       Real, Intent (In)               :: src_corners_y (                                
05443                                           src_corner_shape (1,1):src_corner_shape(2,1), 
05444                                           src_corner_shape (1,2):src_corner_shape(2,2), 
05445                                           nbr_corners)
05446       Real, Intent (InOut)            :: chmin1 (grid_valid_shape(1,1):    
05447                                                  grid_valid_shape(2,1)+1 , 
05448                                                  grid_valid_shape(1,2):    
05449                                                  grid_valid_shape(2,2)+1)
05450       Real, Intent (InOut)            :: chmin2 (grid_valid_shape(1,1):    
05451                                                  grid_valid_shape(2,1)+1,  
05452                                                  grid_valid_shape(1,2):    
05453                                                  grid_valid_shape(2,2)+1)
05454       Real, Intent (InOut)            :: chmax1 (grid_valid_shape(1,1):    
05455                                                  grid_valid_shape(2,1)+1 , 
05456                                                  grid_valid_shape(1,2):    
05457                                                  grid_valid_shape(2,2)+1)
05458       Real, Intent (InOut)            :: chmax2 (grid_valid_shape(1,1):    
05459                                                  grid_valid_shape(2,1)+1,  
05460                                                  grid_valid_shape(1,2):    
05461                                                  grid_valid_shape(2,2)+1)
05462       Real, Intent (In)               :: tol
05463       Integer, Intent (Out)           :: ierror
05464     End Subroutine
05465 
05466     subroutine psmile_mg_control_cell_1d_real (            &
05467                            chmin, chmax, midp, levdim,     &
05468                            ijk, xyz, nold, all, wide, found, newijk)
05469        Use PSMILe_common
05470 
05471        Integer, Intent (In)            :: levdim
05472        Real, Intent (In)               :: chmin (0:levdim)
05473        Real, Intent (In)               :: chmax (0:levdim)
05474        Real, Intent (In)               :: midp  (0:levdim)
05475        Integer, Intent (In)            :: ijk, nold
05476        Logical, Intent (In)            :: all, wide
05477        Real, Intent (In)               :: xyz
05478        Integer, Intent (Out)           :: found, newijk
05479     End Subroutine
05480 
05481     subroutine psmile_mg_control_cell_2d_real (     &
05482                     chmin1, chmin2,                 &
05483                     chmax1, chmax2,                 &
05484                     midp1,  midp2,                  &
05485                     levdim,                         &
05486                     ijk, xyz, nold, ignore, wide, found, newijk)
05487        Use PSMILe_common
05488 
05489        Real, Intent (In)               :: chmin1 (*), chmin2 (*)
05490        Real, Intent (In)               :: chmax1 (*), chmax2 (*)
05491        Real, Intent (In)               :: midp1  (*), midp2  (*)
05492        Integer, Intent (In)            :: levdim (ndim_2d)
05493        Integer, Intent (In)            :: ijk(ndim_2d), nold
05494        Integer, Intent (In)            :: ignore(ndim_2d)
05495        Logical, Intent (In)            :: wide
05496        Real, Intent (In)               :: xyz(ndim_2d)
05497        Integer, Intent (Out)           :: found, newijk(ndim_2d)
05498     End Subroutine
05499 
05500     subroutine psmile_mg_control_cell_3d_real (            &
05501                            chmin1, chmin2, chmin3,         &
05502                            chmax1, chmax2, chmax3,         &
05503                            midp1,  midp2,  midp3,          &
05504                            levdim,                         &
05505                            ijk, xyz, nold, all, wide, found, newijk)
05506        Use PSMILe_common
05507 
05508        Real, Intent (In)               :: chmin1 (*), chmin2 (*), chmin3 (*)
05509        Real, Intent (In)               :: chmax1 (*), chmax2 (*), chmax3 (*)
05510        Real, Intent (In)               :: midp1  (*), midp2  (*), midp3  (*)
05511        Integer, Intent (In)            :: levdim (ndim_3d)
05512        Integer, Intent (In)            :: ijk(ndim_3d), nold
05513        Logical, Intent (In)            :: all, wide
05514        Real, Intent (In)               :: xyz(ndim_3d)
05515        Integer, Intent (Out)           :: found, newijk(ndim_3d)
05516     End Subroutine
05517 
05518     subroutine psmile_mg_final_2d_real (grid_id, nlev,             &
05519                     chmin1, chmin2, chmax1, chmax2,                &
05520                     midp1,  midp2,  levdim,                        &
05521                     found, loc, range,                             &
05522                     coords1, coords2, shape, control,              &
05523                     corners1, corners2, corner_shape, nbr_corners, &
05524                     tol, ierror)
05525        Use PSMILe_common
05526 
05527        Integer,          Intent (In)    :: grid_id, nlev
05528        Integer,          Intent (In)    :: levdim (ndim_2d)
05529        Real,             Intent (In)    :: chmin1 (0:levdim(1), 
05530                                                    0:levdim(2))
05531        Real,             Intent (In)    :: chmin2 (0:levdim(1), 
05532                                                    0:levdim(2))
05533        Real,             Intent (In)    :: chmax1 (0:levdim(1), 
05534                                                    0:levdim(2))
05535        Real,             Intent (In)    :: chmax2 (0:levdim(1), 
05536                                                    0:levdim(2))
05537        Real,             Intent (In)    :: midp1  (0:levdim(1), 
05538                                                    0:levdim(2))
05539        Real,             Intent (In)    :: midp2  (0:levdim(1), 
05540                                                    0:levdim(2))
05541        Integer,          Intent (In)    :: range (2, ndim_3d)
05542        Integer,          Intent (In)    :: shape (2, ndim_3d)
05543        Integer,          Intent (InOut) :: found (range(1,1):range(2,1), 
05544                                                   range(1,2):range(2,2), 
05545                                                   range(1,3):range(2,3))
05546        Integer,          Intent (InOut) :: loc   (ndim_2d,               
05547                                                   range(1,1):range(2,1), 
05548                                                   range(1,2):range(2,2), 
05549                                                   range(1,3):range(2,3))
05550        Real,             Intent (In)    :: coords1 (shape(1,1):shape(2,1), 
05551                                                     shape(1,2):shape(2,2), 
05552                                                     shape(1,3):shape(2,3))
05553        Real,             Intent (In)    :: coords2 (shape(1,1):shape(2,1), 
05554                                                     shape(1,2):shape(2,2), 
05555                                                     shape(1,3):shape(2,3))
05556        Integer,          Intent (In)    :: control (2, ndim_3d)
05557        Integer,          Intent (In)    :: corner_shape (2, ndim_2d)
05558        Integer,          Intent (In)    :: nbr_corners
05559        Real,             Intent (In)    ::                 
05560           corners1 ( corner_shape(1,1):corner_shape(2,1), 
05561                      corner_shape(1,2):corner_shape(2,2), nbr_corners)
05562        Real,             Intent (In)    ::                 
05563           corners2 ( corner_shape(1,1):corner_shape(2,1), 
05564                      corner_shape(1,2):corner_shape(2,2), nbr_corners)
05565        Real,             Intent (In)    :: tol
05566        Integer,          Intent (Out)   :: ierror
05567     End Subroutine
05568 
05569     subroutine psmile_mg_final_3d_real (comp_info, nlev,             &
05570                                      found, loc, range,              &
05571                                      coords1, coords2, coords3,      &
05572                                      shape, control,                 &
05573                                      grid_id,                        &
05574                                      x_coords, y_coords, z_coords,   &
05575                                      coords_shape,                   &
05576                                      nbr_corners,                    &
05577                                      ijk0, tol, ierror)
05578 
05579        Use PSMILe_common
05580        Type (Enddef_comp), Intent (In) :: comp_info
05581        Integer, Intent (In)            :: nlev
05582        Integer, Intent (InOut)         :: found (*)
05583        Integer, Intent (InOut)         :: loc   (ndim_3d, *)
05584        Integer, Intent (In)            :: range (2, ndim_3d)
05585        Real, Intent (In)               :: coords1 (*)
05586        Real, Intent (In)               :: coords2 (*)
05587        Real, Intent (In)               :: coords3 (*)
05588        Integer, Intent (In)            :: shape (2, ndim_3d)
05589        Integer, Intent (InOut)         :: control (2, ndim_3d)
05590        Integer, Intent (In)            :: grid_id
05591        Integer, Intent (In)            :: coords_shape (2, ndim_3d)
05592        Real, Intent (In)               :: x_coords (*)
05593        Real, Intent (In)               :: y_coords (*)
05594        Real, Intent (In)               :: z_coords (*)
05595        Integer, Intent (In)            :: nbr_corners
05596        Integer, Intent (In)            :: ijk0 (ndim_3d)
05597        Real, Intent (In)               :: tol
05598        Integer, Intent (Out)           :: ierror
05599     End Subroutine
05600 
05601    subroutine psmile_mg_final_gauss2_real (                                       &
05602                      grid_id, found, locations, fnd_loc_range,                    &
05603                      tgt_coords_x, tgt_coords_y, tgt_coords_shape, search_range,  &
05604                      src_corners_x, src_corners_y, src_corner_shape, nbr_corners, &
05605                      ierror)
05606 
05607       use psmile_common
05608 
05609       integer, intent (in)            :: grid_id
05610       integer, intent (in)            :: fnd_loc_range (2, ndim_3d)
05611       integer, intent (in)            :: tgt_coords_shape (2, ndim_3d)
05612       real, intent (in)   ::                                        
05613          tgt_coords_x (tgt_coords_shape(1,1):tgt_coords_shape(2,1), 
05614                        tgt_coords_shape(1,2):tgt_coords_shape(2,2), 
05615                        tgt_coords_shape(1,3):tgt_coords_shape(2,3))
05616       real, intent (in)   ::                                        
05617          tgt_coords_y (tgt_coords_shape(1,1):tgt_coords_shape(2,1), 
05618                        tgt_coords_shape(1,2):tgt_coords_shape(2,2), 
05619                        tgt_coords_shape(1,3):tgt_coords_shape(2,3))
05620       integer, intent (in)            :: search_range (2, ndim_3d)
05621       integer, intent (in)            :: src_corner_shape (2, ndim_2d)
05622       integer, intent (in)            :: nbr_corners
05623       real,   intent (in) ::                                        
05624          src_corners_x ( src_corner_shape(1,1):src_corner_shape(2,1), nbr_corners)
05625       real,   intent (in) ::                                        
05626          src_corners_y ( src_corner_shape(1,1):src_corner_shape(2,1), nbr_corners)
05627       integer, intent (inout)         :: found (fnd_loc_range(1,1):fnd_loc_range(2,1), 
05628                                                 fnd_loc_range(1,2):fnd_loc_range(2,2), 
05629                                                 fnd_loc_range(1,3):fnd_loc_range(2,3))
05630       integer, intent (inout)         :: locations (fnd_loc_range(1,1):fnd_loc_range(2,1), 
05631                                                     fnd_loc_range(1,2):fnd_loc_range(2,2), 
05632                                                     fnd_loc_range(1,3):fnd_loc_range(2,3))
05633       integer, intent (out)           :: ierror
05634    end subroutine
05635 
05636     subroutine psmile_mg_final_prev_2d_real (grid_id, nlev,        &
05637                     lstijk, xyz, found, newijk, nc,                &
05638                     corners1, corners2, corner_shape, nbr_corners, &
05639                     tol, ierror)
05640        Use PSMILe_common
05641 
05642        Integer,          Intent (In)   :: grid_id, nlev
05643        Integer,          Intent (In)   :: nc
05644        Integer,          Intent (In)   :: lstijk (ndim_2d, nc)
05645        Real,             Intent (In)   :: xyz (ndim_2d, nc)
05646        Integer,          Intent (In)   :: corner_shape (2, ndim_2d)
05647        Integer,          Intent (In)   :: nbr_corners
05648        Real,             Intent (In)   ::                 
05649           corners1 ( corner_shape(1,1):corner_shape(2,1), 
05650                      corner_shape(1,2):corner_shape(2,2), nbr_corners)
05651        Real,             Intent (In)   ::                 
05652           corners2 ( corner_shape(1,1):corner_shape(2,1), 
05653                      corner_shape(1,2):corner_shape(2,2), nbr_corners)
05654        Real,             Intent (In)   :: tol
05655 
05656        Integer,          Intent (Out)  :: found (nc)
05657        Integer,          Intent (Out)  :: newijk (ndim_2d, nc)
05658        Integer,          Intent (Out)  :: ierror
05659     End Subroutine
05660 
05661     subroutine psmile_mg_method_1d_real (comp_info, nlev,            &
05662                                      found, loc, range,              &
05663                                      coords1,                        &
05664                                      shape, control,                 &
05665                                      method_id,                      &
05666                                      x_coords,                       &
05667                                      coords_shape,                   &
05668                                      grid_valid_shape, cyclic,       &
05669                                      chmin, chmax,                   &
05670                                      tol, ierror)
05671 
05672        Use PSMILe_common
05673 
05674        Type (Enddef_comp), Intent (In) :: comp_info
05675        Integer, Intent (In)            :: nlev
05676        Integer, Intent (InOut)         :: found (*)
05677        Integer, Intent (InOut)         :: loc   (*)
05678        Integer, Intent (In)            :: range (2, ndim_3d)
05679        Real, Intent (In)               :: coords1 (*)
05680        Integer, Intent (In)            :: shape (2, ndim_3d)
05681        Integer, Intent (In)            :: control (2, ndim_3d)
05682        Integer, Intent (In)            :: method_id
05683        Integer, Intent (In)            :: coords_shape (2)
05684        Integer, Intent (In)            :: grid_valid_shape (2)
05685        Logical, Intent (In)            :: cyclic
05686        Real, Intent (In)               :: x_coords (*)
05687        Real, Intent (In)               :: chmin (*), chmax (*)
05688        Real, Intent (In)               :: tol
05689        Integer, Intent (Out)           :: ierror
05690     End Subroutine
05691 
05692     subroutine psmile_mg_method_2d_real (comp_info,   &
05693                     nlev, found, loc, range,          &
05694                     coords1, coords2, search_shape, control, &
05695                     x_coords, y_coords, coords_shape, &
05696                     grid_valid_shape, cyclic, period, &
05697                     chmin1, chmin2, chmax1, chmax2,   &
05698                     tol, ierror)
05699        Use PSMILe_common
05700 
05701        Type (Enddef_comp), Intent (In) :: comp_info
05702        Integer, Intent (In)            :: nlev
05703        Integer, Intent (InOut)         :: found (*)
05704        Integer, Intent (InOut)         :: loc   (ndim_2d, *)
05705        Integer, Intent (In)            :: range (2, ndim_3d)
05706        Real,    Intent (In)            :: coords1 (*)
05707        Real,    Intent (In)            :: coords2 (*)
05708        Integer, Intent (In)            :: search_shape (2, ndim_3d)
05709        Integer, Intent (In)            :: control (2, ndim_3d)
05710        Integer, Intent (In)            :: coords_shape (2, ndim_2d)
05711        Integer, Intent (In)            :: grid_valid_shape (2, ndim_2d)
05712        Logical, Intent (In)            :: cyclic (ndim_2d)
05713        Real,    Intent (In)            :: period (ndim_2d)
05714        Real,    Intent (In)            :: x_coords (*)
05715        Real,    Intent (In)            :: y_coords (*)
05716        Real,    Intent (In)            :: chmin1 (*), chmin2 (*)
05717        Real,    Intent (In)            :: chmax1 (*), chmax2 (*)
05718        Real,    Intent (In)            :: tol
05719        Integer, Intent (Out)           :: ierror
05720     End Subroutine
05721 
05722     subroutine psmile_mg_method_3d_real (comp_info, nlev,            &
05723                                      found, loc, range,              &
05724                                      coords1, coords2, coords3,      &
05725                                      shape, control,                 &
05726                                      method_id,                      &
05727                                      x_coords, y_coords, z_coords,   &
05728                                      coords_shape,                   &
05729                                      grid_valid_shape, cyclic,       &
05730                                      chmin1, chmin2, chmin3,         &
05731                                      chmax1, chmax2, chmax3,         &
05732                                      midp1,  midp2,  midp3,          &
05733                                      tol, ierror)
05734 
05735        Use PSMILe_common
05736 
05737        Type (Enddef_comp), Intent (In)    :: comp_info
05738        Integer,            Intent (In)    :: nlev
05739        Integer,            Intent (InOut) :: found (*)
05740        Integer,            Intent (InOut) :: loc   (ndim_3d, *)
05741        Integer,            Intent (In)    :: range (2, ndim_3d)
05742        Real,               Intent (In)    :: coords1 (*)
05743        Real,               Intent (In)    :: coords2 (*)
05744        Real,               Intent (In)    :: coords3 (*)
05745        Integer,            Intent (In)    :: shape (2, ndim_3d)
05746        Integer,            Intent (In)    :: control (2, ndim_3d)
05747        Integer,            Intent (In)    :: method_id
05748        Integer,            Intent (In)    :: coords_shape (2, ndim_3d)
05749        Integer,            Intent (In)    :: grid_valid_shape (2, ndim_3d)
05750        Logical,            Intent (In)    :: cyclic (ndim_3d)
05751        Real,               Intent (In)    :: x_coords (*)
05752        Real,               Intent (In)    :: y_coords (*)
05753        Real,               Intent (In)    :: z_coords (*)
05754        Real,               Intent (In)    :: tol
05755        Real,               Intent (In)    :: chmin1 (*), chmin2 (*), chmin3 (*)
05756        Real,               Intent (In)    :: chmax1 (*), chmax2 (*), chmax3 (*)
05757        Real,               Intent (In)    :: midp1  (*), midp2  (*), midp3  (*)
05758        Integer,            Intent (Out)   :: ierror
05759     End Subroutine
05760 
05761    subroutine psmile_mg_method_gauss2_real (method_id, search_range,     &
05762                                             tgt_shape, tgt_coords_x,     &
05763                                             tgt_coords_y, loc_fnd_shape, &
05764                                             found, loc, virtual_cell,    &
05765                                             ierror)
05766 
05767       use psmile_common
05768 
05769       Integer, Intent (In)    :: method_id
05770       Integer, Intent (In)    :: search_range (2, ndim_3d)
05771       Integer, Intent (In)    :: loc_fnd_shape (2, ndim_3d)
05772       Integer, Intent (In)    :: tgt_shape (2, ndim_3d)
05773       Real, Intent (In)       :: tgt_coords_x (tgt_shape(1,1):tgt_shape(2,1),  
05774                                                tgt_shape(1,2):tgt_shape(2,2),  
05775                                                tgt_shape(1,3):tgt_shape(2,3)), 
05776                                  tgt_coords_y (tgt_shape(1,1):tgt_shape(2,1),  
05777                                                tgt_shape(1,2):tgt_shape(2,2),  
05778                                                tgt_shape(1,3):tgt_shape(2,3))
05779       Integer, Intent (InOut) :: found (loc_fnd_shape(1,1):loc_fnd_shape(2,1), 
05780                                         loc_fnd_shape(1,2):loc_fnd_shape(2,2), 
05781                                         loc_fnd_shape(1,3):loc_fnd_shape(2,3))
05782       Integer, Intent (InOut) :: loc   (loc_fnd_shape(1,1):loc_fnd_shape(2,1), 
05783                                         loc_fnd_shape(1,2):loc_fnd_shape(2,2), 
05784                                         loc_fnd_shape(1,3):loc_fnd_shape(2,3))
05785       Integer, Intent (Out)   :: virtual_cell (loc_fnd_shape(1,1):loc_fnd_shape(2,1), 
05786                                                loc_fnd_shape(1,2):loc_fnd_shape(2,2), 
05787                                                loc_fnd_shape(1,3):loc_fnd_shape(2,3))
05788       Integer, Intent (Out)   :: ierror
05789    end subroutine
05790 
05791     subroutine psmile_mg_method_irreg2_real (comp_info,    &
05792                     found, locations, search,              &
05793                     array, shape_2d, range_2d, control_2d, &
05794                            shape_1d, range_1d, control_1d, &
05795                     m_arrays, m_levdim,                    &
05796                     grid_id, method_id, tol, ierror)
05797 
05798        Use PSMILe_common
05799 
05800        Type (Enddef_comp), Intent (In)  :: comp_info
05801        Type (Enddef_search)             :: search
05802        Integer,            Intent (In)  :: grid_id, method_id
05803        Real,               Intent (In)  :: tol
05804        Type (real_vector), Intent (In)  :: array (        ndim_3d, search%npart)
05805        Integer,            Intent (In)  :: shape_2d   (2, ndim_3d, search%npart)
05806        Integer,            Intent (In)  :: range_2d   (2, ndim_3d, search%npart)
05807        Integer,            Intent (In)  :: control_2d (2, ndim_3d, search%npart)
05808        Integer,            Intent (In)  :: shape_1d   (2, ndim_3d, search%npart)
05809        Integer,            Intent (In)  :: range_1d   (2, ndim_3d, search%npart)
05810        Integer,            Intent (In)  :: control_1d (2, ndim_3d, search%npart)
05811        Type (Enddef_mg_real)            :: m_arrays
05812        Integer,            Intent (In)  :: m_levdim (ndim_3d)
05813        Type (integer_vector)            :: found     (search%npart, 2)
05814        Type (integer_vector)            :: locations (search%npart, 2)
05815        Integer,            Intent (Out) :: ierror
05816     End Subroutine
05817 
05818     subroutine psmile_mg_srch_nneigh_reg_real (grid_id, nn_srch,     &
05819                     arrays, search_mode, nref_3d, grid_valid_shape,  &
05820                     neighbors_3d, nloc, num_neigh,                   &
05821                     sin_search, cos_search, z_search,                &
05822                     dist_real, dim1, indices, jbeg, jend,            &
05823                     mask_array, mask_shape, mask_available,          &
05824                     tol, ierror)
05825 
05826        Use PSMILe_common
05827 
05828        Integer,          Intent (In)   :: grid_id
05829        Type (Extra_search_nn), Intent (In) :: nn_srch
05830        Type (Extra_search_real)        :: arrays
05831        Integer,          Intent (In)   :: search_mode, nref_3d
05832        Integer,          Intent (In)   :: jbeg, jend, nloc
05833        Integer,          Intent (In)   :: grid_valid_shape (2, ndim_3d)
05834        Integer,          Intent (In)   ::       mask_shape (2, ndim_3d)
05835        Integer,          Intent (In)   :: num_neigh
05836        Integer,          Intent (In)   :: indices (:), dim1 (2)
05837        Real,             Intent (In)   :: sin_search (jbeg:jend, 2)
05838        Real,             Intent (In)   :: cos_search (jbeg:jend, 2)
05839        Real,             Intent (In)   ::   z_search (jbeg:jend)
05840        Logical,          Intent (In)   :: 
05841           mask_array (mask_shape (1,1):mask_shape (2,1), 
05842                       mask_shape (1,2):mask_shape (2,2), 
05843                       mask_shape (1,3): mask_shape (2,3))
05844        Logical,          Intent (In)   :: mask_available
05845        Real,             Intent (In)   :: tol
05846 !
05847        Real,             Intent (InOut) :: 
05848           dist_real (dim1(1):dim1(2), num_neigh)
05849 !
05850        Integer,          Intent (Out)   :: 
05851           neighbors_3d (ndim_3d, nloc, num_neigh)
05852        Integer,          Intent (Out)   :: ierror
05853     End Subroutine
05854 
05855     subroutine psmile_mg_srch_nneigh_irr_real (grid_id,     &
05856                 arrays, search_mode, nref_3d,               &
05857                 sin_values, cos_values, grid_valid_shape,   &
05858                 z_coords, coords_shape,                     &
05859                 neighbors_3d, nloc, num_neigh,              &
05860                 sin_search, cos_search, z_search,           &
05861                 dist_dble, dim1, indices, jbeg, jend,       &
05862                 mask_ind,                                   &
05863                 mask_array, mask_shape, mask_available,     &
05864                 tol, ierror)
05865 
05866        Use PSMILe_common
05867 
05868        Integer, Intent (In)            :: grid_id
05869        Type (Extra_search_real)        :: arrays
05870        Integer, Intent (In)            :: nref_3d
05871        Integer, Intent (In)            :: nloc
05872        Integer, Intent (In)            :: search_mode
05873        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
05874        Real,             Intent (In)   :: sin_values (grid_valid_shape(1,1): 
05875                                                       grid_valid_shape(2,1), 
05876                                                       grid_valid_shape(1,2): 
05877                                                       grid_valid_shape(2,2), 
05878                                                       2)
05879        Real,             Intent (In)   :: cos_values (grid_valid_shape(1,1): 
05880                                                       grid_valid_shape(2,1), 
05881                                                       grid_valid_shape(1,2): 
05882                                                       grid_valid_shape(2,2), 
05883                                                       2)
05884        Integer, Intent (In)            :: coords_shape (2, ndim_3d)
05885        Real,             Intent (In)   :: z_coords(coords_shape(1,3): 
05886                                                    coords_shape(2,3))
05887        Integer, Intent (In)            :: num_neigh
05888        Integer, Intent (In)            :: jbeg, jend
05889        Integer, Intent (In)            :: indices (:), dim1 (2)
05890        Real,             Intent (InOut) :: dist_dble (dim1(1):dim1(2), num_neigh)
05891        Real,             Intent (In)   :: sin_search (jbeg:jend, 2)
05892        Real,             Intent (In)   :: cos_search (jbeg:jend, 2)
05893        Real,             Intent (In)   :: z_search   (jbeg:jend)
05894        Logical, Intent (In)            :: mask_ind   (jbeg:jend)
05895        Integer, Intent (In)            :: mask_shape (2, ndim_3d)
05896        Logical, Intent (In)            :: mask_array (mask_shape (1,1): 
05897                                                       mask_shape (2,1), 
05898                                                       mask_shape (1,2): 
05899                                                       mask_shape (2,2), 
05900                                                       mask_shape (1,3): 
05901                                                       mask_shape (2,3))
05902        Logical,           Intent (In)  :: mask_available
05903        Real,              Intent (In)  :: tol
05904        Integer,           Intent (Out) :: neighbors_3d (ndim_3d, nloc, num_neigh)
05905        Integer,           Intent (Out) :: ierror
05906     End Subroutine
05907 !
05908     subroutine psmile_print_3d_coord_real (x, y, z, shape,     &
05909                                            ind, nloc, message)
05910        Use PSMILe_common
05911 
05912        Integer, Intent (In)            :: shape (2, ndim_3d)
05913        Real, Intent (In)               :: x (*), y (*), z (*)
05914        Integer, Intent(In)             :: nloc
05915        Integer, Intent(In)             :: ind (ndim_3d, nloc)
05916        Character (len=*), Intent(In)   :: message
05917     End Subroutine
05918 !
05919     subroutine psmile_print_3d_reg_coord_real (x, y, z, shape,     &
05920                                                ind, nloc, message)
05921        Use PSMILe_common
05922 
05923        Integer, Intent (In)            :: shape (2, ndim_3d)
05924        Real, Intent (In)               :: x (*), y (*), z (*)
05925        Integer, Intent(In)             :: nloc
05926        Integer, Intent(In)             :: ind (ndim_3d, nloc)
05927        Character (len=*), Intent(In)   :: message
05928     End Subroutine
05929 !
05930     subroutine psmile_print_irreg2_coord_real (x, y, z, shape,     &
05931                                                ind, nloc, message)
05932        Use PSMILe_common
05933 
05934        Integer, Intent (In)            :: shape (2, ndim_3d)
05935        Real, Intent (In)               :: x (*), y (*), z (*)
05936        Integer, Intent(In)             :: nloc
05937        Integer, Intent(In)             :: ind (ndim_3d, nloc)
05938        Character (len=*), Intent(In)   :: message
05939     End Subroutine
05940 
05941 !   Put / Get
05942 
05943 !!$    We cannot include an interface description here since this
05944 !!$      is overloaded wrt. data_array by the calling routine prism_put.
05945 !!$
05946 !!$    Subroutine PSMILe_Put_real ( field_id, julian_day, julian_sec, &
05947 !!$              julian_dayb, julian_secb, data_array, info, ierror )
05948 
05949 !!$       use PRISM, only : PSMILe_Time_Struct
05950 !!$
05951 !!$       Integer, Intent (In)                 :: field_id
05952 !!$
05953 !!$       Double Precision, Intent (In)        :: julian_day, julian_dayb(2)
05954 !!$       Double Precision, Intent (In)        :: julian_sec, julian_secb(2)
05955 !!$
05956 !!$       Real,    Intent (In)                 :: data_array(*)
05957 !!$       Integer, Intent (Out)                :: info, ierror
05958 !!$    End Subroutine
05959 
05960     subroutine psmile_put_field_real (field_id, task_id, data_array, len, &
05961                                       nbr_fields, ierror)
05962 
05963        Integer, Intent (In)          :: field_id
05964        Integer, Intent (In)          :: task_id
05965        Integer, Intent (In)          :: len, nbr_fields
05966        Real,    Intent (In)          :: data_array(*)
05967        Integer, Intent (Out)         :: ierror
05968     End Subroutine
05969 
05970     subroutine psmile_put_field_gauss2_real (data_array, data_shape, nbr_fields, &
05971                                           srcloc, nparts, nloc, npoints, &
05972                                           dest, tag, comm, ierror)
05973        Use PSMILe_common
05974 
05975        Integer, Intent (In)          :: nloc, dest, tag, comm, nbr_fields
05976        Integer, Intent (In)          :: nparts
05977        Integer, Intent (In)          :: npoints (2, nparts)
05978        Integer, Intent (In)          :: data_shape (2, ndim_3d)
05979        Type (integer_vector), Intent (In) :: srcloc (2, nparts)
05980        Real,    Intent (In)          :: data_array (*)
05981        Integer, Intent (Out)         :: ierror
05982     End Subroutine
05983 
05984     subroutine psmile_put_field_21d_real (data_array, data_shape, nbr_fields, &
05985                                          srcloc, nparts, nloc, npoints, &
05986                                          dest, tag, comm, ierror)
05987        Use PSMILe_common
05988 
05989        Integer, Intent (In)          :: nloc, dest, tag, comm, nbr_fields
05990        Integer, Intent (In)          :: nparts
05991        Integer, Intent (In)          :: npoints (ndim_3d, nparts)
05992        Integer, Intent (In)          :: data_shape (2, ndim_3d)
05993        Type (integer_vector), Intent (In) :: srcloc (ndim_3d, nparts)
05994        Real,    Intent (In)          :: data_array (*)
05995        Integer, Intent (Out)         :: ierror
05996     End Subroutine
05997 
05998     subroutine psmile_put_field_3d_real (data_array, data_shape, nbr_fields, &
05999                                          srcloc, nparts, nloc, npoints, &
06000                                          dest, tag, comm, ierror)
06001        Use PSMILe_common
06002 
06003        Integer, Intent (In)          :: nloc, dest, tag, comm, nbr_fields
06004        Integer, Intent (In)          :: nparts
06005        Integer, Intent (In)          :: npoints (ndim_3d, nparts)
06006        Integer, Intent (In)          :: data_shape (2, ndim_3d)
06007        Type (integer_vector), Intent (In) :: srcloc (ndim_3d, nparts)
06008        Real,    Intent (In)          :: data_array (*)
06009        Integer, Intent (Out)         :: ierror
06010     End Subroutine
06011 
06012     subroutine psmile_put_irr_field_real (data_array, data_shape, nbr_fields,  &
06013                                           srcloc, npoints, srcars, nars, nloc, &
06014                                           dest, tag, comm, ierror)
06015        Use PSMILe_common
06016 
06017        Integer, Intent (In)          :: nars, nloc, npoints, nbr_fields
06018        Integer, Intent (In)          :: dest, tag, comm
06019        Integer, Intent (In)          :: data_shape (2, ndim_3d)
06020        Integer, Intent (In)          :: srcloc (ndim_3d, npoints)
06021        Integer, Intent (In)          :: srcars (2, ndim_3d, nars)
06022        Real,    Intent (In)          :: data_array (*)
06023        Integer, Intent (Out)         :: ierror
06024     End Subroutine
06025 
06026     subroutine psmile_get_field_real (field_id, data_array, len, &
06027                                       nbr_fields, ierror)
06028 
06029        Integer, Intent (In)          :: field_id
06030        Integer, Intent (In)          :: len, nbr_fields
06031        Real,    Intent (InOut)       :: data_array(*)
06032        Integer, Intent (Out)         :: ierror
06033     End Subroutine
06034 
06035     subroutine psmile_get_irr_field_real (data_array, data_shape, nbr_fields,  &
06036                                           dstijk, npoints, dstars, nars, nloc, &
06037                                           source, tag, comm, ierror)
06038        Use PSMILe_common
06039 
06040        Integer, Intent (In)          :: nars, nloc, npoints, nbr_fields
06041        Integer, Intent (In)          :: source, tag, comm
06042        Integer, Intent (In)          :: data_shape (2, ndim_3d)
06043        Integer, Intent (In)          :: dstijk (ndim_3d, npoints)
06044        Integer, Intent (In)          :: dstars (2, ndim_3d, nars)
06045        Real,    Intent (InOut)       :: data_array (*)
06046        Integer, Intent (Out)         :: ierror
06047     End Subroutine
06048 
06049 !   Utilities
06050 
06051     subroutine psmile_copy_subarray_2d_real (dest_vector, size, &
06052                darray, idlow, idhigh, jdlow, jdhigh, &
06053                        ibeg,  iend,   jbeg,  jend,   ierror)
06054        Use PSMILe_common
06055        Integer(kind=int64), Intent (In) :: size
06056        Integer, Intent (In)             :: idlow, idhigh, jdlow, jdhigh
06057        Integer, Intent (In)             :: ibeg,  iend,   jbeg,  jend
06058        Real, Intent (In)                :: darray (idlow:idhigh, jdlow:jdhigh)
06059        Real, Intent (Out)               :: dest_vector (size)
06060        Integer, Intent (Out)            :: ierror
06061     End Subroutine
06062 
06063     subroutine psmile_copy_subarray_3d_real (dest_vector, size, &
06064                darray, idlow, idhigh, jdlow, jdhigh, kdlow, kdhigh, &
06065                sub, ierror)
06066        Use PSMILe_common
06067 
06068        Integer(kind=int64), Intent (In)  :: size
06069        Integer,             Intent (In)  :: idlow, idhigh, jdlow, jdhigh, 
06070                                             kdlow, kdhigh
06071        Integer,             Intent (In)  :: sub (2, ndim_3d)
06072        Real,                Intent (In)  :: darray (idlow:idhigh, jdlow:jdhigh, 
06073                                                     kdlow:kdhigh)
06074        Real,                Intent (Out) :: dest_vector (size)
06075        Integer,             Intent (Out) :: ierror
06076     End Subroutine
06077 
06078 !
06079 !   ------ Routines for Double Precision ------------
06080 !
06081 
06082     subroutine psmile_add_nn_found_dble (search, extra_search,  &
06083                       index_sent, found, n_send,                &
06084                       index_found, distance, n_found, nb_extra, &
06085                       selected, sel_info, nrecv, ierror)
06086        Use PSMILe_common
06087 
06088        Integer,           Intent (InOut) :: nrecv
06089        Type (Enddef_search),      Intent (In)    :: search
06090        Type (Extra_search_info),  Intent (InOut) :: extra_search
06091        Type (Select_search_info), Intent (InOut) :: sel_info (nrecv)
06092        Integer,           Intent (In)    :: nb_extra, n_found, n_send
06093        Integer,           Intent (In)    :: index_sent  (n_send)
06094        Integer,           Intent (In)    :: found (n_send)
06095        Integer,           Intent (In)    :: index_found (n_found)
06096        Double Precision,  Intent (In)    :: distance (n_found)
06097        Integer,           Intent (InOut) :: selected (2, extra_search%n_extra)
06098        Integer,           Intent (Out)   :: ierror
06099     End Subroutine
06100 
06101     subroutine psmile_bbcells_1d_dble (array, shape, range, &
06102                                        corners, corner_shape, nbr_corners, &
06103                                        chmin, chmax, levdim, ierror)
06104        Integer,           Intent (In)  :: shape (2)
06105        Integer,           Intent (In)  :: range (2)
06106        Double Precision,  Intent (In)  :: array (shape(1):shape(2))
06107        Integer,           Intent (In)  :: corner_shape (2), nbr_corners
06108        Double Precision,  Intent (In)  :: corners (corner_shape(1):corner_shape(2), 
06109                                                    nbr_corners)
06110        Integer,           Intent (In)  :: levdim
06111        Double Precision,  Intent (Out) :: chmin (range(1)-1:range(2))
06112        Double Precision,  Intent (Out) :: chmax (range(1)-1:range(2))
06113        Integer,           Intent (Out) :: ierror
06114     End Subroutine
06115 
06116     subroutine psmile_bbcells_2d_dble (           &
06117                     coords, coords_shape, sub_range, &
06118                     corner_shape,                    &
06119                     chmin, chmax, midp, levdim,      &
06120                     period, ierror)
06121        Use psmile_common
06122        Integer,           Intent (In)  :: coords_shape  (2, ndim_2d)
06123        Integer,           Intent (In)  :: sub_range  (2, ndim_2d)
06124        Integer,           Intent (In)  :: corner_shape (2, ndim_2d)
06125        Double Precision,  Intent (In)  :: 
06126           coords(coords_shape(1,1):coords_shape(2,1), 
06127                  coords_shape(1,2):coords_shape(2,2))
06128        Integer,           Intent (In)  :: levdim (ndim_2d)
06129        Double Precision,  Intent (In)  :: period
06130        Double Precision,  Intent (Out) :: 
06131           chmin (sub_range(1,1)-1:sub_range(2,1), 
06132                  sub_range(1,2)-1:sub_range(2,2))
06133        Double Precision,  Intent (Out) :: 
06134           chmax (sub_range(1,1)-1:sub_range(2,1), 
06135                  sub_range(1,2)-1:sub_range(2,2))
06136        Double Precision,  Intent (Out) :: 
06137           midp  (sub_range(1,1)-1:sub_range(2,1), 
06138                  sub_range(1,2)-1:sub_range(2,2))
06139        Integer,           Intent (Out) :: ierror
06140     End Subroutine
06141 
06142     subroutine psmile_bbcells_virt_2d_dble (method_id,                &
06143                     coords1, coords2, coords_shape, coords_range,     &
06144                     corners1, corners2, corner_shape, nbr_corners,    &
06145                     chmin1_corner, chmin2_corner,                     &
06146                     chmax1_corner, chmax2_corner, levdim_corner,      &
06147                     chmin1,  chmin2, chmax1, chmax2, midp1, midp2,    &
06148                     levdim,  period, bmaski, bmaskj, ierror)
06149        Use PSMILe_common
06150        Integer,           Intent (In)  :: method_id, nbr_corners
06151        Integer,           Intent (In)  :: coords_shape (2, ndim_2d)
06152        Integer,           Intent (In)  :: coords_range (2, ndim_2d)
06153        Integer,           Intent (In)  :: corner_shape (2, ndim_2d)
06154        Integer,           Intent (In)  :: levdim_corner (2, ndim_2d)
06155        Integer,           Intent (In)  :: levdim (ndim_2d)
06156        Double Precision,  Intent (In)  :: period
06157        Double Precision,  Intent (InOut)  ::              
06158           coords1(coords_shape(1,1):coords_shape(2,1), 
06159                   coords_shape(1,2):coords_shape(2,2))
06160        Double Precision,  Intent (InOut)  ::              
06161           coords2(coords_shape(1,1):coords_shape(2,1), 
06162                   coords_shape(1,2):coords_shape(2,2))
06163        Double Precision,  Intent (In)  :: 
06164           corners1 (corner_shape(1,1):corner_shape(2,1), 
06165                     corner_shape(1,2):corner_shape(2,2), 
06166                     nbr_corners)
06167        Double Precision,  Intent (In)  :: 
06168           corners2 (corner_shape(1,1):corner_shape(2,1), 
06169                     corner_shape(1,2):corner_shape(2,2), 
06170                     nbr_corners)
06171        Double Precision,  Intent (In)  :: 
06172           chmin1_corner (levdim_corner(1,1):levdim_corner(2,1), 
06173                          levdim_corner(1,2):levdim_corner(2,2))
06174        Double Precision,  Intent (In)  :: 
06175           chmin2_corner (levdim_corner(1,1):levdim_corner(2,1), 
06176                          levdim_corner(1,2):levdim_corner(2,2))
06177        Double Precision,  Intent (In)  :: 
06178           chmax1_corner (levdim_corner(1,1):levdim_corner(2,1), 
06179                          levdim_corner(1,2):levdim_corner(2,2))
06180        Double Precision,  Intent (In)  :: 
06181           chmax2_corner (levdim_corner(1,1):levdim_corner(2,1), 
06182                          levdim_corner(1,2):levdim_corner(2,2))
06183        Double Precision, Intent (InOut) :: 
06184           chmin1 (coords_range(1,1)-1:coords_range(2,1), 
06185                   coords_range(1,2)-1:coords_range(2,2))
06186        Double Precision,  Intent (InOut) :: 
06187           chmin2 (coords_range(1,1)-1:coords_range(2,1), 
06188                   coords_range(1,2)-1:coords_range(2,2))
06189        Double Precision, Intent (InOut) :: 
06190           chmax1 (coords_range(1,1)-1:coords_range(2,1), 
06191                   coords_range(1,2)-1:coords_range(2,2))
06192        Double Precision, Intent (InOut) :: 
06193           chmax2 (coords_range(1,1)-1:coords_range(2,1), 
06194                   coords_range(1,2)-1:coords_range(2,2))
06195        Double Precision, Intent (InOut) :: 
06196           midp1  (coords_range(1,1)-1:coords_range(2,1), 
06197                   coords_range(1,2)-1:coords_range(2,2))
06198        Double Precision, Intent (InOut) :: 
06199           midp2  (coords_range(1,1)-1:coords_range(2,1), 
06200                   coords_range(1,2)-1:coords_range(2,2))
06201        Integer,           Intent (Out) :: 
06202           bmaski (coords_range(1,1)-1:coords_range(2,1)+1, 2)
06203        Integer,           Intent (Out) :: 
06204           bmaskj (coords_range(1,2)-1:coords_range(2,2)+1, 2)
06205        Integer,           Intent (Out) :: ierror
06206     End Subroutine
06207 
06208     subroutine psmile_bbcells_3d_dble (method_id, array, shape, range,     &
06209                                        corners, corner_shape, nbr_corners, &
06210                                        chmin, chmax, midp,                 &
06211                                        levdim, cyclic, period, ierror)
06212        Use PSMILe_common
06213        Integer,           Intent (In)  :: method_id
06214        Integer,           Intent (In)  :: shape (2, ndim_3d)
06215        Integer,           Intent (In)  :: range (2, ndim_3d)
06216        Integer,           Intent (In)  :: corner_shape (2, ndim_3d), nbr_corners
06217        Double Precision,  Intent (In)  :: array(shape(1,1):shape(2,1), 
06218                                                 shape(1,2):shape(2,2), 
06219                                                 shape(1,3):shape(2,3))
06220        Double Precision,  Intent (In)  :: corners (corner_shape(1,1): 
06221                                                    corner_shape(2,1), 
06222                                                    corner_shape(1,2): 
06223                                                    corner_shape(2,2), 
06224                                                    corner_shape(1,3): 
06225                                                    corner_shape(2,3), 
06226                                                    nbr_corners)
06227        Integer,           Intent (In)  :: levdim (ndim_3d)
06228        Logical,           Intent (In)  :: cyclic
06229        Double Precision,  Intent (In)  :: period
06230        Double Precision,  Intent (Out) :: chmin (range(1,1)-1:range(2,1), 
06231                                                  range(1,2)-1:range(2,2), 
06232                                                  range(1,3)-1:range(2,3))
06233        Double Precision,  Intent (Out) :: chmax (range(1,1)-1:range(2,1), 
06234                                                  range(1,2)-1:range(2,2), 
06235                                                  range(1,3)-1:range(2,3))
06236        Double Precision,  Intent (Out) :: midp  (range(1,1)-1:range(2,1), 
06237                                                  range(1,2)-1:range(2,2), 
06238                                                  range(1,3)-1:range(2,3))
06239        Integer,           Intent (Out) :: ierror
06240     End Subroutine
06241 
06242     subroutine psmile_bbcells_gauss2_dble (array_x, array_y,          &
06243                                            shape, range, nbr_lats,    &
06244                                            points_per_lat, corners_y, &
06245                                            corner_shape, nbr_corners, &
06246                                            chmin_x, chmax_x, midp_x,  &
06247                                            chmin_y, chmax_y, midp_y,  &
06248                                            nbrs, levdim, ierror )
06249 
06250       Integer, Intent (In)             :: shape (2)
06251       Double Precision, Intent (In)    :: array_x(shape(1):shape(2))
06252       Double Precision, Intent (In)    :: array_y(shape(1):shape(2))
06253       Integer, Intent (In)             :: range (2)
06254       Integer, Intent (In)             :: corner_shape (2)
06255       Integer, Intent (In)             :: nbr_lats
06256       Integer, Intent (In)             :: points_per_lat(nbr_lats,1)
06257       Integer, Intent (In)             :: nbr_corners
06258       Double Precision, Intent (In)    :: corners_y (corner_shape(1):corner_shape(2), 
06259                                                      nbr_corners)
06260       Integer, Intent (In)             :: levdim(1)
06261       Double Precision, Intent (Out)   :: chmin_x (range(1)-1:range(2))
06262       Double Precision, Intent (Out)   :: chmax_x (range(1)-1:range(2))
06263       Double Precision, Intent (Out)   :: midp_x  (range(1)-1:range(2))
06264       Double Precision, Intent (Out)   :: chmin_y (range(1)-1:range(2))
06265       Double Precision, Intent (Out)   :: chmax_y (range(1)-1:range(2))
06266       Double Precision, Intent (Out)   :: midp_y  (range(1)-1:range(2))
06267       Integer, Intent (Out)            :: nbrs    (range(2)-range(1)+1,4)
06268       Integer, Intent (Out)            :: ierror
06269     End Subroutine
06270 
06271     subroutine psmile_celltest_dble ( grid_id, range, sense, ierror )
06272       Use PSMILe_common
06273       Integer, Intent (In)             :: grid_id
06274       Integer, Intent (In)             :: range(2,ndim_2d)
06275       Integer, Intent (Out)            :: sense
06276       Integer, Intent (Out)            :: ierror
06277     End Subroutine
06278 
06279     subroutine psmile_ccompact_gauss2_dble ( send_info,     &
06280                grid_valid_shape, shape, nb_corners,         &
06281                array_x, array_y, array_z,                   &
06282                extra_search, dest_size, nbr_cells_tot,      &
06283                source_cell_index,                           &
06284                neighcells, dest_x, dest_y, dest_z, ierror )
06285 
06286        USE PSMILe_Common
06287 
06288        Type (Send_information), Intent (InOut)  :: send_info
06289        Integer, Intent (In)                     :: grid_valid_shape (2, ndim_3d)
06290        Integer, Intent (In)                     :: shape (2, ndim_3d)
06291        Integer, Intent (In)                     :: nb_corners
06292        Double Precision, Intent (In)            :: array_x ( shape(1,1):shape(2,1), 
06293                                                              nb_corners )
06294        Double Precision, Intent (In)            :: array_y ( shape(1,1):shape(2,1), 
06295                                                              nb_corners )
06296        Double Precision, Intent (In)            :: array_z ( shape(1,3):shape(2,3) )
06297        Integer, Intent (In)                     :: dest_size
06298        Integer, Intent (In)                     :: nbr_cells_tot
06299        Type (Extra_search_info), Intent (InOut) :: extra_search
06300        Integer, Intent (InOut)                  :: source_cell_index (nbr_cells_tot)
06301        Integer, Intent (InOut)                  :: neighcells (nbr_cells_tot, nb_corners)
06302        Double Precision, Intent (Out)           :: dest_x (2*dest_size)
06303        Double Precision, Intent (Out)           :: dest_y (2*dest_size)
06304        Double Precision, Intent (Out)           :: dest_z (2*dest_size)
06305        Integer, Intent (Out)                    :: ierror
06306     End Subroutine
06307 
06308     subroutine psmile_ccompact_irreg2_dble ( send_info,     &
06309                grid_valid_shape, shape, nb_corners,         &
06310                array_x, array_y, array_z,                   &
06311                extra_search, dest_size, nbr_cells_tot,      &
06312                source_cell_index,                           &
06313                neighcells, dest_x, dest_y, dest_z, ierror )
06314 
06315        USE PSMILe_Common
06316 
06317        Type (Send_information), Intent (InOut)  :: send_info
06318        Type (Extra_search_info), Intent (InOut) :: extra_search
06319 
06320        Integer, Intent (In)                     :: grid_valid_shape (2, ndim_3d)
06321        Integer, Intent (In)                     :: shape (2, ndim_3d)
06322        Integer, Intent (In)                     :: nb_corners
06323        Double Precision, Intent (In)            :: array_x ( shape(1,1):shape(2,1), 
06324                                                              shape(1,2):shape(2,2), 
06325                                                              nb_corners )
06326        Double Precision, Intent (In)            :: array_y ( shape(1,1):shape(2,1), 
06327                                                              shape(1,2):shape(2,2), 
06328                                                              nb_corners )
06329        Double Precision, Intent (In)            :: array_z ( shape(1,3):shape(2,3) )
06330        Integer, Intent (In)                     :: dest_size
06331        Integer, Intent (In)                     :: nbr_cells_tot
06332        Integer, Intent (InOut)                  :: source_cell_index (nbr_cells_tot)
06333        Integer, Intent (InOut)                  :: neighcells(nbr_cells_tot, nb_corners)
06334        Double Precision, Intent (Out)           :: dest_x (dest_size)
06335        Double Precision, Intent (Out)           :: dest_y (dest_size)
06336        Double Precision, Intent (Out)           :: dest_z (dest_size)
06337        Integer, Intent (Out)                    :: ierror
06338     End Subroutine
06339 
06340     subroutine psmile_ccompact_3d_reg_dble ( send_info,     &
06341                grid_valid_shape, shape, nb_corners,         &
06342                array_x, array_y, array_z,                   &
06343                extra_search, dest_size, nbr_cells_tot,      &
06344                source_cell_index,                           &
06345                neighcells, dest_x, dest_y, dest_z, ierror )
06346 
06347        USE PSMILe_Common
06348 
06349        Type (Send_information), Intent (InOut)  :: send_info
06350        Integer, Intent (In)                     :: grid_valid_shape (2, ndim_3d)
06351        Integer, Intent (In)                     :: shape (2, ndim_3d)
06352        Integer, Intent (In)                     :: nb_corners
06353        Double Precision, Intent (In)            :: array_x ( shape(1,1):shape(2,1), 
06354                                                              nb_corners )
06355        Double Precision, Intent (In)            :: array_y ( shape(1,2):shape(2,2), 
06356                                                              nb_corners )
06357        Double Precision, Intent (In)            :: array_z ( shape(1,3):shape(2,3) )
06358        Type (Extra_search_info), Intent (InOut) :: extra_search
06359        Integer, Intent (In)                     :: dest_size
06360        Integer, Intent (In)                     :: nbr_cells_tot
06361        Integer, Intent (InOut)                  :: source_cell_index (nbr_cells_tot)
06362        Double Precision, Intent (Out)           :: dest_x (dest_size)
06363        Double Precision, Intent (Out)           :: dest_y (dest_size)
06364        Double Precision, Intent (Out)           :: dest_z (dest_size)
06365        Integer, Intent (InOut)                  :: neighcells (nbr_cells_tot, nb_corners)
06366        Integer, Intent (Out)                    :: ierror
06367     End Subroutine
06368 
06369     subroutine psmile_control_cell_2d_dble (grid_id,               &
06370                     ic, nc, icdim1, list, j, k,                    &
06371                     coords1,  coords2,  shape,                     &
06372                     corners1, corners2, corner_shape, nbr_corners, &
06373                     tol, fnd, ierror)
06374       Use PSMILe_common
06375 
06376       Integer,          Intent (In)   :: grid_id, nc, icdim1
06377       Integer,          Intent (In)   :: ic (icdim1, ndim_2d)
06378       Integer,          Intent (In)   :: list (nc), j, k
06379       Integer,          Intent (In)   :: shape (2, ndim_3d)
06380       Double Precision, Intent (In)   :: coords1 (shape(1,1):shape(2,1), 
06381                                                   shape(1,2):shape(2,2), 
06382                                                   shape(1,3):shape(2,3))
06383       Double Precision, Intent (In)   :: coords2 (shape(1,1):shape(2,1), 
06384                                                   shape(1,2):shape(2,2), 
06385                                                   shape(1,3):shape(2,3))
06386       Integer,          Intent (In)   :: corner_shape (2, ndim_2d)
06387       Integer,          Intent (In)   :: nbr_corners
06388       Double Precision, Intent (In)   ::                 
06389          corners1 ( corner_shape(1,1):corner_shape(2,1), 
06390                     corner_shape(1,2):corner_shape(2,2), nbr_corners)
06391       Double Precision, Intent (In)   ::                 
06392          corners2 ( corner_shape(1,1):corner_shape(2,1), 
06393                     corner_shape(1,2):corner_shape(2,2), nbr_corners)
06394       Double Precision, Intent (In)   :: tol
06395       Logical,          Intent (Out)  :: fnd (nc)
06396       Integer,          Intent (Out)  :: ierror
06397     End Subroutine
06398 
06399     subroutine psmile_control_cell_gauss2_dble (grid_id,           &
06400                     ic, nc, list, j, k,                            &
06401                     coords1,  coords2,  shape,                     &
06402                     corners1, corners2, corner_shape, nbr_corners, &
06403                     tol, fnd, ierror)
06404       Use PSMILe_common
06405 
06406       Integer,          Intent (In)   :: grid_id, nc
06407       Integer,          Intent (In)   :: ic (nc)
06408       Integer,          Intent (In)   :: list (nc), j, k
06409       Integer,          Intent (In)   :: shape (2, ndim_3d)
06410       Double Precision, Intent (In)   :: 
06411          coords1 (shape(1,1):shape(2,1), shape(1,2):shape(2,2), 
06412                   shape(1,3):shape(2,3))
06413       Double Precision, Intent (In)   :: 
06414          coords2 (shape(1,1):shape(2,1), shape(1,2):shape(2,2), 
06415                   shape(1,3):shape(2,3))
06416       Integer,          Intent (In)   :: corner_shape (2, ndim_2d)
06417       Integer,          Intent (In)   :: nbr_corners
06418       Double Precision, Intent (In)   ::                 
06419          corners1 ( corner_shape(1,1):corner_shape(2,1), 
06420                     corner_shape(1,2):corner_shape(2,2), nbr_corners)
06421       Double Precision, Intent (In)   ::                 
06422          corners2 ( corner_shape(1,1):corner_shape(2,1), 
06423                     corner_shape(1,2):corner_shape(2,2), nbr_corners)
06424       Double Precision, Intent (In)   :: tol
06425       Logical,          Intent (Out)  :: fnd (nc)
06426       Integer,          Intent (Out)  :: ierror
06427     End Subroutine
06428 
06429     subroutine psmile_ext_compact_irreg2_dble (send_info, array, shape, &
06430                                                grid_valid_shape,        &
06431                                                dest_vector, dest_size, ierror)
06432        Use PSMILe_common
06433        Type(Send_information), Intent(InOut) :: send_info
06434        Double Precision, Intent (In)         :: array (*)
06435        Integer, Intent (In)                  :: shape (2, ndim_2d)
06436        Integer, Intent (In)                  :: grid_valid_shape (2, ndim_3d)
06437        Integer, Intent (In)                  :: dest_size
06438        Double Precision, Intent (Out)        :: dest_vector (dest_size)
06439        Integer, Intent (Out)                 :: ierror
06440     End Subroutine
06441 
06442     subroutine psmile_ext_compact_list_3d_dble (send_info, array, shape, &
06443                                                 grid_valid_shape,        &
06444                                                 dest_vector, dest_size, ierror)
06445        Use PSMILe_common
06446        Type(Send_information), Intent(In) :: send_info
06447        Double Precision, Intent (In)      :: array (*)
06448        Integer, Intent (In)               :: shape (2, ndim_3d)
06449        Integer, Intent (In)               :: grid_valid_shape (2, ndim_3d)
06450        Integer, Intent (In)               :: dest_size
06451        Double Precision, Intent (Out)     :: dest_vector (dest_size)
06452        Integer, Intent (Out)              :: ierror
06453     End Subroutine
06454 
06455     subroutine psmile_put_compact_list_3d_dble (source_list, dstijk, nloc, &
06456                                                 array, shape, nbr_fields,  &
06457                                                 ierror)
06458        Use PSMILe_common
06459        Double Precision, Intent (InOut)   :: array (*)
06460        Integer, Intent (In)               :: shape (2, ndim_3d)
06461        Integer, Intent (In)               :: nloc, nbr_fields
06462        Integer, Intent (In)               :: dstijk (ndim_3d, nbr_fields)
06463        Double Precision, Intent (In)      :: source_list (nloc, nbr_fields)
06464        Integer, Intent (Out)              :: ierror
06465     End Subroutine
06466 
06467     subroutine psmile_extract_indices_2d_dble (array, shape, &
06468                                                dstijk, ncpl, &
06469                                                dest_vector, ierror)
06470        Use PSMILe_common
06471        Double Precision, Intent (In)      :: array (*)
06472        Integer, Intent (In)               :: shape (2, ndim_2d)
06473        Integer, Intent (In)               :: ncpl
06474        Integer, Intent (In)               :: dstijk (ndim_3d, ncpl)
06475        Double Precision, Intent (Out)     :: dest_vector (ncpl)
06476        Integer, Intent (Out)              :: ierror
06477     End Subroutine
06478 
06479     subroutine psmile_extract_indices_3d_dble (array, shape, &
06480                                                dstijk, ncpl, &
06481                                                dest_vector, ierror)
06482        Use PSMILe_common
06483        Double Precision, Intent (In)      :: array (*)
06484        Integer, Intent (In)               :: shape (2, ndim_3d)
06485        Integer, Intent (In)               :: ncpl
06486        Integer, Intent (In)               :: dstijk (ndim_3d, ncpl)
06487        Double Precision, Intent (Out)     :: dest_vector (ncpl)
06488        Integer, Intent (Out)              :: ierror
06489     End Subroutine
06490 
06491     subroutine psmile_gauss_setup_dble (grid_id, counts, displs, ierror)
06492       Integer, Intent (In)                :: grid_id
06493       Integer, Intent (In)                :: counts (*)
06494       Integer, Intent (In)                :: displs (*)
06495 !
06496       Integer, Intent (Out)               :: ierror
06497     End Subroutine PSMILe_gauss_setup_dble
06498 
06499     subroutine psmile_extent_subgrid_1d_dble (           &
06500                     array, idlow, idhigh, nbr_corners,   &
06501                            ibeg,  iend,                  &
06502                     extent, ierror)
06503        Integer, Intent (In)            :: idlow, idhigh, nbr_corners
06504        Integer, Intent (In)            :: ibeg, iend
06505        Double Precision, Intent (In)   :: array (idlow:idhigh, nbr_corners)
06506        Double Precision, Intent (Out)  :: extent (2)
06507        Integer, Intent (Out)           :: ierror
06508     End Subroutine
06509 
06510     subroutine psmile_extent_subgrid_2d_dble (           &
06511                     array, idlow, idhigh, jdlow, jdhigh, nbr_corners,   &
06512                            ibeg,  iend,   jbeg,  jend,                  &
06513                     extent, ierror)
06514        Integer, Intent (In)            :: idlow, idhigh
06515        Integer, Intent (In)            :: jdlow, jdhigh, nbr_corners
06516        Integer, Intent (In)            :: ibeg, iend, jbeg, jend
06517        Double Precision, Intent (In)   :: array (idlow:idhigh,          
06518                                                  jdlow:jdhigh, nbr_corners)
06519        Double Precision, Intent (Out)  :: extent (2)
06520        Integer, Intent (Out)           :: ierror
06521     End Subroutine
06522 
06523     subroutine psmile_extent_subgrid_3d_dble (           &
06524                     array, idlow, idhigh, jdlow, jdhigh, &
06525                            kdlow, kdhigh, nbr_corners,   &
06526                            grid_shape,                   &
06527                     extent, ierror)
06528        Use PSMILe_common
06529        Integer, Intent (In)            :: idlow, idhigh
06530        Integer, Intent (In)            :: jdlow, jdhigh
06531        Integer, Intent (In)            :: kdlow, kdhigh, nbr_corners
06532        Double Precision, Intent (In)   :: array (idlow:idhigh, jdlow:jdhigh, 
06533                                                  kdlow:kdhigh, nbr_corners)
06534        Integer, Intent (In)            :: grid_shape (2, ndim_3d)
06535        Double Precision, Intent (Out)  :: extent (2)
06536        Integer, Intent (Out)           :: ierror
06537     End Subroutine
06538 
06539     subroutine psmile_generate_1d_3d_dble (            &
06540                     vector1, vector2, vector3, shape,  &
06541                     dest_array, dest_shape,            &
06542                     grid_valid_shape, ierror)
06543        Use PSMILe_common
06544 
06545        Double Precision, Intent (In)   :: vector1 (*)
06546        Double Precision, Intent (In)   :: vector2 (*)
06547        Double Precision, Intent (In)   :: vector3 (*)
06548        Integer,          Intent (In)   :: shape (2, ndim_3d)
06549        Integer,          Intent (In)   :: dest_shape (2, ndim_3d)
06550        Double Precision, Intent (Out)  :: dest_array ( 
06551                                              dest_shape(1,1):dest_shape(2,1), 
06552                                              dest_shape(1,2):dest_shape(2,2), 
06553                                              dest_shape(1,3):dest_shape(2,3))
06554        Integer,          Intent (In)   :: grid_valid_shape (2, ndim_3d)
06555        Integer,          Intent (Out)  :: ierror
06556     End Subroutine
06557 
06558     subroutine psmile_get_cyclic_dir_3d_dble (                 &
06559                            chmin, chmin2, chmin3,              &
06560                            chmax, chmax2, chmax3, levdim,      &
06561                            corners, corners2, corners3,        &
06562                            corner_shape, nbr_corners,          &
06563                            grid_valid_shape,                   &
06564                            len_cyclic, rtol, index, cyclic, ierror)
06565        Use PSMILe_common
06566 
06567        Double Precision, Intent (In)   :: chmin (*)
06568        Double Precision, Intent (In)   :: chmax (*)
06569        Double Precision, Intent (In)   :: chmin2 (*)
06570        Double Precision, Intent (In)   :: chmax2 (*)
06571        Double Precision, Intent (In)   :: chmin3 (*)
06572        Double Precision, Intent (In)   :: chmax3 (*)
06573        Integer, Intent (In)            :: levdim (ndim_3d)
06574        Double Precision, Intent (In)   :: corners (*)
06575        Double Precision, Intent (In)   :: corners2 (*)
06576        Double Precision, Intent (In)   :: corners3 (*)
06577        Integer, Intent (In)            :: corner_shape (2, ndim_3d)
06578        Integer, Intent (In)            :: nbr_corners
06579        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
06580        Double Precision, Intent (In)   :: len_cyclic, rtol
06581        Integer, Intent (In)            :: index
06582        Logical, Intent (Out)           :: cyclic
06583        Integer, Intent (Out)           :: ierror
06584     End Subroutine
06585 
06586     subroutine psmile_get_faces_3d_dble (search, extra_search,     &
06587                     corners1, corners2, corners3,                  &
06588                     corner_shape, nbr_corners, grid_valid_shape,   &
06589                     neighbors_3d, nloc, num_neigh,                 &
06590                     faces, n_faces, nreq, ierror)
06591        Use PSMILe_common
06592 
06593        Type (Enddef_search),     Intent (In)  :: search
06594        Type (Extra_search_info), Intent (In)  :: extra_search
06595        Integer,                  Intent (In)  :: nbr_corners, nloc, num_neigh
06596        Integer,                  Intent (In)  :: nreq
06597        Integer,                  Intent (In)  :: corner_shape     (2, ndim_3d)
06598        Integer,                  Intent (In)  :: grid_valid_shape (2, ndim_3d)
06599        Double Precision,         Intent (In)  :: 
06600           corners1 ( corner_shape(1,1):corner_shape(2,1), 
06601                      corner_shape(1,2):corner_shape(2,2), 
06602                      corner_shape(1,3):corner_shape(2,3), nbr_corners)
06603        Double Precision,         Intent (In)  :: 
06604           corners2 ( corner_shape(1,1):corner_shape(2,1), 
06605                      corner_shape(1,2):corner_shape(2,2), 
06606                      corner_shape(1,3):corner_shape(2,3), nbr_corners)
06607        Double Precision,         Intent (In)  :: 
06608           corners3 ( corner_shape(1,1):corner_shape(2,1), 
06609                      corner_shape(1,2):corner_shape(2,2), 
06610                      corner_shape(1,3):corner_shape(2,3), nbr_corners)
06611        Integer,                  Intent (In)  :: 
06612           neighbors_3d (ndim_3d, nloc, num_neigh)
06613 !
06614        Double Precision,         Intent (Out) :: faces (2, ndim_3d, nreq)
06615        Integer,                  Intent (Out) :: n_faces (nreq)
06616        Integer,                  Intent (Out) :: ierror
06617     End Subroutine
06618 
06619     subroutine psmile_get_faces_3d_reg_dble (search, extra_search, &
06620                     corners1, corners2, corners3,                  &
06621                     corner_shape, nbr_corners, grid_valid_shape,   &
06622                     neighbors_3d, nloc, num_neigh,                 &
06623                     faces, n_faces, nreq, ierror)
06624        Use PSMILe_common
06625 
06626        Type (Enddef_search),     Intent (In)  :: search
06627        Type (Extra_search_info), Intent (In)  :: extra_search
06628        Integer,                  Intent (In)  :: nbr_corners, nloc, num_neigh
06629        Integer,                  Intent (In)  :: nreq
06630        Integer,                  Intent (In)  :: corner_shape (2, ndim_3d)
06631        Integer,                  Intent (In)  :: grid_valid_shape (2, ndim_3d)
06632        Double Precision,         Intent (In)  :: 
06633           corners1 ( corner_shape(1,1):corner_shape(2,1), 2)
06634        Double Precision,         Intent (In)  :: 
06635           corners2 ( corner_shape(1,2):corner_shape(2,2), 2)
06636        Double Precision,         Intent (In)  :: 
06637           corners3 ( corner_shape(1,3):corner_shape(2,3), 2)
06638        Integer,                  Intent (In)  :: 
06639           neighbors_3d (ndim_3d, nloc, num_neigh)
06640 !
06641        Double Precision,         Intent (Out) :: faces (2, ndim_3d, nreq)
06642        Integer,                  Intent (Out) :: n_faces (nreq)
06643        Integer,                  Intent (Out) :: ierror
06644     End Subroutine
06645 
06646     subroutine psmile_get_faces_gauss2_dble (search, extra_search, &
06647                     corners1, corners2, corners3,                  &
06648                     corner_shape, nbr_corners, grid_valid_shape,   &
06649                     neighbors_3d, nloc, num_neigh,                 &
06650                     faces, nreq, ierror)
06651 
06652        Use PSMILe_common
06653 
06654        Type (Enddef_search),     Intent (In)  :: search
06655        Type (Extra_search_info), Intent (In)  :: extra_search
06656        Integer,                  Intent (In)  :: nbr_corners, nloc, num_neigh
06657        Integer,                  Intent (In)  :: nreq
06658        Integer,                  Intent (In)  :: corner_shape     (2, ndim_3d)
06659        Integer,                  Intent (In)  :: grid_valid_shape (2, ndim_3d)
06660        Double Precision,         Intent (In)  :: 
06661           corners1 ( corner_shape(1,1):corner_shape(2,1), 2 )
06662        Double Precision,         Intent (In)  :: 
06663           corners2 ( corner_shape(1,1):corner_shape(2,1), 2 )
06664        Double Precision,         Intent (In)  :: 
06665           corners3 ( corner_shape(1,3):corner_shape(2,3), 2 )
06666        Integer,                  Intent (In)  :: 
06667           neighbors_3d (ndim_3d, nloc, num_neigh)
06668 !
06669        Double Precision,         Intent (Out) :: faces (2, ndim_3d, nreq)
06670        Integer,                  Intent (Out) :: ierror
06671     End Subroutine
06672 
06673     subroutine psmile_get_faces_irreg2_dble (search, extra_search, &
06674                     corners1, corners2, corners3,                  &
06675                     corner_shape, nbr_corners, grid_valid_shape,   &
06676                     neighbors_3d, nloc, num_neigh,                 &
06677                     faces, n_faces, nreq, ierror)
06678        Use PSMILe_common
06679 
06680        Type (Enddef_search),     Intent (In)  :: search
06681        Type (Extra_search_info), Intent (In)  :: extra_search
06682        Integer,                  Intent (In)  :: nbr_corners, nloc, num_neigh
06683        Integer,                  Intent (In)  :: nreq
06684        Integer,                  Intent (In)  :: corner_shape     (2, ndim_3d)
06685        Integer,                  Intent (In)  :: grid_valid_shape (2, ndim_3d)
06686        Double Precision,         Intent (In)  :: 
06687           corners1 ( corner_shape(1,1):corner_shape(2,1), 
06688                      corner_shape(1,2):corner_shape(2,2), nbr_corners/2)
06689        Double Precision,         Intent (In)  :: 
06690           corners2 ( corner_shape(1,1):corner_shape(2,1), 
06691                      corner_shape(1,2):corner_shape(2,2), nbr_corners/2)
06692        Double Precision,         Intent (In)  :: 
06693           corners3 ( corner_shape(1,3):corner_shape(2,3), 2)
06694        Integer,                  Intent (In)  :: 
06695           neighbors_3d (ndim_3d, nloc, num_neigh)
06696 !
06697        Double Precision,         Intent (Out) :: faces (2, ndim_3d, nreq)
06698        Integer,                  Intent (Out) :: n_faces (nreq)
06699        Integer,                  Intent (Out) :: ierror
06700     End Subroutine
06701 
06702     subroutine psmile_get_grid_extent_dble (grid_id, extent, ierror)
06703        Use PSMILe_common
06704        Integer,                  Intent (In)   :: grid_id
06705        Real (PSMILe_float_kind), Intent (Out)  :: extent (2, ndim_3d)
06706        Integer,                  Intent (Out)  :: ierror
06707     End Subroutine
06708 
06709     subroutine psmile_global_search_dble (comp_info,             &
06710                     control, len_cpl, var_id, grid_valid_shape,  &
06711                     search, tgt_coords,                          &
06712                     neighbors_3d, nloc, num_neigh, extra_search, &
06713                     interpolation_methods, interpolation_search, n_intmethods, &
06714                     send_index,                                  &
06715                     mask_available, use_mask, use_how,           &
06716                     grid_type, ierror)
06717        Use PSMILe_common
06718 
06719        Type (Enddef_comp),   Intent (In)    :: comp_info
06720        Type (Enddef_search), Intent (InOut) :: search
06721        Type (dble_vector),   Intent (In)    :: tgt_coords (ndim_3d)
06722        Integer,              Intent (In)    :: control (2, ndim_3d, 
06723                                                search%npart)
06724        Integer,              Intent (In)    :: len_cpl (search%npart)
06725        Integer,              Intent (In)    :: var_id
06726        Integer,              Intent (In)    :: grid_valid_shape (2, ndim_3d)
06727        Integer,              Intent (In)    :: send_index
06728        Integer,              Intent (In)    :: nloc, num_neigh
06729        Integer,              Intent (In)    :: n_intmethods
06730        Integer,              Intent (In)    :: interpolation_methods (n_intmethods)
06731        Logical,              Intent (In)    :: interpolation_search  (n_intmethods)
06732        Logical,              Intent (In)    :: mask_available, use_mask
06733        Integer,              Intent (In)    :: use_how
06734        Integer,              Intent (In)    :: grid_type
06735        Integer,              Intent (InOut) :: neighbors_3d (ndim_3d, nloc, 
06736                                                              num_neigh)
06737        Type (Extra_search_info), Intent (InOut) :: extra_search
06738        Integer,              Intent (Out)   :: ierror
06739     End Subroutine
06740 
06741     subroutine psmile_global_search_cell_dble ( grid_id, var_id,    &
06742                   comp_info, send_info, search, extra_search, ncpl, &
06743                   nbr_cells, n_intmethods, interpolation_methods,   &
06744                   interpolation_search, ierror )
06745        Use PSMILe_common
06746 
06747        Integer,                  Intent (In)    :: grid_id
06748        Integer,                  Intent (In)    :: var_id
06749        Type (Enddef_comp),       Intent (In)    :: comp_info
06750        Type (Send_information),  Intent (InOut) :: send_info
06751        Type (Enddef_search),     Intent (InOut) :: search
06752        Type (Extra_search_info), Intent (InOut) :: extra_search
06753        Integer,                  Intent (In)    :: ncpl
06754        Integer,                  Intent (InOut) :: nbr_cells(ncpl)
06755        Integer,                  Intent (In)    :: n_intmethods
06756        Integer,                  Intent (In)    :: interpolation_methods (n_intmethods)
06757        Logical,                  Intent (In)    :: interpolation_search  (n_intmethods)
06758        Integer,                  Intent (Out)   :: ierror
06759     End Subroutine
06760 
06761     subroutine psmile_global_search_nnx_dble (comp_info,         &
06762                     search, var_id,                              &
06763                     tgt_coords_x, tgt_coords_y, tgt_coords_z,    &
06764                     neighbors_3d, nloc, num_neigh, nb_extra,     &
06765                     extra_search, send_index,                    &
06766                     ierror)
06767        Use PSMILe_common
06768 
06769        Type (Enddef_comp),   Intent (In)    :: comp_info
06770        Type (Enddef_search), Intent (InOut) :: search
06771        Integer,              Intent (In)    :: var_id
06772        Integer,              Intent (In)    :: send_index
06773        Integer,              Intent (In)    :: nb_extra, nloc, num_neigh
06774        Double Precision,     Intent (In)    :: tgt_coords_x (nloc)
06775        Double Precision,     Intent (In)    :: tgt_coords_y (nloc)
06776        Double Precision,     Intent (In)    :: tgt_coords_z (nloc)
06777        Integer,              Intent (InOut) :: neighbors_3d (ndim_3d, nloc, 
06778                                                              num_neigh)
06779        Type (Extra_search_info), Intent (InOut) :: extra_search
06780        Integer,              Intent (Out)   :: ierror
06781     End Subroutine
06782 
06783     subroutine psmile_return_extra_off_dble (comp_info, search, var_id, &
06784                       found, distance, nd_dist, nb_extra, ierror)
06785        Use PSMILe_common
06786 
06787        Type (Enddef_comp),          Intent (In)    :: comp_info
06788        Type (Enddef_global_search), Intent (InOut) :: search
06789        Integer,                     Intent (In)    :: var_id
06790        Integer,                     Intent (In)    :: nd_dist, nb_extra
06791        Integer,                     Intent (In)    :: found (nd_dist)
06792        Double Precision,            Intent (In)    :: distance (nd_dist, 
06793                                                                 nb_extra)
06794        Integer,                     Intent (Out)   :: ierror
06795     End Subroutine
06796 
06797     subroutine psmile_sel_grid_range_dble (grid_id, dinter, inter, ierror)
06798        Use PSMILe_common
06799        Integer,                  Intent (In)  :: grid_id
06800        Real (PSMILe_float_kind), Intent (In)  :: dinter (2, ndim_3d)
06801        Integer,                  Intent (Out) ::  inter (2, ndim_3d)
06802        Integer,                  Intent (Out) :: ierror
06803     End Subroutine
06804 
06805     subroutine psmile_range_subgrid_1d_dble (            &
06806                     array, idlow, idhigh, nbr_corners,   &
06807                            ibeg,  iend,                  &
06808                     extent, inter, ierror)
06809        Integer, Intent (In)            :: idlow, idhigh, nbr_corners
06810        Integer, Intent (In)            :: ibeg, iend
06811        Double Precision, Intent (In)   :: array (idlow:idhigh, nbr_corners)
06812        Double Precision, Intent (In)   :: extent (2)
06813        Integer, Intent (Out)           :: inter (2)
06814        Integer, Intent (Out)           :: ierror
06815     End Subroutine
06816 
06817     subroutine psmile_range_subgrid_2d_dble (                  &
06818                     array1, array2,                            &
06819                     idlow, idhigh, jdlow, jdhigh, nbr_corners, &
06820                     ibeg,  iend,   jbeg,  jend,                &
06821                     extent, inter, ierror)
06822        Integer,          Intent (In)   :: idlow, idhigh
06823        Integer,          Intent (In)   :: jdlow, jdhigh, nbr_corners
06824        Integer,          Intent (In)   :: ibeg, iend, jbeg, jend
06825        Double Precision, Intent (In)   :: 
06826           array1 (idlow:idhigh, jdlow:jdhigh, nbr_corners)
06827        Double Precision, Intent (In)   :: 
06828           array2 (idlow:idhigh, jdlow:jdhigh, nbr_corners)
06829        Double Precision, Intent (In)   :: extent (2,2)
06830 !
06831        Integer,          Intent (Out)  :: inter  (2,2)
06832        Integer,          Intent (Out)  :: ierror
06833     End Subroutine
06834 
06835     subroutine psmile_range_subgrid_3d_dble (                    &
06836                     array1, array2, array3,                      &
06837                     idlow, idhigh, jdlow, jdhigh, kdlow, kdhigh, &
06838                     nbr_corners, grid_shape, rinter, inter, ierror)
06839        Use PSMILe_common
06840        Integer,          Intent (In)   :: idlow, idhigh, jdlow, jdhigh
06841        Integer,          Intent (In)   :: kdlow, kdhigh, nbr_corners
06842        Integer,          Intent (In)   :: grid_shape (2, ndim_3d)
06843        Double Precision, Intent (In)   :: 
06844           array1 (idlow:idhigh, jdlow:jdhigh, kdlow:kdhigh, nbr_corners)
06845        Double Precision, Intent (In)   :: 
06846           array2 (idlow:idhigh, jdlow:jdhigh, kdlow:kdhigh, nbr_corners)
06847        Double Precision, Intent (In)   :: 
06848           array3 (idlow:idhigh, jdlow:jdhigh, kdlow:kdhigh, nbr_corners)
06849        Double Precision, Intent (In)   :: rinter (2, ndim_3d)
06850 !
06851        Integer,          Intent (Out)  :: inter  (2, ndim_3d)
06852        Integer,          Intent (Out)  :: ierror
06853     End Subroutine
06854 
06855     subroutine psmile_mg_ctrl_subgrid_1d_dble (              &
06856                     array, corner_shape, nbr_corners, range, &
06857                     chmin, chmax, levdim, period, grid_id, ind, ierror)
06858        Integer,          Intent (In)    :: nbr_corners
06859        Integer,          Intent (In)    :: corner_shape (2)
06860        Integer,          Intent (In)    :: range (2)
06861        Integer,          Intent (In)    :: levdim
06862        Double Precision, Intent (In)    :: period
06863        Double Precision, Intent (In)    :: 
06864           array ( corner_shape(1):corner_shape(2), nbr_corners)
06865        Double Precision, Intent (In)    :: chmin (0:levdim)
06866        Double Precision, Intent (In)    :: chmax (0:levdim)
06867        Integer,          Intent (In)    :: grid_id, ind
06868 !
06869        Integer,          Intent (Out)   :: ierror
06870     End Subroutine
06871 
06872     subroutine psmile_mg_ctrl_subgrid_2d_dble (       &
06873                     array, corner_shape, nbr_corners, &
06874                            range,                     &
06875                     chmin, chmax, levdim, period,     &
06876                     grid_id, ind, ierror)
06877        Integer, Intent (In)             :: nbr_corners
06878        Integer, Intent (In)             :: corner_shape (2, 2)
06879        Integer, Intent (In)             :: range (2, 2)
06880        Integer, Intent (In)             :: levdim (2)
06881        Double Precision, Intent (In)    :: period
06882        Double Precision, Intent (In)    :: array(corner_shape(1,1):
06883                                                  corner_shape(2,1),
06884                                                  corner_shape(1,2):
06885                                                  corner_shape(2,2),
06886                                                  nbr_corners)
06887        Double Precision, Intent (In)    :: chmin (0:levdim(1), 0:levdim(2))
06888        Double Precision, Intent (In)    :: chmax (0:levdim(1), 0:levdim(2))
06889        Integer, Intent (In)             :: grid_id, ind
06890        Integer, Intent (Out)            :: ierror
06891     End Subroutine
06892 
06893     subroutine psmile_mg_ctrl_subgrid_3d_dble (       &
06894                     array, corner_shape, nbr_corners, &
06895                            range,                     &
06896                     chmin, chmax, levdim, period,     &
06897                     grid_id, ind, ierror)
06898        Use PSMILe_common
06899        Integer, Intent (In)             :: nbr_corners
06900        Integer, Intent (In)             :: corner_shape (2, ndim_3d)
06901        Integer, Intent (In)             :: range (2, ndim_3d)
06902        Integer, Intent (In)             :: levdim (ndim_3d)
06903        Double Precision, Intent (In)    :: period
06904        Double Precision, Intent (In)    :: array(corner_shape(1,1):
06905                                                  corner_shape(2,1),
06906                                                  corner_shape(1,2):
06907                                                  corner_shape(2,2),
06908                                                  corner_shape(1,3):
06909                                                  corner_shape(2,3),
06910                                                  nbr_corners)
06911        Double Precision, Intent (In)    :: chmin (0:levdim(1), 0:levdim(2), 
06912                                                   0:levdim(3))
06913        Double Precision, Intent (In)    :: chmax (0:levdim(1), 0:levdim(2), 
06914                                                   0:levdim(3))
06915        Integer, Intent (In)             :: grid_id, ind
06916        Integer, Intent (Out)            :: ierror
06917     End Subroutine
06918 
06919     subroutine psmile_mg_first_level_dble (grid_id, range, &
06920                     mg_info, tol, simplified_grid, ierror)
06921        Use PSMILe_common
06922        Integer,          Intent (In)    :: grid_id
06923        Integer,          Intent (In)    :: range (2, ndim_3d)
06924        Type (Enddef_mg), Intent (InOut) :: mg_info
06925        Real (PSMILe_float_kind), Intent (In)   :: tol
06926        Logical,          Intent (In)    :: simplified_grid
06927        Integer,          Intent (Out)   :: ierror
06928     End Subroutine
06929 
06930     subroutine psmile_mg_first_subgrid_1d_dble (         &
06931                     array, idlow, idhigh, nbr_corners,   &
06932                            range,                        &
06933                     chmin, chmax, midp,                  &
06934                     levdim, ierror)
06935        Integer, Intent (In)            :: idlow, idhigh, nbr_corners
06936        Integer, Intent (In)            :: range (2)
06937        Integer, Intent (In)            :: levdim
06938        Double Precision, Intent (In)   :: array (idlow:idhigh, nbr_corners)
06939        Double Precision, Intent (Out)  :: chmin (0:levdim)
06940        Double Precision, Intent (Out)  :: chmax (0:levdim)
06941        Double Precision, Intent (Out)  :: midp  (0:levdim)
06942        Integer, Intent (Out)           :: ierror
06943     End Subroutine
06944 
06945     subroutine psmile_mg_first_subgrid_2d_dble (array, &
06946                     idlow, idhigh, jdlow, jdhigh, nbr_corners,   &
06947                            range,                        &
06948                     chmin, chmax, midp,                  &
06949                     levdim1, levdim2, ierror)
06950        Integer, Intent (In)            :: idlow, idhigh, jdlow, jdhigh
06951        Integer, Intent (In)            :: nbr_corners
06952        Integer, Intent (In)            :: range (2, 2)
06953        Integer, Intent (In)            :: levdim1, levdim2
06954        Double Precision, Intent (In)   :: array (idlow:idhigh, jdlow:jdhigh, 
06955                                                  nbr_corners)
06956        Double Precision, Intent (Out)  :: chmin (0:levdim1, 0:levdim2)
06957        Double Precision, Intent (Out)  :: chmax (0:levdim1, 0:levdim2)
06958        Double Precision, Intent (Out)  :: midp  (0:levdim1, 0:levdim2)
06959        Integer, Intent (Out)           :: ierror
06960     End Subroutine
06961 
06962     subroutine psmile_mg_first_subgrid_3d_dble (array, &
06963                     idlow, idhigh, jdlow, jdhigh, kdlow, kdhigh, &
06964                     nbr_corners,   &
06965                            range,                        &
06966                     chmin, chmax, midp,                  &
06967                     levdim1, levdim2, levdim3, ierror)
06968        Use PSMILe_common
06969        Integer, Intent (In)            :: idlow, idhigh, jdlow, jdhigh
06970        Integer, Intent (In)            :: kdlow, kdhigh
06971        Integer, Intent (In)            :: nbr_corners
06972        Double Precision, Intent (In)   :: array (idlow:idhigh, jdlow:jdhigh, 
06973                                                  kdlow:kdhigh, nbr_corners)
06974        Integer, Intent (In)            :: range (2, ndim_3d)
06975        Integer, Intent (In)            :: levdim1, levdim2, levdim3
06976        Double Precision, Intent (Out)  :: chmin (0:levdim1, 0:levdim2, 0:levdim3)
06977        Double Precision, Intent (Out)  :: chmax (0:levdim1, 0:levdim2, 0:levdim3)
06978        Double Precision, Intent (Out)  :: midp  (0:levdim1, 0:levdim2, 0:levdim3)
06979        Integer, Intent (Out)           :: ierror
06980     End Subroutine
06981 
06982     subroutine psmile_mg_coars_level_dble (grid_id, mg_info_fine, &
06983                                      mg_info_coarse, &
06984                                      icoarse, ierror)
06985        Use PSMILe_common
06986        Integer, Intent (In)            :: grid_id
06987        Type (Enddef_mg), Intent (In)   :: mg_info_fine
06988        Type (Enddef_mg), Intent (InOut):: mg_info_coarse
06989        Integer, Intent (In)            :: icoarse (ndim_3d)
06990        Integer, Intent (Out)           :: ierror
06991     End Subroutine
06992 
06993     subroutine psmile_mg_coars_subgrid_3d_dble ( chfmin, chfmax, midfp, &
06994                              levdim1_fine, levdim2_fine, levdim3_fine, &
06995                                                 chcmin, chcmax, midcp, &
06996                                             levdim1, levdim2, levdim3, &
06997                                                 icoarse, ierror)
06998        Use PSMILe_common
06999        Integer, Intent (In)            :: levdim1_fine, levdim2_fine, 
07000                                           levdim3_fine
07001        Integer, Intent (In)            :: levdim1, levdim2, levdim3
07002        Double Precision, Intent (In)   :: chfmin (0:levdim1_fine,  
07003                                                   0:levdim2_fine,  
07004                                                   0:levdim3_fine)
07005        Double Precision, Intent (In)   :: chfmax (0:levdim1_fine,  
07006                                                   0:levdim2_fine,  
07007                                                   0:levdim3_fine)
07008        Double Precision, Intent (In)   ::  midfp (0:levdim1_fine,  
07009                                                   0:levdim2_fine,  
07010                                                   0:levdim3_fine)
07011        Double Precision, Intent (Out)  :: chcmin (0:levdim1, 0:levdim2, 
07012                                                   0:levdim3)
07013        Double Precision, Intent (Out)  :: chcmax (0:levdim1, 0:levdim2, 
07014                                                   0:levdim3)
07015        Double Precision, Intent (Out)  ::  midcp (0:levdim1, 0:levdim2, 
07016                                                   0:levdim3)
07017        Integer, Intent (In)            :: icoarse (ndim_3d)
07018        Integer, Intent (Out)           :: ierror
07019     End Subroutine
07020 
07021     subroutine psmile_mg_get_cyclic_dble (grid_id, range, &
07022                                           tol, ierror)
07023        Use PSMILe_common
07024 
07025        Integer, Intent (In)               :: grid_id
07026        Integer, Intent (In)               :: range (2, ndim_3d)
07027        Double Precision, Intent (In)      :: tol
07028        Integer, Intent (Out)              :: ierror
07029     End Subroutine
07030 
07031     subroutine psmile_neigh_extra_search_dble (search, extra_search, &
07032                                                nb_extra, ierror)
07033        Use PSMILe_common
07034 
07035        Type (Enddef_search),     Intent (In)    :: search
07036        Type (Extra_search_info), Intent (InOut) :: extra_search
07037        Integer,                  Intent (In)    :: nb_extra
07038        Integer,                  Intent (Out)   :: ierror
07039     End Subroutine
07040 
07041     subroutine psmile_send_req_coords_dble (msg_intersections, &
07042                                             dest, tag, ierror)
07043        use psmile_common, only : enddef_msg_intersections
07044 
07045        Integer, Intent (In)                         :: dest, tag
07046        Type (enddef_msg_intersections), Intent (In) :: msg_intersections
07047        Integer, Intent (Out)                        :: ierror
07048     End Subroutine
07049 
07050     subroutine psmile_send_req_corners_dble (msg_intersections, &
07051                                              dest, tag, ierror)
07052        use psmile_common, only : enddef_msg_intersections
07053 
07054        Integer, Intent (In)                         :: dest, tag
07055        Type (enddef_msg_intersections), Intent (In) :: msg_intersections
07056        Integer, Intent (Out)                        :: ierror
07057     End Subroutine
07058 
07059     subroutine psmile_recv_req_coords_dble (sender, tag, search, &
07060                                             recv_req, recv_mask, new_search, &
07061                                             ierror)
07062        Use PSMILe_common
07063        Integer, Intent (In)                 :: sender, tag
07064        Logical, Intent (In)                 :: recv_mask, new_search
07065        Type (Enddef_search), Intent (InOut) :: search
07066        Integer, Intent (Out)                :: recv_req (ndim_3d+2, *)
07067        Integer, Intent (Out)                :: ierror
07068     End Subroutine
07069 
07070     subroutine psmile_recv_req_corners_dble (sender, tag,      &
07071                                              search, recv_req, &
07072                                              recv_mask, new_search, &
07073                                              ierror)
07074        Use PSMILe_common
07075        Integer, Intent (In)                 :: sender, tag
07076        Logical, Intent (In)                 :: recv_mask, new_search
07077        Type (Enddef_search), Intent (InOut) :: search
07078        Integer, Intent (Out)                :: recv_req (ndim_3d+2, *)
07079        Integer, Intent (Out)                :: ierror
07080     End Subroutine
07081 
07082     subroutine psmile_search_donor_1d_dble (grid_id, idim, found, &
07083                                             locations, coords, len, &
07084                                             tol, ierror)
07085        Use PSMILe_common
07086 
07087        Integer, Intent (In)            :: grid_id
07088        Integer, Intent (In)            :: idim
07089        Integer, Intent (In)            :: len
07090        Integer, Intent (InOut)         :: found (len)
07091        Integer, Intent (InOut)         :: locations (len)
07092        Double Precision, Intent (In)   :: coords (len)
07093        Double Precision, Intent (In)   :: tol
07094        Integer, Intent (Out)           :: ierror
07095     End Subroutine
07096 
07097     subroutine psmile_search_donor_2d_dble (found, &
07098                                             locations, len, &
07099                                             search, ipart, &
07100                                             grid_id, method_id, var_id, &
07101                                             tol, ierror)
07102        Use PSMILe_common
07103 
07104        Integer, Intent (In)            :: len
07105        Integer, Intent (InOut)         :: found (len)
07106        Integer, Intent (InOut)         :: locations (ndim_2d, len)
07107        Type (Enddef_search)            :: search
07108        Integer, Intent (In)            :: ipart
07109        Integer, Intent (In)            :: grid_id, method_id, var_id
07110        Double Precision, Intent (In)   :: tol
07111        Integer, Intent (Out)           :: ierror
07112     End Subroutine
07113 
07114     subroutine psmile_search_donor_3d_dble (comp_info, found, &
07115                                             locations, len, search, &
07116                                             field_list, n_vars, &
07117                                             grid_id, method_id, var_id, &
07118                                             tol, ierror)
07119        Use PSMILe_common
07120 
07121        Type (Enddef_comp), Intent (In) :: comp_info
07122        Type (integer_vector)           :: found (*)
07123        Type (integer_vector)           :: locations (*)
07124        Integer, Intent (In)            :: len (*)
07125        Type (Enddef_search)            :: search
07126        Integer, Intent (In)            :: grid_id
07127        Integer, Intent (InOut)         :: method_id, var_id
07128        Integer, Intent (In)            :: n_vars
07129        Integer, Intent (In)            :: field_list (nd_field_list, n_vars)
07130        Double Precision, Intent (In)   :: tol
07131        Integer, Intent (Out)           :: ierror
07132     End Subroutine
07133 
07134     subroutine psmile_search_donor_3d_reg_dble (comp_info,   &
07135                                             found, locations, len, &
07136                                             search, field_list, n_vars, &
07137                                             grid_id, method_id, var_id, &
07138                                             tol, ierror)
07139        Use PSMILe_common
07140 
07141        Type (Enddef_comp),    Intent (In)    :: comp_info
07142        Type (Enddef_search)                  :: search
07143        Type (integer_vector), Intent (InOut) :: found (ndim_3d, *)
07144        Type (integer_vector), Intent (InOut) :: locations (ndim_3d, *)
07145        Integer, Intent (In)            :: len (search%npart)
07146        Integer, Intent (In)            :: grid_id
07147        Integer, Intent (InOut)         :: method_id, var_id
07148        Integer, Intent (In)            :: n_vars
07149        Integer, Intent (In)            :: field_list (nd_field_list, n_vars)
07150        Double Precision, Intent (In)   :: tol
07151        Integer, Intent (Out)           :: ierror
07152     End Subroutine
07153 
07154     subroutine psmile_search_donor_gauss2_dble (comp_info, found, &
07155                                             locations, len, search, &
07156                                             field_list, n_vars, &
07157                                             grid_id, method_id, var_id, &
07158                                             tol, ierror)
07159        Use PSMILe_common
07160 
07161        Type (Enddef_comp), Intent (In) :: comp_info
07162        Type (Enddef_search)            :: search
07163        Type (integer_vector)           :: found (search%npart, 2)
07164        Type (integer_vector)           :: locations (search%npart, 2)
07165        Integer, Intent (In)            :: len (search%npart, 2)
07166        Integer, Intent (In)            :: grid_id
07167        Integer, Intent (InOut)         :: method_id, var_id
07168        Integer, Intent (In)            :: n_vars
07169        Integer, Intent (In)            :: field_list (nd_field_list, n_vars)
07170        Double Precision, Intent (In)   :: tol
07171        Integer, Intent (Out)           :: ierror
07172     End Subroutine
07173 
07174     subroutine psmile_search_donor_irreg2_dble (comp_info, found,     &
07175                       locations, len, search,                         &
07176                       field_list, n_vars, grid_id, method_id, var_id, &
07177                       tol, ierror)
07178        Use PSMILe_common
07179 
07180        Type (Enddef_comp), Intent (In) :: comp_info
07181        Type (Enddef_search)            :: search
07182        Type (integer_vector)           :: found (search%npart, 2)
07183        Type (integer_vector)           :: locations (search%npart, 2)
07184        Integer, Intent (In)            :: len (search%npart, 2)
07185        Integer, Intent (In)            :: grid_id
07186        Integer, Intent (InOut)         :: method_id, var_id
07187        Integer, Intent (In)            :: n_vars
07188        Integer, Intent (In)            :: field_list (nd_field_list, n_vars)
07189        Double Precision,   Intent (In) :: tol
07190        Integer, Intent (Out)           :: ierror
07191     End Subroutine
07192 
07193     subroutine psmile_search_donor_nnx_dble (comp_info, search, var_id, &
07194                       coords1, coords2, coords3, distance,              &
07195                       nfound, locations, n_send, nb_extra,              &
07196                       tol, ierror)
07197        Use PSMILe_common
07198 
07199        Type (Enddef_comp),          Intent (In)    :: comp_info
07200        Integer,                     Intent (In)    :: var_id
07201        Integer,                     Intent (In)    :: n_send
07202        Integer,                     Intent (In)    :: nb_extra
07203        Double Precision,            Intent (In)    :: coords1 (n_send)
07204        Double Precision,            Intent (In)    :: coords2 (n_send)
07205        Double Precision,            Intent (In)    :: coords3 (n_send)
07206        Double Precision,            Intent (InOut) :: distance (n_send)
07207        Double Precision,            Intent (In)    :: tol
07208        Type (Enddef_global_search), Intent (InOut) :: search
07209        Integer,                     Intent (InOut) :: nfound (n_send)
07210        Integer,                     Intent (Out)   :: locations (ndim_3d, n_send)
07211        Integer,                     Intent (Out)   :: ierror
07212     End Subroutine
07213 
07214     subroutine psmile_search_nn_3d_dble (                         &
07215                       sin_search, cos_search, z_search, distance, &
07216                       nfound, locations, n_send,                  &
07217                       x_coords, y_coords, z_coords, coords_shape, &
07218                       sin_values, cos_values, grid_valid_shape,   &
07219                       mask_array, mask_shape, mask_available,     &
07220                       tol, ierror)
07221        Use PSMILe_common
07222 
07223        Integer,                     Intent (In)    :: n_send
07224        Double Precision,            Intent (In)    :: sin_search (n_send, 2)
07225        Double Precision,            Intent (In)    :: cos_search (n_send, 2)
07226        Double Precision,            Intent (In)    :: z_search (n_send)
07227        Integer,                     Intent (In)    :: coords_shape (2, ndim_3d)
07228        Double Precision,            Intent (In)    ::    
07229           x_coords (coords_shape(1,1):coords_shape(2,1), 
07230                     coords_shape(1,2):coords_shape(2,2), 
07231                     coords_shape(1,3):coords_shape(2,3))
07232        Double Precision,            Intent (In)    ::    
07233           y_coords (coords_shape(1,1):coords_shape(2,1), 
07234                     coords_shape(1,2):coords_shape(2,2), 
07235                     coords_shape(1,3):coords_shape(2,3))
07236        Double Precision,            Intent (In)    ::    
07237           z_coords (coords_shape(1,1):coords_shape(2,1), 
07238                     coords_shape(1,2):coords_shape(2,2), 
07239                     coords_shape(1,3):coords_shape(2,3))
07240 
07241        Integer,                     Intent (In)    :: mask_shape (2, ndim_3d)
07242        Logical,                     Intent (In)    ::    
07243           mask_array (mask_shape (1,1):mask_shape (2,1), 
07244                       mask_shape (1,2):mask_shape (2,2), 
07245                       mask_shape (1,3):mask_shape (2,3))
07246        Logical,                     Intent (In)    :: mask_available
07247        Integer,                     Intent (In)    :: 
07248           grid_valid_shape (2, ndim_3d)
07249 
07250        Double Precision,            Intent (In)   ::               
07251           sin_values (grid_valid_shape(1,1):grid_valid_shape(2,1), 
07252                       grid_valid_shape(1,2):grid_valid_shape(2,2), 2)
07253        Double Precision,            Intent (In)   ::               
07254           cos_values (grid_valid_shape(1,1):grid_valid_shape(2,1), 
07255                       grid_valid_shape(1,2):grid_valid_shape(2,2), 2)
07256        Double Precision,            Intent (In)    :: tol
07257        Double Precision,            Intent (InOut) :: distance (n_send)
07258        Integer,                     Intent (InOut) :: nfound (n_send)
07259        Integer,                     Intent (Out)   :: locations (ndim_3d, n_send)
07260        Integer,                     Intent (Out)   :: ierror
07261     End Subroutine
07262 
07263     subroutine psmile_search_nn_3d_reg_dble (                     &
07264                       sin_search, cos_search, z_search, distance, &
07265                       nfound, locations, n_send,                  &
07266                       x_coords, y_coords, z_coords, coords_shape, &
07267                       sin_values_lon, cos_values_lon,             &
07268                       sin_values_lat, cos_values_lat,             &
07269                       grid_valid_shape,                           &
07270                       mask_array, mask_shape, mask_available,     &
07271                       tol, ierror)
07272        Use PSMILe_common
07273 
07274        Integer,                     Intent (In)    :: n_send
07275        Double Precision,            Intent (In)    :: sin_search (n_send, 2)
07276        Double Precision,            Intent (In)    :: cos_search (n_send, 2)
07277        Double Precision,            Intent (In)    :: z_search (n_send)
07278        Integer,                     Intent (In)    :: coords_shape (2, ndim_3d)
07279        Double Precision,            Intent (In)    ::    
07280           x_coords (coords_shape(1,1):coords_shape(2,1))
07281        Double Precision,            Intent (In)    ::    
07282           y_coords (coords_shape(1,1):coords_shape(2,1))
07283        Double Precision,            Intent (In)    ::    
07284           z_coords (coords_shape(1,3):coords_shape(2,3))
07285 
07286        Integer,                     Intent (In)    :: mask_shape (2, ndim_3d)
07287        Logical,                     Intent (In)    ::    
07288           mask_array (mask_shape (1,1):mask_shape (2,1), 
07289                       mask_shape (1,2):mask_shape (2,2), 
07290                       mask_shape (1,3):mask_shape (2,3))
07291        Logical,                     Intent (In)    :: mask_available
07292        Integer,                     Intent (In)    :: 
07293           grid_valid_shape (2, ndim_3d)
07294 
07295        Double Precision,            Intent (In)    ::                  
07296           sin_values_lon (grid_valid_shape(1,1):grid_valid_shape(2,1))
07297        Double Precision,            Intent (In)    ::                  
07298           cos_values_lon (grid_valid_shape(1,1):grid_valid_shape(2,1))
07299        Double Precision,            Intent (In)   ::                   
07300           sin_values_lat (grid_valid_shape(1,2):grid_valid_shape(2,2))
07301        Double Precision,            Intent (In)   ::                   
07302           cos_values_lat (grid_valid_shape(1,2):grid_valid_shape(2,2))
07303        Double Precision,            Intent (In)    :: tol
07304        Double Precision,            Intent (InOut) :: distance (n_send)
07305        Integer,                     Intent (InOut) :: nfound (n_send)
07306        Integer,                     Intent (Out)   :: locations (ndim_3d, n_send)
07307        Integer,                     Intent (Out)   :: ierror
07308     End Subroutine
07309 
07310     subroutine psmile_search_nn_irreg2_dble (                     &
07311                       sin_search, cos_search, z_search, distance, &
07312                       nfound, locations, n_send,                  &
07313                       x_coords, y_coords, z_coords, coords_shape, &
07314                       sin_values, cos_values, grid_valid_shape,   &
07315                       mask_array, mask_shape, mask_available,     &
07316                       tol, ierror)
07317        Use PSMILe_common
07318 
07319        Integer,                     Intent (In)    :: n_send
07320        Double Precision,            Intent (In)    :: sin_search (n_send, 2)
07321        Double Precision,            Intent (In)    :: cos_search (n_send, 2)
07322        Double Precision,            Intent (In)    :: z_search (n_send)
07323        Integer,                     Intent (In)    :: coords_shape (2, ndim_3d)
07324        Double Precision,            Intent (In)    :: x_coords(  
07325                                                         coords_shape(1,1):coords_shape(2,1), 
07326                                                         coords_shape(1,2):coords_shape(2,2))
07327        Double Precision,            Intent (In)    :: y_coords(  
07328                                                         coords_shape(1,1):coords_shape(2,1), 
07329                                                         coords_shape(1,2):coords_shape(2,2))
07330        Double Precision,            Intent (In)    :: z_coords(  
07331                                                         coords_shape(1,3):coords_shape(2,3))
07332 
07333        Integer,                     Intent (In)    :: mask_shape (2, ndim_3d)
07334        Logical,                     Intent (In)    :: mask_array ( 
07335                                                         mask_shape (1,1):mask_shape (2,1), 
07336                                                         mask_shape (1,2):mask_shape (2,2), 
07337                                                         mask_shape (1,3):mask_shape (2,3))
07338        Logical,                     Intent (In)    :: mask_available
07339        Integer,                     Intent (In)    :: grid_valid_shape (2, ndim_3d)
07340 
07341        Double Precision,            Intent (In)   ::               
07342           sin_values (grid_valid_shape(1,1):grid_valid_shape(2,1), 
07343                       grid_valid_shape(1,2):grid_valid_shape(2,2), 2)
07344        Double Precision,            Intent (In)   ::               
07345           cos_values (grid_valid_shape(1,1):grid_valid_shape(2,1), 
07346                       grid_valid_shape(1,2):grid_valid_shape(2,2), 2)
07347        Double Precision,            Intent (In)    :: tol
07348        Double Precision,            Intent (InOut) :: distance (n_send)
07349        Integer,                     Intent (InOut) :: nfound (n_send)
07350        Integer,                     Intent (Out)   :: locations (ndim_3d, n_send)
07351        Integer,                     Intent (Out)   :: ierror
07352     End Subroutine
07353 
07354     subroutine psmile_store_faces_3d_dble (indices_req, required,     &
07355                     nreq,                                             &
07356                     tgt_coords1, tgt_coords2, tgt_coords3, ncpl,      &
07357                     corners1, corners2, corners3,                     &
07358                     corner_shape, nbr_corners, grid_valid_shape,      &
07359                     send_mask, srcloc_ind,                            &
07360                     ibuf, len_item, ndibuf, ipia,                     &
07361                      buf, len_rtem, ndrbuf, ipa, ierror)
07362        Use PSMILe_common
07363 
07364        Integer,                  Intent (In)  :: nreq, ncpl
07365        Integer,                  Intent (In)  :: indices_req (nreq)
07366        Integer,                  Intent (In)  :: required    (nreq)
07367        Integer,                  Intent (In)  :: nbr_corners
07368        Integer,                  Intent (In)  :: corner_shape (2, ndim_3d)
07369        Integer,                  Intent (In)  :: grid_valid_shape (2, ndim_3d)
07370        Double Precision,         Intent (In)  :: tgt_coords1 (ncpl)
07371        Double Precision,         Intent (In)  :: tgt_coords2 (ncpl)
07372        Double Precision,         Intent (In)  :: tgt_coords3 (ncpl)
07373        Double Precision,         Intent (In)  :: 
07374           corners1 ( corner_shape(1,1):corner_shape(2,1), 
07375                      corner_shape(1,2):corner_shape(2,2), 
07376                      corner_shape(1,3):corner_shape(2,3), nbr_corners)
07377        Double Precision,         Intent (In)  :: 
07378           corners2 ( corner_shape(1,1):corner_shape(2,1), 
07379                      corner_shape(1,2):corner_shape(2,2), 
07380                      corner_shape(1,3):corner_shape(2,3), nbr_corners)
07381        Double Precision,         Intent (In)  :: 
07382           corners3 ( corner_shape(1,1):corner_shape(2,1), 
07383                      corner_shape(1,2):corner_shape(2,2), 
07384                      corner_shape(1,3):corner_shape(2,3), nbr_corners)
07385        Logical,                  Intent (In)  :: send_mask (nreq)
07386        Integer,                  Intent (In)  :: len_item, len_rtem, ndibuf, ndrbuf
07387        Integer,                  Intent (In)  :: srcloc_ind (ndim_3d, ndibuf)
07388        Double Precision,         Intent (InOut) ::  buf (len_rtem, ndrbuf)
07389        Integer,                  Intent (InOut) :: ibuf (len_item, ndibuf)
07390        Integer,                  Intent (InOut) :: ipa, ipia
07391        Integer,                  Intent (Out) :: ierror
07392     End Subroutine
07393 
07394     subroutine psmile_store_faces_3d_reg_dble (indices_req, required, &
07395                     nreq,                                             &
07396                     tgt_coords1, tgt_coords2, tgt_coords3, ncpl,      &
07397                     corners1, corners2, corners3,                     &
07398                     corner_shape, nbr_corners, grid_valid_shape,      &
07399                     send_mask, srcloc_ind,                            &
07400                     ibuf, len_item, ndibuf, ipia,                     &
07401                      buf, len_rtem, ndrbuf, ipa, ierror)
07402        Use PSMILe_common
07403 
07404        Integer,                  Intent (In)  :: nreq, ncpl
07405        Integer,                  Intent (In)  :: indices_req (nreq)
07406        Integer,                  Intent (In)  :: required    (nreq)
07407        Integer,                  Intent (In)  :: nbr_corners
07408        Integer,                  Intent (In)  :: corner_shape (2, ndim_3d)
07409        Integer,                  Intent (In)  :: grid_valid_shape (2, ndim_3d)
07410        Double Precision,         Intent (In)  :: tgt_coords1 (ncpl)
07411        Double Precision,         Intent (In)  :: tgt_coords2 (ncpl)
07412        Double Precision,         Intent (In)  :: tgt_coords3 (ncpl)
07413        Double Precision,         Intent (In)  :: 
07414           corners1 ( corner_shape(1,1):corner_shape(2,1), 2)
07415        Double Precision,         Intent (In)  :: 
07416           corners2 ( corner_shape(1,2):corner_shape(2,2), 2)
07417        Double Precision,         Intent (In)  :: 
07418           corners3 ( corner_shape(1,3):corner_shape(2,3), 2)
07419        Logical,                  Intent (In)  :: send_mask (nreq)
07420        Integer,                  Intent (In)  :: len_item, len_rtem, ndibuf, ndrbuf
07421        Integer,                  Intent (In)  :: srcloc_ind (ndim_3d, ndibuf)
07422        Double Precision,         Intent (InOut) ::  buf (len_rtem, ndrbuf)
07423        Integer,                  Intent (InOut) :: ibuf (len_item, ndibuf)
07424        Integer,                  Intent (InOut) :: ipa, ipia
07425        Integer,                  Intent (Out) :: ierror
07426     End Subroutine
07427 
07428     subroutine psmile_store_faces_gauss2_dble (indices_req,      &
07429                       required, nreq,                              &
07430                       tgt_coords1, tgt_coords2, tgt_coords3, ncpl, &
07431                       corners1, corners2, corners3, corner_shape,  &
07432                       nbr_corners, grid_id, grid_valid_shape,      &
07433                       send_mask, srcloc_ind,                       &
07434                       virtual_ind, virtual_cell_available,         &
07435                       ibuf, len_item, ndibuf, ipia,                &
07436                       buf,  len_rtem, ndrbuf, ipa, ierror)
07437       Use PSMILe_common
07438 
07439       Integer,           Intent (In)    :: nreq
07440       Integer,           Intent (In)    :: indices_req (nreq)
07441       Integer,           Intent (In)    :: required    (nreq)
07442       Integer,           Intent (In)    :: corner_shape (2, ndim_3d)
07443       Integer,           Intent (In)    :: nbr_corners
07444       Integer,           Intent (In)    :: grid_id
07445       Integer,           Intent (In)    :: grid_valid_shape (2, ndim_3d)
07446       Integer,           Intent (In)    :: ncpl
07447       Double Precision,  Intent (In)    :: tgt_coords1 (ncpl)
07448       Double Precision,  Intent (In)    :: tgt_coords2 (ncpl)
07449       Double Precision,  Intent (In)    :: tgt_coords3 (ncpl)
07450       Double Precision,  Intent (In)    :: corners1 ( corner_shape(1,1):corner_shape(2,1), 2)
07451       Double Precision,  Intent (In)    :: corners2 ( corner_shape(1,1):corner_shape(2,1), 2)
07452       Double Precision,  Intent (In)    :: corners3 ( corner_shape(1,3):corner_shape(2,3), 2)
07453       Logical,           Intent (In)    :: send_mask (nreq)
07454       Integer,           Intent (In)    :: ndibuf
07455       Integer,           Intent (In)    :: srcloc_ind (ndim_3d, ndibuf)
07456       Integer,           Intent (In)    :: virtual_ind (ndibuf)
07457       Logical,           Intent (In)    :: virtual_cell_available
07458       Integer,           Intent (In)    :: len_item
07459       Integer,           Intent (In)    :: ndrbuf
07460       Integer,           Intent (In)    :: len_rtem
07461       Double Precision,  Intent (InOut) :: buf (len_rtem, ndrbuf)
07462       Integer,           Intent (InOut) :: ipa
07463       Integer,           Intent (InOut) :: ibuf (len_item, ndibuf)
07464       Integer,           Intent (InOut) :: ipia
07465       Integer,           Intent (Out)   :: ierror
07466     End Subroutine
07467 
07468     subroutine psmile_store_faces_irreg2_dble (indices_req, required, &
07469                     nreq,                                             &
07470                     tgt_coords1, tgt_coords2, tgt_coords3, ncpl,      &
07471                     corners1, corners2, corners3,                     &
07472                     corner_shape, nbr_corners, grid_valid_shape,      &
07473                     send_mask, srcloc_ind,                            &
07474                     ibuf, len_item, ndibuf, ipia,                     &
07475                      buf, len_rtem, ndrbuf, ipa, ierror)
07476        Use PSMILe_common
07477 
07478        Integer,                  Intent (In)  :: nreq, ncpl
07479        Integer,                  Intent (In)  :: indices_req (nreq)
07480        Integer,                  Intent (In)  :: required    (nreq)
07481        Integer,                  Intent (In)  :: nbr_corners
07482        Integer,                  Intent (In)  :: corner_shape     (2, ndim_3d)
07483        Integer,                  Intent (In)  :: grid_valid_shape (2, ndim_3d)
07484        Double Precision,         Intent (In)  :: tgt_coords1 (ncpl)
07485        Double Precision,         Intent (In)  :: tgt_coords2 (ncpl)
07486        Double Precision,         Intent (In)  :: tgt_coords3 (ncpl)
07487        Double Precision,         Intent (In)  :: 
07488           corners1 ( corner_shape(1,1):corner_shape(2,1), 
07489                      corner_shape(1,2):corner_shape(2,2), nbr_corners/2)
07490        Double Precision,         Intent (In)  :: 
07491           corners2 ( corner_shape(1,1):corner_shape(2,1), 
07492                      corner_shape(1,2):corner_shape(2,2), nbr_corners/2)
07493        Double Precision,         Intent (In)  :: 
07494           corners3 ( corner_shape(1,3):corner_shape(2,3), 2)
07495        Logical,                  Intent (In)  :: send_mask (nreq)
07496        Integer,                  Intent (In)  :: len_item, len_rtem
07497        Integer,                  Intent (In)  :: ndibuf, ndrbuf
07498        Integer,                  Intent (In)  :: srcloc_ind (ndim_3d, ndibuf)
07499 !
07500        Double Precision,         Intent (InOut) ::  buf (len_rtem, ndrbuf)
07501        Integer,                  Intent (InOut) :: ibuf (len_item, ndibuf)
07502        Integer,                  Intent (InOut) :: ipa, ipia
07503        Integer,                  Intent (Out)   :: ierror
07504     End Subroutine
07505 
07506     subroutine psmile_trf_lonlat_1d_dble (x_coords, y_coords,        &
07507                                           coords_shape, grid_valid_shape, &
07508                                           sin_values_lon, cos_values_lon, &
07509                                           sin_values_lat, cos_values_lat, ierror)
07510        Use PSMILe_common
07511 
07512        Integer, Intent (In)            :: coords_shape (2, ndim_2d)
07513        Integer, Intent (In)            :: grid_valid_shape (2, ndim_2d)
07514 
07515        Double Precision, Intent (In)   :: x_coords(coords_shape(1,1): 
07516                                                    coords_shape(2,1))
07517        Double Precision, Intent (In)   :: y_coords(coords_shape(1,2): 
07518                                                    coords_shape(2,2))
07519        Double Precision, Intent (Out)  :: sin_values_lon (grid_valid_shape(1,1):
07520                                                           grid_valid_shape(2,1))
07521        Double Precision, Intent (Out)  :: sin_values_lat (grid_valid_shape(1,2):
07522                                                           grid_valid_shape(2,2))
07523        Double Precision, Intent (Out)  :: cos_values_lon (grid_valid_shape(1,1):
07524                                                           grid_valid_shape(2,1))
07525        Double Precision, Intent (Out)  :: cos_values_lat (grid_valid_shape(1,2):
07526                                                           grid_valid_shape(2,2))
07527        Integer, Intent (Out)           :: ierror
07528     End Subroutine
07529 
07530     subroutine psmile_trf_lonlat_2d_dble (x_coords, y_coords,        &
07531                                           coords_shape, grid_valid_shape, &
07532                                           sin_values, cos_values, ierror)
07533        Use PSMILe_common
07534 
07535        Integer, Intent (In)            :: coords_shape (2, ndim_2d)
07536        Integer, Intent (In)            :: grid_valid_shape (2, ndim_2d)
07537 
07538        Double Precision, Intent (In)   :: x_coords(coords_shape(1,1): 
07539                                                    coords_shape(2,1), 
07540                                                    coords_shape(1,2): 
07541                                                    coords_shape(2,2))
07542        Double Precision, Intent (In)   :: y_coords(coords_shape(1,1): 
07543                                                    coords_shape(2,1), 
07544                                                    coords_shape(1,2): 
07545                                                    coords_shape(2,2))
07546        Double Precision, Intent (Out)  :: sin_values (grid_valid_shape(1,1): 
07547                                                       grid_valid_shape(2,1), 
07548                                                       grid_valid_shape(1,2): 
07549                                                       grid_valid_shape(2,2), 
07550                                                       2)
07551        Double Precision, Intent (Out)  :: cos_values (grid_valid_shape(1,1): 
07552                                                       grid_valid_shape(2,1), 
07553                                                       grid_valid_shape(1,2): 
07554                                                       grid_valid_shape(2,2), 
07555                                                       2)
07556        Integer, Intent (Out)           :: ierror
07557     End Subroutine
07558 
07559     subroutine psmile_trf_lonlat_3d_dble (x_coords, y_coords,             &
07560                                           coords_shape, grid_valid_shape, &
07561                                           sin_values, cos_values, ierror)
07562        Use PSMILe_common
07563 
07564        Integer, Intent (In)            :: coords_shape (2, ndim_3d)
07565        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
07566 
07567        Double Precision, Intent (In)   :: x_coords(coords_shape(1,1): 
07568                                                    coords_shape(2,1), 
07569                                                    coords_shape(1,2): 
07570                                                    coords_shape(2,2), 
07571                                                    coords_shape(1,3): 
07572                                                    coords_shape(2,3))
07573        Double Precision, Intent (In)   :: y_coords(coords_shape(1,1): 
07574                                                    coords_shape(2,1), 
07575                                                    coords_shape(1,2): 
07576                                                    coords_shape(2,2), 
07577                                                    coords_shape(1,3): 
07578                                                    coords_shape(2,3))
07579        Double Precision, Intent (Out)  :: sin_values (grid_valid_shape(1,1): 
07580                                                       grid_valid_shape(2,1), 
07581                                                       grid_valid_shape(1,2): 
07582                                                       grid_valid_shape(2,2), 
07583                                                       grid_valid_shape(1,3): 
07584                                                       grid_valid_shape(2,3), 
07585                                                       2)
07586        Double Precision, Intent (Out)  :: cos_values (grid_valid_shape(1,1): 
07587                                                       grid_valid_shape(2,1), 
07588                                                       grid_valid_shape(1,2): 
07589                                                       grid_valid_shape(2,2), 
07590                                                       grid_valid_shape(1,3): 
07591                                                       grid_valid_shape(2,3), 
07592                                                       2)
07593        Integer, Intent (Out)           :: ierror
07594     End Subroutine
07595 
07596     subroutine psmile_info_coords_irreg2_dble (              &
07597                              x_coords, y_coords, z_coords,   &
07598                              coords_shape, grid_valid_shape, &
07599                              sinvec, cosvec, ierror)
07600        Use PSMILe_common
07601 
07602        Integer, Intent (In)            :: coords_shape (2, ndim_3d)
07603        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
07604 
07605        Double Precision, Intent (In)   :: x_coords(*)
07606        Double Precision, Intent (In)   :: y_coords(*)
07607        Double Precision, Intent (In)   :: z_coords(*)
07608 
07609        Type (dble_vector)              :: sinvec
07610        Type (dble_vector)              :: cosvec
07611        Integer, Intent (Out)           :: ierror
07612     End Subroutine
07613 
07614     subroutine psmile_info_coords_3d_reg_dble (              &
07615                              x_coords, y_coords, z_coords,   &
07616                              coords_shape, grid_valid_shape, &
07617                              sinvec, cosvec, ierror)
07618        Use PSMILe_common
07619 
07620        Integer, Intent (In)            :: coords_shape (2, ndim_3d)
07621        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
07622 
07623        Double Precision, Intent (In)   :: x_coords(*)
07624        Double Precision, Intent (In)   :: y_coords(*)
07625        Double Precision, Intent (In)   :: z_coords(*)
07626 
07627        Type (dble_vector)              :: sinvec (ndim_2d)
07628        Type (dble_vector)              :: cosvec (ndim_2d)
07629        Integer, Intent (Out)           :: ierror
07630     End Subroutine
07631 
07632     subroutine psmile_info_trf_coords_3d_dble (              &
07633                              x_coords, y_coords, z_coords,   &
07634                              coords_shape, grid_valid_shape, &
07635                              sinvec, cosvec, ierror)
07636        Use PSMILe_common
07637 
07638        Integer, Intent (In)            :: coords_shape (2, ndim_3d)
07639        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
07640 
07641        Double Precision, Intent (In)   :: x_coords(*)
07642        Double Precision, Intent (In)   :: y_coords(*)
07643        Double Precision, Intent (In)   :: z_coords(*)
07644 
07645        Type (dble_vector)              :: sinvec
07646        Type (dble_vector)              :: cosvec
07647        Integer, Intent (Out)           :: ierror
07648     End Subroutine
07649 
07650     subroutine psmile_info_trs_locs_3d_dble (comp_info,                 &
07651                                              coords, shape, control,    &
07652                                              len_cpl,                   &
07653                                              var_id, grid_valid_shape,  &
07654                                              search,                    &
07655                                              method_id, send_index,     &
07656                                              ierror)
07657        Use PSMILe_common
07658 
07659        Type (Enddef_comp), Intent (In)      :: comp_info
07660        Type (Enddef_search), Intent (InOut) :: search
07661        Type (dble_vector), Intent (In)      :: coords (ndim_3d, search%npart)
07662        Integer, Intent (In)                 :: shape (2, ndim_3d, search%npart)
07663        Integer, Intent (In)                 :: control (2, ndim_3d, search%npart)
07664        Integer, Intent (In)                 :: len_cpl (search%npart)
07665        Integer, Intent (In)                 :: var_id, method_id
07666        Integer, Intent (In)                 :: grid_valid_shape (2, ndim_3d)
07667        Integer, Intent (InOut)              :: send_index
07668        Integer, Intent (Out)                :: ierror
07669     End Subroutine
07670 
07671     subroutine psmile_info_trs_loc_3d_reg_dble (comp_info,              &
07672                                              coords, shape, control,    &
07673                                              len_cpl,                   &
07674                                              var_id, grid_valid_shape,  &
07675                                              search,                    &
07676                                              method_id, send_index,     &
07677                                              ierror)
07678        Use PSMILe_common
07679 
07680        Type (Enddef_comp), Intent (In)      :: comp_info
07681        Type (Enddef_search), Intent (InOut) :: search
07682        Type (dble_vector), Intent (In)      :: coords (ndim_3d, search%npart)
07683        Integer, Intent (In)                 :: shape (2, ndim_3d, search%npart)
07684        Integer, Intent (In)                 :: control (2, ndim_3d, search%npart)
07685        Integer, Intent (InOut)              :: len_cpl (search%npart)
07686        Integer, Intent (In)                 :: var_id, method_id
07687        Integer, Intent (In)                 :: grid_valid_shape (2, ndim_3d)
07688        Integer, Intent (InOut)              :: send_index
07689        Integer, Intent (Out)                :: ierror
07690     End Subroutine
07691 
07692     subroutine psmile_info_trs_loc_irreg2_dble (comp_info,              &
07693                                              coords, shape, control,    &
07694                                              len_cpl,                   &
07695                                              var_id, grid_valid_shape,  &
07696                                              search,                    &
07697                                              method_id, send_index,     &
07698                                              ierror)
07699        Use PSMILe_common
07700 
07701        Type (Enddef_comp), Intent (In)      :: comp_info
07702        Type (Enddef_search), Intent (InOut) :: search
07703        Type (dble_vector), Intent (In)      :: coords (ndim_3d, search%npart)
07704        Integer, Intent (In)                 :: shape (2, ndim_3d, search%npart)
07705        Integer, Intent (In)                 :: control (2, ndim_3d, search%npart)
07706        Integer, Intent (InOut)              :: len_cpl (search%npart)
07707        Integer, Intent (In)                 :: var_id, method_id
07708        Integer, Intent (In)                 :: grid_valid_shape (2, ndim_3d)
07709        Integer, Intent (InOut)              :: send_index
07710        Integer, Intent (Out)                :: ierror
07711     End Subroutine
07712 
07713     subroutine psmile_info_trs_loc_gauss2_dble (comp_info,                      &
07714                                              coords, shape, control, len_cpl,   &
07715                                              var_id, grid_valid_shape,          &
07716                                              search, method_id,                 &
07717                                              send_index, ierror)
07718        Use PSMILe_common
07719 
07720        Type (Enddef_comp), Intent (In)      :: comp_info
07721        Type (Enddef_search), Intent (InOut) :: search
07722        Type (dble_vector), Intent (In)      :: coords (ndim_3d, search%npart)
07723        Integer, Intent (In)                 :: shape (2, ndim_3d, search%npart)
07724        Integer, Intent (In)                 :: control (2, ndim_3d, search%npart)
07725        Integer, Intent (InOut)              :: len_cpl (search%npart)
07726        Integer, Intent (In)                 :: var_id, method_id
07727        Integer, Intent (In)                 :: grid_valid_shape (2, ndim_3d)
07728        Integer, Intent (InOut)              :: send_index
07729        Integer, Intent (Out)                :: ierror
07730     End Subroutine
07731 
07732     subroutine psmile_neigh_near_irreg2_dble (grid_id,     &
07733                coords1, coords2, coords3,                  &
07734                x_coords, y_coords, z_coords,               &
07735                coords_shape,                               &
07736                mask_array, mask_shape,  mask_available,    &
07737                sin_values, cos_values, grid_valid_shape,   &
07738                search_mode,                                &
07739                srcloc, srclocz, nlocs,                     &
07740                nloc, nprev,                                &
07741                neighbors_3d, num_neigh,                    &
07742                extra_search, ierror)
07743 
07744        Use PSMILe_common
07745 
07746        Integer, Intent (In)            :: grid_id
07747        Integer, Intent (In)            :: nloc, nprev, search_mode
07748        Integer, Intent (In)            :: nlocs (ndim_2d)
07749        Double Precision, Intent (In)   :: coords1 (nloc)
07750        Double Precision, Intent (In)   :: coords2 (nloc)
07751        Double Precision, Intent (In)   :: coords3 (nloc)
07752        Integer, Intent (In)            :: coords_shape (2, ndim_3d)
07753        Double Precision, Intent (In)   :: x_coords (*)
07754        Double Precision, Intent (In)   :: y_coords (*)
07755        Double Precision, Intent (In)   :: z_coords (*)
07756        Logical, Intent (In)            :: mask_array (*)
07757        Integer, Intent (In)            :: mask_shape (2, ndim_3d)
07758        Logical, Intent (In)            :: mask_available
07759        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
07760        Double Precision, Intent (In)   :: sin_values (*)
07761        Double Precision, Intent (In)   :: cos_values (*)
07762        Integer, Intent (In)            :: srcloc (ndim_2d, nloc)
07763        Integer, Intent (In)            :: srclocz (nloc)
07764        Integer, Intent (In)            :: num_neigh
07765        Integer, Intent (Out)           :: neighbors_3d (ndim_3d, nloc, num_neigh)
07766        Type (Extra_search_info)        :: extra_search
07767        Integer, Intent (Out)           :: ierror
07768     End Subroutine
07769 
07770     subroutine psmile_neigh_nearx_irreg2_dble (grid_id,    &
07771                coords1, coords2, coords3,                  &
07772                x_coords, y_coords, z_coords,               &
07773                coords_shape,                               &
07774                mask_array, mask_shape,  mask_available,    &
07775                sin_values, cos_values, grid_valid_shape,   &
07776                search_mode,                                &
07777                srcloc, srclocz, nlocs,                     &
07778                nloc, nprev,                                &
07779                neighbors_3d, num_neigh,                    &
07780                extra_search, ierror)
07781 
07782        Use PSMILe_common
07783 
07784        Integer, Intent (In)            :: grid_id
07785        Integer, Intent (In)            :: nloc, nprev, search_mode
07786        Integer, Intent (In)            :: nlocs (ndim_2d)
07787        Double Precision, Intent (In)   :: coords1 (nlocs(1)*nlocs(2))
07788        Double Precision, Intent (In)   :: coords2 (nlocs(1)*nlocs(2))
07789        Double Precision, Intent (In)   :: coords3 (nlocs(1)*nlocs(2))
07790        Integer, Intent (In)            :: coords_shape (2, ndim_3d)
07791        Double Precision, Intent (In)   :: x_coords (*)
07792        Double Precision, Intent (In)   :: y_coords (*)
07793        Double Precision, Intent (In)   :: z_coords (*)
07794        Logical, Intent (In)            :: mask_array (*)
07795        Integer, Intent (In)            :: mask_shape (2, ndim_3d)
07796        Logical, Intent (In)            :: mask_available
07797        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
07798        Double Precision, Intent (In)   :: sin_values (*)
07799        Double Precision, Intent (In)   :: cos_values (*)
07800        Integer, Intent (In)            :: srcloc (ndim_2d, nlocs(1))
07801        Integer, Intent (In)            :: srclocz (nlocs(2))
07802        Integer, Intent (In)            :: num_neigh
07803        Integer, Intent (Out)           :: neighbors_3d (ndim_3d, nloc, num_neigh)
07804        Type (Extra_search_info)        :: extra_search
07805        Integer, Intent (Out)           :: ierror
07806     End Subroutine
07807 
07808     subroutine psmile_neigh_cells_3d_dble ( use_how,        &
07809                grid_shape, interpolation_mode, cyclic,      &
07810                corner_shape_3d, nbr_corners,                &
07811                corner_x, corner_y, corner_z,                &
07812                search,  control, tgt_cell, tgt_corners,     &
07813                npoints, srclocs, msklocs, ncpl,             &
07814                num_neigh, nbr_cells, ierror )
07815 
07816       USE PSMILe_Common
07817 
07818       Integer, Intent (In)            :: use_how(3)
07819       Integer, Intent (In)            :: grid_shape (2, ndim_3d)
07820       Integer, Intent (In)            :: interpolation_mode
07821       Logical, Intent (In)            :: cyclic (ndim_3d)
07822       Integer, Intent (In)            :: corner_shape_3d (2,ndim_3d,ndim_3d)
07823       Integer, Intent (In)            :: nbr_corners(ndim_3d)
07824       Type (Enddef_search), Intent (InOut) :: search
07825       Integer, Intent (In)            :: control (2, ndim_3d, search%npart)
07826       Type (dble_vector), Intent (InOut) :: tgt_cell(ndim_3d)
07827       Integer, Intent (In)            :: tgt_corners(ndim_3d)
07828       Integer, Intent (In)            :: npoints
07829       Integer, Intent (In)            :: ncpl
07830       Integer, Intent (In)            :: srclocs (ndim_3d, npoints)
07831       Logical, Intent (In)            :: msklocs (npoints)
07832       Integer, Intent (In)            :: num_neigh
07833       Double Precision, Intent (In)   :: corner_x (corner_shape_3d (1,1,1):corner_shape_3d(2,1,1), 
07834                                                    corner_shape_3d (1,2,1):corner_shape_3d(2,2,1), 
07835                                                    corner_shape_3d (1,3,1):corner_shape_3d(2,3,1), 
07836                                                    nbr_corners(1))
07837 
07838       Double Precision, Intent (In)   :: corner_y (corner_shape_3d (1,1,2):corner_shape_3d(2,1,2), 
07839                                                    corner_shape_3d (1,2,2):corner_shape_3d(2,2,2), 
07840                                                    corner_shape_3d (1,3,2):corner_shape_3d(2,3,2), 
07841                                                    nbr_corners(2))
07842 
07843       Double Precision, Intent (In)   :: corner_z (corner_shape_3d (1,1,3):corner_shape_3d(2,1,3), 
07844                                                    corner_shape_3d (1,2,3):corner_shape_3d(2,2,3), 
07845                                                    corner_shape_3d (1,3,3):corner_shape_3d(2,3,3), 
07846                                                    nbr_corners(3))
07847       Integer, Intent (Out)           :: nbr_cells(ncpl)
07848       Integer, Intent (Out)           :: ierror
07849     End Subroutine
07850 
07851     subroutine psmile_neigh_cells_3d_reg_dble (      &
07852                grid_valid_shape, interpolation_mode, &
07853                cyclic, grid_id, search, corners,     &
07854                npoints, srclocs, ncpl, nbr_cells,    &
07855                ierror )
07856 
07857       USE PSMILe_Common
07858 
07859       Integer, Intent (In)               :: grid_valid_shape (2, ndim_3d)
07860       Integer,            Intent (In)    :: interpolation_mode
07861       Logical,            Intent (In)    :: cyclic (ndim_3d)
07862       Integer,            Intent (In)    :: grid_id
07863       Type (Enddef_search), Intent (In)  :: search
07864       Type (dble_vector), Intent (In)    :: corners (ndim_3d, search%npart)
07865       Integer, Intent (In)               :: npoints (ndim_3d, search%npart)
07866       Type (integer_vector), Intent (In) :: srclocs (ndim_3d, search%npart)
07867       Integer, Intent (In)               :: ncpl
07868       Integer, Intent (Out)              :: nbr_cells(ncpl)
07869       Integer, Intent (Out)              :: ierror
07870     End Subroutine
07871 
07872     subroutine psmile_neigh_cells_irreg2_dble ( use_how,        &
07873                grid_shape, interpolation_mode, cyclic,          &
07874                corner_shape_3d, nbr_corners,                    &
07875                corner_x, corner_y,                              &
07876                search,  control, tgt_cell, tgt_corners,         &
07877                npoints, srclocs, msklocs, ncpl,                 &
07878                num_neigh, nbr_cells, ierror )
07879 
07880       USE PSMILe_Common
07881 
07882       Integer, Intent (In)            :: use_how(3)
07883       Integer, Intent (In)            :: grid_shape (2, ndim_3d)
07884       Integer, Intent (In)            :: interpolation_mode
07885       Logical, Intent (In)            :: cyclic (ndim_3d)
07886       Integer, Intent (In)            :: corner_shape_3d(2,ndim_3d,ndim_3d)
07887       Integer, Intent (In)            :: nbr_corners(ndim_3d)
07888       Type (Enddef_search), Intent (InOut) :: search
07889       Integer, Intent (In)            :: control (2, ndim_3d, search%npart)
07890       Type (dble_vector), Intent (InOut) :: tgt_cell(ndim_3d)
07891       Integer, Intent (In)            :: tgt_corners
07892       Integer, Intent (In)            :: npoints (ndim_2d, search%npart)
07893       Integer, Intent (In)            :: ncpl
07894       Type (integer_vector), Intent (In) :: srclocs (2,search%npart)
07895       Type (logical_vector), Intent (In) :: msklocs (2,search%npart)
07896       Integer, Intent (In)            :: num_neigh
07897       Double Precision, Intent (In)   :: corner_x (corner_shape_3d (1,1,1):corner_shape_3d(2,1,1), 
07898                                                    corner_shape_3d (1,2,1):corner_shape_3d(2,2,1), 
07899                                                    nbr_corners(1))
07900       Double Precision, Intent (In)   :: corner_y (corner_shape_3d (1,1,2):corner_shape_3d(2,1,2), 
07901                                                    corner_shape_3d (1,2,2):corner_shape_3d(2,2,2), 
07902                                                    nbr_corners(2))
07903       Integer, Intent (Out)           :: nbr_cells(ncpl)
07904       Integer, Intent (Out)           :: ierror
07905     End Subroutine
07906 
07907     subroutine psmile_neigh_near_irr2_3d_dble (grid_id,  &
07908                coords1, coords2, coords3,                  &
07909                x_coords, y_coords, z_coords,               &
07910                coords_shape,                               &
07911                mask_array, mask_shape,  mask_available,    &
07912                sin_values, cos_values, grid_valid_shape,   &
07913                search_mode,                                &
07914                srcloc, nloc, nprev, nsearch,               &
07915                neighbors_3d, num_neigh,                    &
07916                extra_search, ierror)
07917 
07918        Use PSMILe_common
07919 
07920        Integer, Intent (In)            :: grid_id
07921        Integer, Intent (In)            :: nloc, nprev, nsearch, search_mode
07922        Double Precision, Intent (In)   :: coords1 (nloc)
07923        Double Precision, Intent (In)   :: coords2 (nloc)
07924        Double Precision, Intent (In)   :: coords3 (nloc)
07925        Integer, Intent (In)            :: coords_shape (2, ndim_3d)
07926        Double Precision, Intent (In)   :: x_coords (*)
07927        Double Precision, Intent (In)   :: y_coords (*)
07928        Double Precision, Intent (In)   :: z_coords (*)
07929        Logical, Intent (In)            :: mask_array (*)
07930        Integer, Intent (In)            :: mask_shape (2, ndim_3d)
07931        Logical, Intent (In)            :: mask_available
07932        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
07933        Double Precision, Intent (In)   :: sin_values (*)
07934        Double Precision, Intent (In)   :: cos_values (*)
07935        Integer, Intent (In)            :: srcloc (ndim_3d, nloc)
07936        Integer, Intent (In)            :: num_neigh
07937        Integer, Intent (Out)           :: neighbors_3d (ndim_3d, nloc, num_neigh)
07938        Type (Extra_search_info)        :: extra_search
07939        Integer, Intent (Out)           :: ierror
07940     End Subroutine
07941 
07942     subroutine psmile_neigh_nearx_irr2_3d_dble (grid_id,   &
07943                coords1, coords2, coords3,                  &
07944                x_coords, y_coords, z_coords,               &
07945                coords_shape,                               &
07946                mask_array, mask_shape,  mask_available,    &
07947                sin_values, cos_values, grid_valid_shape,   &
07948                search_mode,                                &
07949                srcloc, nloc, nprev, nsearch,               &
07950                neighbors_3d, num_neigh,                    &
07951                extra_search, ierror)
07952 
07953        Use PSMILe_common
07954 
07955        Integer, Intent (In)            :: grid_id
07956        Integer, Intent (In)            :: nloc, nprev, nsearch, search_mode
07957        Double Precision, Intent (In)   :: coords1 (nloc)
07958        Double Precision, Intent (In)   :: coords2 (nloc)
07959        Double Precision, Intent (In)   :: coords3 (nloc)
07960        Integer, Intent (In)            :: coords_shape (2, ndim_3d)
07961        Double Precision, Intent (In)   :: x_coords (*)
07962        Double Precision, Intent (In)   :: y_coords (*)
07963        Double Precision, Intent (In)   :: z_coords (*)
07964        Logical, Intent (In)            :: mask_array (*)
07965        Integer, Intent (In)            :: mask_shape (2, ndim_3d)
07966        Logical, Intent (In)            :: mask_available
07967        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
07968        Double Precision, Intent (In)   :: sin_values (*)
07969        Double Precision, Intent (In)   :: cos_values (*)
07970        Integer, Intent (In)            :: srcloc (ndim_3d, nloc)
07971        Integer, Intent (In)            :: num_neigh
07972        Integer, Intent (Out)           :: neighbors_3d (ndim_3d, nloc, num_neigh)
07973        Type (Extra_search_info)        :: extra_search
07974        Integer, Intent (Out)           :: ierror
07975     End Subroutine
07976 
07977     subroutine psmile_neigh_near_3d_irr2_dble (grid_id,    &
07978                coords1, coords2, coords3,                  &
07979                x_coords, y_coords, z_coords,               &
07980                coords_shape,                               &
07981                mask_array, mask_shape,  mask_available,    &
07982                sin_values_lon, cos_values_lon,             &
07983                sin_values_lat, cos_values_lat,             &
07984                grid_valid_shape, search_mode,              &
07985                srcloc, srclocz, nlocs, nloc, nprev,        &
07986                neighbors_3d, num_neigh,                    &
07987                extra_search, ierror)
07988 
07989        Use PSMILe_common
07990 
07991        Integer,             Intent (In)  :: grid_id
07992        Integer,             Intent (In)  :: nloc, nprev, search_mode
07993        Integer,             Intent (In)  :: nlocs (ndim_2d)
07994        Double Precision,    Intent (In)  :: coords1 (*)
07995        Double Precision,    Intent (In)  :: coords2 (*)
07996        Double Precision,    Intent (In)  :: coords3 (*)
07997        Integer,             Intent (In)  :: coords_shape (2, ndim_3d)
07998        Double Precision,    Intent (In)  :: x_coords (*)
07999        Double Precision,    Intent (In)  :: y_coords (*)
08000        Double Precision,    Intent (In)  :: z_coords (*)
08001        Logical,             Intent (In)  :: mask_array (*)
08002        Integer,             Intent (In)  :: mask_shape (2, ndim_3d)
08003        Logical,             Intent (In)  :: mask_available
08004        Integer,             Intent (In)  :: grid_valid_shape (2, ndim_3d)
08005        Double Precision,    Intent (In)  :: sin_values_lon (*)
08006        Double Precision,    Intent (In)  :: cos_values_lon (*)
08007        Double Precision,    Intent (In)  :: sin_values_lat (*)
08008        Double Precision,    Intent (In)  :: cos_values_lat (*)
08009        Integer,             Intent (In)  :: srcloc (ndim_2d, nlocs(1))
08010        Integer,             Intent (In)  :: srclocz (nlocs(2))
08011        Integer,             Intent (In)  :: num_neigh
08012        Integer,             Intent (Out) :: neighbors_3d (ndim_3d, nloc, 
08013                                                           num_neigh)
08014        Type (Extra_search_info)          :: extra_search
08015        Integer,             Intent (Out) :: ierror
08016     End Subroutine
08017 
08018     subroutine psmile_neigh_near_3d_irr3_dble (grid_id,    &
08019                coords1, coords2, coords3,                  &
08020                x_coords, y_coords, z_coords,               &
08021                coords_shape,                               &
08022                mask_array, mask_shape,  mask_available,    &
08023                sin_values_lon, cos_values_lon,             &
08024                sin_values_lat, cos_values_lat,             &
08025                grid_valid_shape, search_mode,              &
08026                srcloc, nsearch, nloc, nprev,               &
08027                neighbors_3d, num_neigh,                    &
08028                extra_search, ierror)
08029 
08030        Use PSMILe_common
08031 
08032        Integer,            Intent (In)  :: grid_id
08033        Integer,            Intent (In)  :: nloc, nprev, search_mode
08034        Integer,            Intent (In)  :: nsearch
08035        Double Precision,   Intent (In)  :: coords1 (*)
08036        Double Precision,   Intent (In)  :: coords2 (*)
08037        Double Precision,   Intent (In)  :: coords3 (*)
08038        Integer,            Intent (In)  :: coords_shape (2, ndim_3d)
08039        Double Precision,   Intent (In)  :: x_coords (*)
08040        Double Precision,   Intent (In)  :: y_coords (*)
08041        Double Precision,   Intent (In)  :: z_coords (*)
08042        Logical,            Intent (In)  :: mask_array (*)
08043        Integer,            Intent (In)  :: mask_shape (2, ndim_3d)
08044        Logical,            Intent (In)  :: mask_available
08045        Integer,            Intent (In)  :: grid_valid_shape (2, ndim_3d)
08046        Double Precision,   Intent (In)  :: sin_values_lon (*)
08047        Double Precision,   Intent (In)  :: cos_values_lon (*)
08048        Double Precision,   Intent (In)  :: sin_values_lat (*)
08049        Double Precision,   Intent (In)  :: cos_values_lat (*)
08050        Integer,            Intent (In)  :: srcloc (ndim_3d, nloc)
08051        Integer,            Intent (In)  :: num_neigh
08052        Integer,            Intent (Out) :: neighbors_3d (ndim_3d, nloc, 
08053                                                           num_neigh)
08054        Type (Extra_search_info)         :: extra_search
08055        Integer,            Intent (Out) :: ierror
08056     End Subroutine
08057 
08058     subroutine psmile_neigh_near_3d_reg_dble (grid_id,     &
08059                coords1, coords2, coords3,                  &
08060                x_coords, y_coords, z_coords,               &
08061                coords_shape,                               &
08062                mask_array, mask_shape,  mask_available,    &
08063                sin_values_lon, cos_values_lon,             &
08064                sin_values_lat, cos_values_lat,             &
08065                grid_valid_shape, search_mode,              &
08066                srclocs, nlocs, nloc, nprev,                &
08067                neighbors_3d, num_neigh,                    &
08068                extra_search, ierror)
08069 
08070        Use PSMILe_common
08071 
08072        Integer, Intent (In)            :: grid_id
08073        Integer, Intent (In)            :: nloc, nprev, search_mode
08074        Integer, Intent (In)            :: nlocs (ndim_3d)
08075        Double Precision, Intent (In)   :: coords1 (*)
08076        Double Precision, Intent (In)   :: coords2 (*)
08077        Double Precision, Intent (In)   :: coords3 (*)
08078        Integer, Intent (In)            :: coords_shape (2, ndim_3d)
08079        Double Precision, Intent (In)   :: x_coords (*)
08080        Double Precision, Intent (In)   :: y_coords (*)
08081        Double Precision, Intent (In)   :: z_coords (*)
08082        Logical, Intent (In)            :: mask_array (*)
08083        Integer, Intent (In)            :: mask_shape (2, ndim_3d)
08084        Logical, Intent (In)            :: mask_available
08085        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
08086        Double Precision, Intent (In)   :: sin_values_lon (*)
08087        Double Precision, Intent (In)   :: cos_values_lon (*)
08088        Double Precision, Intent (In)   :: sin_values_lat (*)
08089        Double Precision, Intent (In)   :: cos_values_lat (*)
08090        Type (integer_vector), Intent (In) :: srclocs (ndim_3d)
08091        Integer, Intent (In)            :: num_neigh
08092        Integer, Intent (Out)           :: neighbors_3d (ndim_3d, nloc, num_neigh)
08093        Type (Extra_search_info)        :: extra_search
08094        Integer, Intent (Out)           :: ierror
08095     End Subroutine
08096 
08097     subroutine psmile_neigh_nearx_3d_irr2_dble (grid_id,   &
08098                coords1, coords2, coords3,                  &
08099                x_coords, y_coords, z_coords,               &
08100                coords_shape,                               &
08101                mask_array, mask_shape,  mask_available,    &
08102                sin_values_lon, cos_values_lon,             &
08103                sin_values_lat, cos_values_lat,             &
08104                grid_valid_shape, search_mode,              &
08105                srcloc, srclocz, nlocs, nloc, nprev,        &
08106                neighbors_3d, num_neigh,                    &
08107                extra_search, ierror)
08108 
08109        Use PSMILe_common
08110 
08111        Integer, Intent (In)             :: grid_id
08112        Integer,            Intent (In)  :: nloc, nprev, search_mode
08113        Integer,            Intent (In)  :: nlocs (ndim_2d)
08114        Double Precision,   Intent (In)  :: coords1 (*)
08115        Double Precision,   Intent (In)  :: coords2 (*)
08116        Double Precision,   Intent (In)  :: coords3 (*)
08117        Integer,            Intent (In)  :: coords_shape (2, ndim_3d)
08118        Double Precision,   Intent (In)  :: x_coords (*)
08119        Double Precision,   Intent (In)  :: y_coords (*)
08120        Double Precision,   Intent (In)  :: z_coords (*)
08121        Logical,            Intent (In)  :: mask_array (*)
08122        Integer,            Intent (In)  :: mask_shape (2, ndim_3d)
08123        Logical,            Intent (In)  :: mask_available
08124        Integer,            Intent (In)  :: grid_valid_shape (2, ndim_3d)
08125        Double Precision,   Intent (In)  :: sin_values_lon (*)
08126        Double Precision,   Intent (In)  :: cos_values_lon (*)
08127        Double Precision,   Intent (In)  :: sin_values_lat (*)
08128        Double Precision,   Intent (In)  :: cos_values_lat (*)
08129        Integer,            Intent (In)  :: srcloc (ndim_2d, nlocs(1))
08130        Integer,            Intent (In)  :: srclocz (nlocs(2))
08131        Integer,            Intent (In)  :: num_neigh
08132        Integer,            Intent (Out) :: neighbors_3d (ndim_3d, nloc, num_neigh)
08133        Type (Extra_search_info)         :: extra_search
08134        Integer,            Intent (Out) :: ierror
08135     End Subroutine
08136 
08137     subroutine psmile_neigh_nearx_3d_irr3_dble (grid_id,   &
08138                coords1, coords2, coords3,                  &
08139                x_coords, y_coords, z_coords,               &
08140                coords_shape,                               &
08141                mask_array, mask_shape,  mask_available,    &
08142                sin_values_lon, cos_values_lon,             &
08143                sin_values_lat, cos_values_lat,             &
08144                grid_valid_shape, search_mode,              &
08145                srcloc, nsearch, nloc, nprev,               &
08146                neighbors_3d, num_neigh,                    &
08147                extra_search, ierror)
08148 
08149        Use PSMILe_common
08150 
08151        Integer, Intent (In)             :: grid_id
08152        Integer,            Intent (In)  :: nloc, nprev, search_mode
08153        Integer,            Intent (In)  :: nsearch
08154        Double Precision,   Intent (In)  :: coords1 (*)
08155        Double Precision,   Intent (In)  :: coords2 (*)
08156        Double Precision,   Intent (In)  :: coords3 (*)
08157        Integer,            Intent (In)  :: coords_shape (2, ndim_3d)
08158        Double Precision,   Intent (In)  :: x_coords (*)
08159        Double Precision,   Intent (In)  :: y_coords (*)
08160        Double Precision,   Intent (In)  :: z_coords (*)
08161        Logical,            Intent (In)  :: mask_array (*)
08162        Integer,            Intent (In)  :: mask_shape (2, ndim_3d)
08163        Logical,            Intent (In)  :: mask_available
08164        Integer,            Intent (In)  :: grid_valid_shape (2, ndim_3d)
08165        Double Precision,   Intent (In)  :: sin_values_lon (*)
08166        Double Precision,   Intent (In)  :: cos_values_lon (*)
08167        Double Precision,   Intent (In)  :: sin_values_lat (*)
08168        Double Precision,   Intent (In)  :: cos_values_lat (*)
08169        Integer,            Intent (In)  :: srcloc (ndim_3d, nloc)
08170        Integer,            Intent (In)  :: num_neigh
08171        Integer,            Intent (Out) :: neighbors_3d (ndim_3d, nloc, num_neigh)
08172        Type (Extra_search_info)         :: extra_search
08173        Integer,            Intent (Out) :: ierror
08174     End Subroutine
08175 
08176     subroutine psmile_neigh_nearx_3d_reg_dble (grid_id,    &
08177                coords1, coords2, coords3,                  &
08178                x_coords, y_coords, z_coords,               &
08179                coords_shape,                               &
08180                mask_array, mask_shape,  mask_available,    &
08181                sin_values_lon, cos_values_lon,             &
08182                sin_values_lat, cos_values_lat,             &
08183                grid_valid_shape, search_mode,              &
08184                srclocs, nlocs, nloc, nprev,                &
08185                neighbors_3d, num_neigh,                    &
08186                extra_search, ierror)
08187 
08188        Use PSMILe_common
08189 
08190        Integer, Intent (In)            :: grid_id
08191        Integer, Intent (In)            :: nloc, nprev, search_mode
08192        Integer, Intent (In)            :: nlocs (ndim_3d)
08193        Double Precision, Intent (In)   :: coords1 (*)
08194        Double Precision, Intent (In)   :: coords2 (*)
08195        Double Precision, Intent (In)   :: coords3 (*)
08196        Integer, Intent (In)            :: coords_shape (2, ndim_3d)
08197        Double Precision, Intent (In)   :: x_coords (*)
08198        Double Precision, Intent (In)   :: y_coords (*)
08199        Double Precision, Intent (In)   :: z_coords (*)
08200        Logical, Intent (In)            :: mask_array (*)
08201        Integer, Intent (In)            :: mask_shape (2, ndim_3d)
08202        Logical, Intent (In)            :: mask_available
08203        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
08204        Double Precision, Intent (In)   :: sin_values_lon (*)
08205        Double Precision, Intent (In)   :: cos_values_lon (*)
08206        Double Precision, Intent (In)   :: sin_values_lat (*)
08207        Double Precision, Intent (In)   :: cos_values_lat (*)
08208        Type (integer_vector), Intent (In) :: srclocs (ndim_3d)
08209        Integer, Intent (In)            :: num_neigh
08210        Integer, Intent (Out)           :: neighbors_3d (ndim_3d, nloc, num_neigh)
08211        Type (Extra_search_info)        :: extra_search
08212        Integer, Intent (Out)           :: ierror
08213     End Subroutine
08214 
08215     subroutine psmile_neigh_nearx_sub_irr_dble (           &
08216                            grid_id,                        &
08217                            x_coords, y_coords, z_coords,   &
08218                            coords_shape,                   &
08219                            mask_array, mask_shape,  mask_available,    &
08220                            sin_values, cos_values,         &
08221                            grid_valid_shape, search_mode,  &
08222                            neighbors_3d, num_neigh, nloc,  &
08223                            extra_search,                   &
08224                            ijk, sin_search, cos_search,    &
08225                            z_search, jbeg, jend, width, ierror)
08226 
08227        Use PSMILe_common
08228 
08229        Integer,            Intent (In)   :: grid_id
08230        Integer,            Intent (In)   :: search_mode
08231        Integer,            Intent (In)   :: coords_shape (2, ndim_3d)
08232        Double Precision,   Intent (In)   :: x_coords (*)
08233        Double Precision,   Intent (In)   :: y_coords (*)
08234        Double Precision,   Intent (In)   :: z_coords (*)
08235        Logical,            Intent (In)   :: mask_array (*)
08236        Integer,            Intent (In)   :: mask_shape (2, ndim_3d)
08237        Logical,            Intent (In)   :: mask_available
08238        Integer,            Intent (In)   :: grid_valid_shape (2, ndim_3d)
08239        Double Precision,   Intent (In)   :: sin_values (*)
08240        Double Precision,   Intent (In)   :: cos_values (*)
08241        Integer,            Intent (In)   :: nloc, num_neigh
08242        Type (Extra_search_info), Intent (InOut) :: extra_search
08243        Integer,            Intent (In)   :: jbeg, jend
08244        Integer,            Intent (In)   :: ijk (ndim_3d, jbeg:jend)
08245        Integer,            Intent (In)   :: width (ndim_3d)
08246        Double Precision,   Intent (In)   :: sin_search (jbeg:jend, 2)
08247        Double Precision,   Intent (In)   :: cos_search (jbeg:jend, 2)
08248        Double Precision,   Intent (In)   :: z_search   (jbeg:jend)
08249        Integer,            Intent (Out)  :: neighbors_3d (ndim_3d, nloc, num_neigh)
08250        Integer,            Intent (Out)  :: ierror
08251     End Subroutine
08252 
08253     subroutine psmile_neigh_nearx_sub_reg_dble (           &
08254                            grid_id,                        &
08255                            x_coords, y_coords, z_coords,   &
08256                            coords_shape,                   &
08257                            mask_array, mask_shape,  mask_available,    &
08258                            sin_values_lon, cos_values_lon, &
08259                            sin_values_lat, cos_values_lat, &
08260                            grid_valid_shape, search_mode,  &
08261                            neighbors_3d, num_neigh, nloc,  &
08262                            extra_search,                   &
08263                            ijk, sin_search, cos_search,    &
08264                            z_search, jbeg, jend, width, ierror)
08265 
08266        Use PSMILe_common
08267 
08268        Integer, Intent (In)              :: grid_id
08269        Integer,            Intent (In)   :: search_mode
08270        Integer,            Intent (In)   :: coords_shape (2, ndim_3d)
08271        Double Precision,   Intent (In)   :: x_coords (*)
08272        Double Precision,   Intent (In)   :: y_coords (*)
08273        Double Precision,   Intent (In)   :: z_coords (*)
08274        Logical,            Intent (In)   :: mask_array (*)
08275        Integer,            Intent (In)   :: mask_shape (2, ndim_3d)
08276        Logical,            Intent (In)   :: mask_available
08277        Integer,            Intent (In)   :: grid_valid_shape (2, ndim_3d)
08278        Double Precision,   Intent (In)   :: sin_values_lon (*)
08279        Double Precision,   Intent (In)   :: cos_values_lon (*)
08280        Double Precision,   Intent (In)   :: sin_values_lat (*)
08281        Double Precision,   Intent (In)   :: cos_values_lat (*)
08282        Integer,            Intent (In)   :: nloc, num_neigh
08283        Type (Extra_search_info), Intent(In) :: extra_search
08284        Integer,            Intent (In)   :: jbeg, jend
08285        Integer,            Intent (In)   :: ijk (ndim_3d, jbeg:jend)
08286        Integer,            Intent (In)   :: width (ndim_3d)
08287        Double Precision,   Intent (In)   :: sin_search (jbeg:jend, 2)
08288        Double Precision,   Intent (In)   :: cos_search (jbeg:jend, 2)
08289        Double Precision,   Intent (In)   :: z_search   (jbeg:jend)
08290        Integer,            Intent (Out)  :: neighbors_3d (ndim_3d, nloc, num_neigh)
08291        Integer,            Intent (Out)  :: ierror
08292     End Subroutine
08293 
08294     subroutine psmile_neigh_nearest_3d_dble (grid_id,         &
08295                     coords1, coords2, coords3,                &
08296                     x_coords, y_coords, z_coords,             &
08297                     coords_shape,                             &
08298                     mask_array, mask_shape,  mask_available,  &
08299                     sin_values, cos_values, grid_valid_shape, &
08300                     srcloc, nloc, nprev, nsearch,             &
08301                     neighbors_3d, num_neigh,                  &
08302                     extra_search, ierror)
08303 
08304        Use PSMILe_common
08305 
08306        Integer, Intent (In)            :: grid_id
08307        Integer, Intent (In)            :: coords_shape (2, ndim_3d)
08308        Integer, Intent (In)            ::   mask_shape (2, ndim_3d)
08309        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
08310        Double Precision, Intent (In)   :: x_coords (*)
08311        Double Precision, Intent (In)   :: y_coords (*)
08312        Double Precision, Intent (In)   :: z_coords (*)
08313        Logical, Intent (In)            :: mask_array (*)
08314        Logical, Intent (In)            :: mask_available
08315        Double Precision, Intent (In)   :: sin_values (*)
08316        Double Precision, Intent (In)   :: cos_values (*)
08317        Integer, Intent (In)            :: nloc, nprev, nsearch
08318        Integer, Intent (In)            :: srcloc (ndim_3d, nloc)
08319        Double Precision, Intent (In)   :: coords1 (nloc)
08320        Double Precision, Intent (In)   :: coords2 (nloc)
08321        Double Precision, Intent (In)   :: coords3 (nloc)
08322        Integer, Intent (In)            :: num_neigh
08323 !
08324        Integer, Intent (Out)           :: neighbors_3d (ndim_3d, nloc, num_neigh)
08325        Type (Extra_search_info)        :: extra_search
08326        Integer, Intent (Out)           :: ierror
08327     End Subroutine
08328 
08329     subroutine psmile_neigh_nearestx_3d_dble (grid_id,     &
08330                coords1, coords2, coords3,                  &
08331                x_coords, y_coords, z_coords,               &
08332                coords_shape,                               &
08333                mask_array, mask_shape,  mask_available,    &
08334                sin_values, cos_values, grid_valid_shape,   &
08335                srcloc, nloc, nprev, nsearch,               &
08336                neighbors_3d, num_neigh,                    &
08337                extra_search, ierror)
08338 
08339        Use PSMILe_common
08340 
08341        Integer, Intent (In)            :: grid_id
08342        Integer, Intent (In)            :: nloc, nprev, nsearch
08343        Integer, Intent (In)            :: coords_shape (2, ndim_3d)
08344        Integer, Intent (In)            :: mask_shape (2, ndim_3d)
08345        Integer, Intent (In)            :: grid_valid_shape (2, ndim_3d)
08346        Double Precision, Intent (In)   :: coords1 (nloc)
08347        Double Precision, Intent (In)   :: coords2 (nloc)
08348        Double Precision, Intent (In)   :: coords3 (nloc)
08349        Double Precision, Intent (In)   :: x_coords (*)
08350        Double Precision, Intent (In)   :: y_coords (*)
08351        Double Precision, Intent (In)   :: z_coords (*)
08352        Logical, Intent (In)            :: mask_array (*)
08353        Logical, Intent (In)            :: mask_available
08354        Double Precision, Intent (In)   :: sin_values (*)
08355        Double Precision, Intent (In)   :: cos_values (*)
08356        Integer, Intent (In)            :: srcloc (ndim_3d, nloc)
08357        Integer, Intent (In)            :: num_neigh
08358        Integer, Intent (Out)           :: neighbors_3d (ndim_3d, nloc, num_neigh)
08359 !
08360        Type (Extra_search_info)        :: extra_search
08361        Integer, Intent (Out)           :: ierror
08362     End Subroutine
08363 
08364     subroutine psmile_mg_coarse_1d_dble (lev, chmin, chmax,        &
08365                                          found, locations, coords, &
08366                                          ibeg, iend)
08367        Integer, Intent (In)            :: lev
08368        Double Precision, Intent (In)   :: chmin (0:0), chmax (0:0)
08369        Integer, Intent (InOut)         :: ibeg, iend
08370        Integer, Intent (InOut)         :: found (iend)
08371        Integer, Intent (InOut)         :: locations (iend)
08372        Double Precision, Intent (In)   :: coords (iend)
08373     End Subroutine
08374 
08375     subroutine psmile_mg_coarse_2d_dble (lev, chmin, chmax,         &
08376                                          found, locations, coords1, &
08377                                          coords2, ibeg, iend)
08378        Use PSMILe_common
08379 
08380        Integer, Intent (In)            :: lev
08381        Type (dble_vector), Intent (In) :: chmin (ndim_2d), chmax (ndim_2d)
08382        Integer, Intent (InOut)         :: ibeg, iend
08383        Integer, Intent (InOut)         :: found (iend)
08384        Integer, Intent (InOut)         :: locations (iend)
08385        Double Precision, Intent (In)   :: coords1 (iend)
08386        Double Precision, Intent (In)   :: coords2 (iend)
08387     End Subroutine
08388 
08389     subroutine psmile_mg_coarse_3d_dble (lev, chmin, chmax,         &
08390                                          found, locations, coords1, &
08391                                          coords2, coords3, ibeg, iend)
08392        Use PSMILe_common
08393 
08394        Integer, Intent (In)            :: lev
08395        Type (dble_vector), Intent (In) :: chmin (ndim_3d), chmax (ndim_3d)
08396        Integer, Intent (InOut)         :: ibeg, iend
08397        Integer, Intent (InOut)         :: found (iend)
08398        Integer, Intent (InOut)         :: locations (iend)
08399        Double Precision, Intent (In)   :: coords1 (iend)
08400        Double Precision, Intent (In)   :: coords2 (iend)
08401        Double Precision, Intent (In)   :: coords3 (iend)
08402     End Subroutine
08403 
08404     subroutine psmile_mg_next_level_1d_dble (grid_id, idim,        &
08405                                      lev, nlev,                      &
08406                                      chmin, chmax, midp, levdim,     &
08407                                      found, loc, coords, ibeg, iend, &
08408                                      ijkinc, ijkcoa, ierror)
08409 
08410        Use PSMILe_common
08411        Integer, Intent (In)            :: grid_id
08412        Integer, Intent (In)            :: idim, levdim
08413        Integer, Intent (In)            :: lev, nlev, ijkinc, ijkcoa
08414        Double Precision, Intent (In)   :: chmin (0:levdim)
08415        Double Precision, Intent (In)   :: chmax (0:levdim)
08416        Double Precision, Intent (In)   :: midp  (0:levdim)
08417        Integer, Intent (InOut)         :: ibeg, iend
08418        Integer, Intent (InOut)         :: found (iend)
08419        Integer, Intent (InOut)         :: loc   (iend)
08420        Double Precision, Intent (In)   :: coords (iend)
08421        Integer, Intent (Out)           :: ierror
08422     End Subroutine
08423 
08424     subroutine psmile_mg_next_level_2d_dble (grid_id, lev, nlev,   &
08425                                      chmin1, chmin2,                 &
08426                                      chmax1, chmax2,                 &
08427                                      midp1,  midp2,                  &
08428                                      levdim,                         &
08429                                      found, loc, range,              &
08430                                      coords1, coords2,               &
08431                                      shape, control,                 &
08432                                      ijkinc, ijkcoa, ierror)
08433 
08434        Use PSMILe_common
08435        Integer, Intent (In)            :: grid_id
08436        Integer, Intent (In)            :: levdim (ndim_2d)
08437        Integer, Intent (In)            :: lev, nlev
08438        Integer, Intent (In)            :: ijkinc(ndim_3d), ijkcoa(ndim_2d)
08439        Double Precision, Intent (In)   :: chmin1 (*), chmin2 (*)
08440        Double Precision, Intent (In)   :: chmax1 (*), chmax2 (*)
08441        Double Precision, Intent (In)   :: midp1  (*), midp2  (*)
08442        Integer, Intent (InOut)         :: found (*)
08443        Integer, Intent (InOut)         :: loc   (2, *)
08444        Integer, Intent (In)            :: range (2, ndim_3d)
08445        Double Precision, Intent (In)   :: coords1 (*)
08446        Double Precision, Intent (In)   :: coords2 (*)
08447        Integer, Intent (In)            :: shape (2, ndim_3d)
08448        Integer, Intent (InOut)         :: control (2, ndim_3d)
08449        Integer, Intent (Out)           :: ierror
08450     End Subroutine
08451 
08452     subroutine psmile_mg_next_level_3d_dble (grid_id, lev, nlev,     &
08453                                      chmin1, chmin2, chmin3,         &
08454                                      chmax1, chmax2, chmax3,         &
08455                                      midp1,  midp2,  midp3,          &
08456                                      levdim,                         &
08457                                      found, loc, range,              &
08458                                      coords1, coords2, coords3,      &
08459                                      shape, control,                 &
08460                                      ijkinc, ijkcoa, ierror)
08461 
08462        Use PSMILe_common
08463        Integer, Intent (In)            :: grid_id
08464        Integer, Intent (In)            :: levdim (ndim_3d)
08465        Integer, Intent (In)            :: lev, nlev
08466        Integer, Intent (In)            :: ijkinc(ndim_3d), ijkcoa(ndim_3d)
08467        Double Precision, Intent (In)   :: chmin1 (*), chmin2 (*), chmin3 (*)
08468        Double Precision, Intent (In)   :: chmax1 (*), chmax2 (*), chmax3 (*)
08469        Double Precision, Intent (In)   :: midp1  (*), midp2  (*), midp3  (*)
08470        Integer, Intent (InOut)         :: found (*)
08471        Integer, Intent (InOut)         :: loc   (ndim_3d, *)
08472        Integer, Intent (In)            :: range (2, ndim_3d)
08473        Double Precision, Intent (In)   :: coords1 (*)
08474        Double Precision, Intent (In)   :: coords2 (*)
08475        Double Precision, Intent (In)   :: coords3 (*)
08476        Integer, Intent (In)            :: shape (2, ndim_3d)
08477        Integer, Intent (InOut)         :: control (2, ndim_3d)
08478        Integer, Intent (Out)           :: ierror
08479     End Subroutine
08480 
08481     subroutine psmile_mg_prev_levels_1d_dble (grid_id, idim, &
08482                            lev, nlev,                        &
08483                            lstijk, xyz, found, newijk)
08484        Use PSMILe_common
08485        Integer, Intent (In)            :: grid_id
08486        Integer, Intent (In)            :: idim
08487        Integer, Intent (In)            :: lev, nlev
08488        Integer, Intent (In)            :: lstijk
08489        Double Precision, Intent (In)   :: xyz
08490        Integer, Intent (Out)           :: found, newijk
08491     End Subroutine
08492 
08493     subroutine psmile_mg_prev_levels_2d_dble (grid_id, &
08494                            lev, nlev,                  &
08495                            lstijk, xyz, found, newijk, nc)
08496        Use PSMILe_Common
08497        Integer,          Intent (In)   :: grid_id
08498        Integer,          Intent (In)   :: lev, nlev, nc
08499        Integer,          Intent (In)   :: lstijk (ndim_2d, nc)
08500        Double Precision, Intent (In)   :: xyz (ndim_2d, nc)
08501        Integer,          Intent (Out)  :: found (nc), newijk (ndim_2d, nc)
08502     End Subroutine
08503 
08504     subroutine psmile_mg_prev_levels_3d_dble (grid_id, &
08505                            lev, nlev,                  &
08506                            lstijk, xyz, found, newijk)
08507        Use PSMILe_common
08508        Integer, Intent (In)            :: grid_id
08509        Integer, Intent (In)            :: lev, nlev
08510        Integer, Intent (In)            :: lstijk (ndim_3d)
08511        Double Precision, Intent (In)   :: xyz (ndim_3d)
08512        Integer, Intent (Out)           :: found, newijk (ndim_3d)
08513     End Subroutine
08514 
08515     subroutine psmile_mg_cells_1d_dble ( nlev, found, loc, range,    &
08516                                          search_grid_type,           &
08517                                          corners1, search_dim,       &
08518                                          shape, control,             &
08519                                          grid_valid_shape, cyclic,   &
08520                                          chmin, chmax, tol, ierror )
08521       Use PSMILe_common
08522       Integer, Intent (In)            :: nlev
08523       Integer, Intent (In)            :: search_grid_type
08524       Integer, Intent (In)            :: range (2, ndim_3d)
08525       Integer, Intent (In)            :: shape (2, ndim_3d)
08526       Integer, Intent (InOut)         :: found (range(1,1):range(2,1), 
08527                                                 range(1,2):range(2,2), 
08528                                                 range(1,3):range(2,3))
08529       Integer, Intent (InOut)         :: loc   (range(1,1):range(2,1), 
08530                                                 range(1,2):range(2,2), 
08531                                                 range(1,3):range(2,3))
08532       Double Precision, Intent (In)   :: corners1 (shape(1,1):shape(2,1), 
08533                                                    shape(1,2):shape(2,2), 
08534                                                    shape(1,3):shape(2,3))
08535       Integer, Intent (In)            :: control (2, ndim_3d)
08536       Integer,          Intent (In)   :: search_dim
08537       Integer,          Intent (In)   :: grid_valid_shape (2)
08538       Logical,          Intent (In)   :: cyclic
08539       Double Precision, Intent (In)   :: chmin (grid_valid_shape(1): 
08540                                                 grid_valid_shape(2)+2)
08541       Double Precision, Intent (In)   :: chmax (grid_valid_shape(1): 
08542                                                 grid_valid_shape(2)+2)
08543       Double Precision, Intent (In)   :: tol
08544       Integer, Intent (Out)           :: ierror
08545     End Subroutine
08546 
08547     subroutine psmile_mg_cells_2d_dble ( grid_id, search_grid_type,                &
08548                                          found, loc, loc_fnd_shape,                &
08549                                          tgt_src_corners_x, tgt_src_corners_y,     &
08550                                          src_corner_shape, control,                &
08551                                          grid_valid_shape,                         &
08552                                          ipart, corner_shape, nbr_corners,         &
08553                                          src_corners_x, src_corners_y,             &
08554                                          chmin1, chmax1, chmin2, chmax2,           &
08555                                          tol, ierror )
08556       Use PSMILe_common
08557       Integer, Intent (In)            :: grid_id
08558       Integer, Intent (In)            :: search_grid_type
08559       Integer, Intent (In)            :: loc_fnd_shape (2, ndim_3d)
08560       Integer, Intent (In)            :: src_corner_shape (2, ndim_3d)
08561       Integer, Intent (In)            :: grid_valid_shape(2,ndim_2d)
08562       Integer, Intent (InOut)         :: found (loc_fnd_shape(1,1):loc_fnd_shape(2,1), 
08563                                                 loc_fnd_shape(1,2):loc_fnd_shape(2,2), 
08564                                                 loc_fnd_shape(1,3):loc_fnd_shape(2,3))
08565       Integer, Intent (InOut)         :: loc   (ndim_2d,                               
08566                                                 loc_fnd_shape(1,1):loc_fnd_shape(2,1), 
08567                                                 loc_fnd_shape(1,2):loc_fnd_shape(2,2), 
08568                                                 loc_fnd_shape(1,3):loc_fnd_shape(2,3))
08569       Double Precision, Intent (In)   :: tgt_src_corners_x (                           
08570                                           src_corner_shape(1,1):src_corner_shape(2,1), 
08571                                           src_corner_shape(1,2):src_corner_shape(2,2), 
08572                                           src_corner_shape(1,3):src_corner_shape(2,3))
08573       Double Precision, Intent (In)   :: tgt_src_corners_y (                           
08574                                           src_corner_shape(1,1):src_corner_shape(2,1), 
08575                                           src_corner_shape(1,2):src_corner_shape(2,2), 
08576                                           src_corner_shape(1,3):src_corner_shape(2,3))
08577       Integer, Intent (In)            :: control (2, ndim_3d)
08578       Integer,          Intent (In)   :: ipart
08579       Integer,          Intent (In)   :: corner_shape (2,2)
08580       Integer,          Intent (In)   :: nbr_corners
08581       Double Precision, Intent (In)   :: src_corners_x (                        
08582                                           corner_shape (1,1):corner_shape(2,1), 
08583                                           corner_shape (1,2):corner_shape(2,2), 
08584                                           nbr_corners)
08585       Double Precision, Intent (In)   :: src_corners_y (                        
08586                                           corner_shape (1,1):corner_shape(2,1), 
08587                                           corner_shape (1,2):corner_shape(2,2), 
08588                                           nbr_corners)
08589       Double Precision, Intent (InOut):: chmin1 (grid_valid_shape(1,1):    
08590                                                  grid_valid_shape(2,1)+1 , 
08591                                                  grid_valid_shape(1,2):    
08592                                                  grid_valid_shape(2,2)+1)
08593       Double Precision, Intent (InOut):: chmin2 (grid_valid_shape(1,1):    
08594                                                  grid_valid_shape(2,1)+1,  
08595                                                  grid_valid_shape(1,2):    
08596                                                  grid_valid_shape(2,2)+1)
08597       Double Precision, Intent (InOut):: chmax1 (grid_valid_shape(1,1):    
08598                                                  grid_valid_shape(2,1)+1 , 
08599                                                  grid_valid_shape(1,2):    
08600                                                  grid_valid_shape(2,2)+1)
08601       Double Precision, Intent (InOut):: chmax2 (grid_valid_shape(1,1):    
08602                                                  grid_valid_shape(2,1)+1,  
08603                                                  grid_valid_shape(1,2):    
08604                                                  grid_valid_shape(2,2)+1)
08605       Double Precision, Intent (In)   :: tol
08606       Integer, Intent (Out)           :: ierror
08607     End Subroutine
08608 
08609     subroutine psmile_mg_cells_gauss2 ( grid_id, search_grid_type, &
08610                            found, loc, loc_fnd_shape, control, ierror )
08611 
08612       Use PSMILe_common
08613       Integer, Intent (In)          :: grid_id
08614       Integer, Intent (In)          :: search_grid_type
08615       Integer, Intent (In)          :: loc_fnd_shape (2, ndim_3d)
08616       Integer, Intent (In)          :: control (2, ndim_3d)
08617       Integer, Intent (InOut)       :: found ( loc_fnd_shape(1,1):loc_fnd_shape(2,1), 
08618                                                loc_fnd_shape(1,2):loc_fnd_shape(2,2), 
08619                                                loc_fnd_shape(1,3):loc_fnd_shape(2,3) )
08620       Integer, Intent (InOut)       :: loc ( loc_fnd_shape(1,1):loc_fnd_shape(2,1), 
08621                                              loc_fnd_shape(1,2):loc_fnd_shape(2,2), 
08622                                              loc_fnd_shape(1,3):loc_fnd_shape(2,3) )
08623       Integer, Intent (Out)         :: ierror
08624     End Subroutine
08625 
08626     subroutine psmile_mg_control_cell_1d_dble (            &
08627                            chmin, chmax, midp, levdim,     &
08628                            ijk, xyz, nold, all, wide, found, newijk)
08629        Use PSMILe_common
08630 
08631        Integer, Intent (In)            :: levdim
08632        Double Precision, Intent (In)   :: chmin (0:levdim)
08633        Double Precision, Intent (In)   :: chmax (0:levdim)
08634        Double Precision, Intent (In)   :: midp  (0:levdim)
08635        Integer, Intent (In)            :: ijk, nold
08636        Logical, Intent (In)            :: all, wide
08637        Double Precision, Intent (In)   :: xyz
08638        Integer, Intent (Out)           :: found, newijk
08639     End Subroutine
08640 
08641     subroutine psmile_mg_control_cell_2d_dble (     &
08642                     chmin1, chmin2,                 &
08643                     chmax1, chmax2,                 &
08644                     midp1,  midp2,                  &
08645                     levdim,                         &
08646                     ijk, xyz, nold, ignore, wide, found, newijk)
08647        Use PSMILe_common
08648 
08649        Double Precision, Intent (In)   :: chmin1 (*), chmin2 (*)
08650        Double Precision, Intent (In)   :: chmax1 (*), chmax2 (*)
08651        Double Precision, Intent (In)   :: midp1  (*), midp2  (*)
08652        Integer, Intent (In)            :: levdim (ndim_2d)
08653        Integer, Intent (In)            :: ijk(ndim_2d), nold
08654        Integer, Intent (In)            :: ignore(ndim_2d)
08655        Logical, Intent (In)            :: wide
08656        Double Precision, Intent (In)   :: xyz(ndim_2d)
08657        Integer, Intent (Out)           :: found, newijk(ndim_2d)
08658     End Subroutine
08659 
08660     subroutine psmile_mg_control_cell_3d_dble (            &
08661                            chmin1, chmin2, chmin3,         &
08662                            chmax1, chmax2, chmax3,         &
08663                            midp1,  midp2,  midp3,          &
08664                            levdim,                         &
08665                            ijk, xyz, nold, all, wide, found, newijk)
08666        Use PSMILe_common
08667 
08668        Double Precision, Intent (In)   :: chmin1 (*), chmin2 (*), chmin3 (*)
08669        Double Precision, Intent (In)   :: chmax1 (*), chmax2 (*), chmax3 (*)
08670        Double Precision, Intent (In)   :: midp1  (*), midp2  (*), midp3  (*)
08671        Integer, Intent (In)            :: levdim (ndim_3d)
08672        Integer, Intent (In)            :: ijk(ndim_3d), nold
08673        Logical, Intent (In)            :: all, wide
08674        Double Precision, Intent (In)   :: xyz(ndim_3d)
08675        Integer, Intent (Out)           :: found, newijk(ndim_3d)
08676     End Subroutine
08677 
08678     subroutine psmile_mg_final_2d_dble (grid_id, nlev,             &
08679                     chmin1, chmin2, chmax1, chmax2,                &
08680                     midp1,  midp2,  levdim,                        &
08681                     found, loc, range,                             &
08682                     coords1, coords2, shape, control,              &
08683                     corners1, corners2, corner_shape, nbr_corners, &
08684                     tol, ierror)
08685        Use PSMILe_common
08686 
08687        Integer,          Intent (In)    :: grid_id, nlev
08688        Integer,          Intent (In)    :: levdim (ndim_2d)
08689        Double Precision, Intent (In)    :: chmin1 (0:levdim(1), 
08690                                                    0:levdim(2))
08691        Double Precision, Intent (In)    :: chmin2 (0:levdim(1), 
08692                                                    0:levdim(2))
08693        Double Precision, Intent (In)    :: chmax1 (0:levdim(1), 
08694                                                    0:levdim(2))
08695        Double Precision, Intent (In)    :: chmax2 (0:levdim(1), 
08696                                                    0:levdim(2))
08697        Double Precision, Intent (In)    :: midp1  (0:levdim(1), 
08698                                                    0:levdim(2))
08699        Double Precision, Intent (In)    :: midp2  (0:levdim(1), 
08700                                                    0:levdim(2))
08701        Integer,          Intent (In)    :: range (2, ndim_3d)
08702        Integer,          Intent (In)    :: shape (2, ndim_3d)
08703        Integer,          Intent (InOut) :: found (range(1,1):range(2,1), 
08704                                                   range(1,2):range(2,2), 
08705                                                   range(1,3):range(2,3))
08706        Integer,          Intent (InOut) :: loc   (ndim_2d,               
08707                                                   range(1,1):range(2,1), 
08708                                                   range(1,2):range(2,2), 
08709                                                   range(1,3):range(2,3))
08710        Double Precision, Intent (In)    :: coords1 (shape(1,1):shape(2,1), 
08711                                                     shape(1,2):shape(2,2), 
08712                                                     shape(1,3):shape(2,3))
08713        Double Precision, Intent (In)    :: coords2 (shape(1,1):shape(2,1), 
08714                                                     shape(1,2):shape(2,2), 
08715                                                     shape(1,3):shape(2,3))
08716        Integer,          Intent (In)    :: control (2, ndim_3d)
08717        Integer,          Intent (In)    :: corner_shape (2, ndim_2d)
08718        Integer,          Intent (In)    :: nbr_corners
08719        Double Precision, Intent (In)    ::                 
08720           corners1 ( corner_shape(1,1):corner_shape(2,1), 
08721                      corner_shape(1,2):corner_shape(2,2), nbr_corners)
08722        Double Precision, Intent (In)    ::                 
08723           corners2 ( corner_shape(1,1):corner_shape(2,1), 
08724                      corner_shape(1,2):corner_shape(2,2), nbr_corners)
08725        Double Precision, Intent (In)    :: tol
08726        Integer,          Intent (Out)   :: ierror
08727     End Subroutine
08728 
08729     subroutine psmile_mg_final_3d_dble (comp_info, nlev,             &
08730                                      found, loc, range,              &
08731                                      coords1, coords2, coords3,      &
08732                                      shape, control,                 &
08733                                      grid_id,                        &
08734                                      x_coords, y_coords, z_coords,   &
08735                                      coords_shape,                   &
08736                                      nbr_corners,                    &
08737                                      ijk0, tol, ierror)
08738 
08739        Use PSMILe_common
08740 
08741        Type (Enddef_comp), Intent (In) :: comp_info
08742        Integer, Intent (In)            :: nlev
08743        Integer, Intent (InOut)         :: found (*)
08744        Integer, Intent (InOut)         :: loc   (ndim_3d, *)
08745        Integer, Intent (In)            :: range (2, ndim_3d)
08746        Double Precision, Intent (In)   :: coords1 (*)
08747        Double Precision, Intent (In)   :: coords2 (*)
08748        Double Precision, Intent (In)   :: coords3 (*)
08749        Integer, Intent (In)            :: shape (2, ndim_3d)
08750        Integer, Intent (InOut)         :: control (2, ndim_3d)
08751        Integer, Intent (In)            :: grid_id
08752        Integer, Intent (In)            :: coords_shape (2, ndim_3d)
08753        Double Precision, Intent (In)   :: x_coords (*)
08754        Double Precision, Intent (In)   :: y_coords (*)
08755        Double Precision, Intent (In)   :: z_coords (*)
08756        Integer, Intent (In)            :: nbr_corners
08757        Integer, Intent (In)            :: ijk0 (ndim_3d)
08758        Double Precision, Intent (In)   :: tol
08759        Integer, Intent (Out)           :: ierror
08760     End Subroutine
08761 
08762    subroutine psmile_mg_final_gauss2_dble (                                       &
08763                      grid_id, found, locations, fnd_loc_range,                    &
08764                      tgt_coords_x, tgt_coords_y, tgt_coords_shape, search_range,  &
08765                      src_corners_x, src_corners_y, src_corner_shape, nbr_corners, &
08766                      ierror)
08767 
08768       use psmile_common
08769 
08770       integer, intent (in)            :: grid_id
08771       integer, intent (in)            :: fnd_loc_range (2, ndim_3d)
08772       integer, intent (in)            :: tgt_coords_shape (2, ndim_3d)
08773       double precision, intent (in)   ::                            
08774          tgt_coords_x (tgt_coords_shape(1,1):tgt_coords_shape(2,1), 
08775                        tgt_coords_shape(1,2):tgt_coords_shape(2,2), 
08776                        tgt_coords_shape(1,3):tgt_coords_shape(2,3))
08777       double precision, intent (in)   ::                            
08778          tgt_coords_y (tgt_coords_shape(1,1):tgt_coords_shape(2,1), 
08779                        tgt_coords_shape(1,2):tgt_coords_shape(2,2), 
08780                        tgt_coords_shape(1,3):tgt_coords_shape(2,3))
08781       integer, intent (in)            :: search_range (2, ndim_3d)
08782       integer, intent (in)            :: src_corner_shape (2, ndim_2d)
08783       integer, intent (in)            :: nbr_corners
08784       double precision,   intent (in) ::                 
08785          src_corners_x ( src_corner_shape(1,1):src_corner_shape(2,1), nbr_corners)
08786       double precision,   intent (in) ::                 
08787          src_corners_y ( src_corner_shape(1,1):src_corner_shape(2,1), nbr_corners)
08788       integer, intent (inout)         :: found (fnd_loc_range(1,1):fnd_loc_range(2,1), 
08789                                                 fnd_loc_range(1,2):fnd_loc_range(2,2), 
08790                                                 fnd_loc_range(1,3):fnd_loc_range(2,3))
08791       integer, intent (inout)         :: locations (fnd_loc_range(1,1):fnd_loc_range(2,1), 
08792                                                     fnd_loc_range(1,2):fnd_loc_range(2,2), 
08793                                                     fnd_loc_range(1,3):fnd_loc_range(2,3))
08794       integer, intent (out)           :: ierror
08795    end subroutine
08796 
08797     subroutine psmile_mg_final_prev_2d_dble (grid_id, nlev,        &
08798                     lstijk, xyz, found, newijk, nc,                &
08799                     corners1, corners2, corner_shape, nbr_corners, &
08800                     tol, ierror)
08801        Use PSMILe_common
08802 
08803        Integer,          Intent (In)   :: grid_id, nlev
08804        Integer,          Intent (In)   :: nc
08805        Integer,          Intent (In)   :: lstijk (ndim_2d, nc)
08806        Double Precision, Intent (In)   :: xyz (ndim_2d, nc)
08807        Integer,          Intent (In)   :: corner_shape (2, ndim_2d)
08808        Integer,          Intent (In)   :: nbr_corners
08809        Double Precision, Intent (In)   ::                 
08810           corners1 ( corner_shape(1,1):corner_shape(2,1), 
08811                      corner_shape(1,2):corner_shape(2,2), nbr_corners)
08812        Double Precision, Intent (In)   ::                 
08813           corners2 ( corner_shape(1,1):corner_shape(2,1), 
08814                      corner_shape(1,2):corner_shape(2,2), nbr_corners)
08815        Double Precision, Intent (In)   :: tol
08816 
08817        Integer,          Intent (Out)  :: found (nc)
08818        Integer,          Intent (Out)  :: newijk (ndim_2d, nc)
08819        Integer,          Intent (Out)  :: ierror
08820     End Subroutine
08821 
08822     subroutine psmile_mg_method_1d_dble (comp_info, nlev,            &
08823                                      found, loc, range,              &
08824                                      coords1,                        &
08825                                      shape, control,                 &
08826                                      method_id,                      &
08827                                      x_coords,                       &
08828                                      coords_shape,                   &
08829                                      grid_valid_shape, cyclic,       &
08830                                      chmin, chmax,                   &
08831                                      tol, ierror)
08832 
08833        Use PSMILe_common
08834 
08835        Type (Enddef_comp), Intent (In)  :: comp_info
08836        Integer,          Intent (In)    :: nlev
08837        Integer,          Intent (InOut) :: found (*)
08838        Integer,          Intent (InOut) :: loc   (*)
08839        Integer,          Intent (In)    :: range (2, ndim_3d)
08840        Double Precision, Intent (In)    :: coords1 (*)
08841        Integer,          Intent (In)    :: shape (2, ndim_3d)
08842        Integer,          Intent (In)    :: control (2, ndim_3d)
08843        Integer,          Intent (In)    :: method_id
08844        Integer,          Intent (In)    :: coords_shape (2)
08845        Integer,          Intent (In)    :: grid_valid_shape (2)
08846        Logical,          Intent (In)    :: cyclic
08847        Double Precision, Intent (In)    :: x_coords (*)
08848        Double Precision, Intent (In)    :: chmin (*), chmax (*)
08849        Double Precision, Intent (In)    :: tol
08850        Integer,          Intent (Out)   :: ierror
08851     End Subroutine
08852 
08853     subroutine psmile_mg_method_2d_dble (comp_info,   &
08854                     nlev, found, loc, range,          &
08855                     coords1, coords2, search_shape, control, &
08856                     x_coords, y_coords, coords_shape, &
08857                     grid_valid_shape, cyclic, period, &
08858                     chmin1, chmin2, chmax1, chmax2,   &
08859                     tol, ierror)
08860 
08861        Use PSMILe_common
08862 
08863        Type (Enddef_comp), Intent (In)   :: comp_info
08864        Integer,            Intent (In)   :: nlev
08865        Integer,            Intent (InOut):: found (*)
08866        Integer,            Intent (InOut):: loc   (ndim_2d, *)
08867        Integer,            Intent (In)   :: range (2, ndim_3d)
08868        Double Precision,   Intent (In)   :: coords1 (*)
08869        Double Precision,   Intent (In)   :: coords2 (*)
08870        Integer,            Intent (In)   :: search_shape (2, ndim_3d)
08871        Integer,            Intent (In)   :: control (2, ndim_3d)
08872        Integer,            Intent (In)   :: coords_shape (2, ndim_2d)
08873        Integer,            Intent (In)   :: grid_valid_shape (2, ndim_2d)
08874        Logical,            Intent (In)   :: cyclic (ndim_2d)
08875        Double Precision,   Intent (In)   :: period (ndim_2d)
08876        Double Precision,   Intent (In)   :: x_coords (*)
08877        Double Precision,   Intent (In)   :: y_coords (*)
08878        Double Precision,   Intent (In)   :: chmin1 (*), chmin2 (*)
08879        Double Precision,   Intent (In)   :: chmax1 (*), chmax2 (*)
08880        Double Precision,   Intent (In)   :: tol
08881        Integer,           Intent (Out)   :: ierror
08882     End Subroutine
08883 
08884     subroutine psmile_mg_method_3d_dble (comp_info, nlev,            &
08885                                      found, loc, range,              &
08886                                      coords1, coords2, coords3,      &
08887                                      shape, control,                 &
08888                                      method_id,                      &
08889                                      x_coords, y_coords, z_coords,   &
08890                                      coords_shape,                   &
08891                                      grid_valid_shape, cyclic,       &
08892                                      chmin1, chmin2, chmin3,         &
08893                                      chmax1, chmax2, chmax3,         &
08894                                      midp1,  midp2,  midp3,          &
08895                                      tol, ierror)
08896 
08897        Use PSMILe_common
08898 
08899        Type (Enddef_comp), Intent (In)  :: comp_info
08900        Integer,          Intent (In)    :: nlev
08901        Integer,          Intent (InOut) :: found (*)
08902        Integer,          Intent (InOut) :: loc   (ndim_3d, *)
08903        Integer,          Intent (In)    :: range (2, ndim_3d)
08904        Double Precision, Intent (In)    :: coords1 (*)
08905        Double Precision, Intent (In)    :: coords2 (*)
08906        Double Precision, Intent (In)    :: coords3 (*)
08907        Integer,          Intent (In)    :: shape (2, ndim_3d)
08908        Integer,          Intent (In)    :: control (2, ndim_3d)
08909        Integer,          Intent (In)    :: method_id
08910        Integer,          Intent (In)    :: coords_shape (2, ndim_3d)
08911        Integer,          Intent (In)    :: grid_valid_shape (2, ndim_3d)
08912        Logical,          Intent (In)    :: cyclic (ndim_3d)
08913        Double Precision, Intent (In)    :: x_coords (*)
08914        Double Precision, Intent (In)    :: y_coords (*)
08915        Double Precision, Intent (In)    :: z_coords (*)
08916        Double Precision, Intent (In)    :: chmin1 (*), chmin2 (*), chmin3 (*)
08917        Double Precision, Intent (In)    :: chmax1 (*), chmax2 (*), chmax3 (*)
08918        Double Precision, Intent (In)    :: midp1  (*), midp2  (*), midp3  (*)
08919        Double Precision, Intent (In)    :: tol
08920        Integer,          Intent (Out)   :: ierror
08921     End Subroutine
08922 
08923    subroutine psmile_mg_method_gauss2_dble (method_id, search_range,     &
08924                                             tgt_shape, tgt_coords_x,     &
08925                                             tgt_coords_y, loc_fnd_shape, &
08926                                             found, loc, virtual_cell,    &
08927                                             ierror)
08928 
08929       use psmile_common
08930 
08931       Integer, Intent (In)            :: method_id
08932       Integer, Intent (In)            :: search_range (2, ndim_3d)
08933       Integer, Intent (In)            :: loc_fnd_shape (2, ndim_3d)
08934       Integer, Intent (In)            :: tgt_shape (2, ndim_3d)
08935       Double Precision, Intent (In)   :: tgt_coords_x (tgt_shape(1,1):tgt_shape(2,1),  
08936                                                        tgt_shape(1,2):tgt_shape(2,2),  
08937                                                        tgt_shape(1,3):tgt_shape(2,3)), 
08938                                          tgt_coords_y (tgt_shape(1,1):tgt_shape(2,1),  
08939                                                        tgt_shape(1,2):tgt_shape(2,2),  
08940                                                        tgt_shape(1,3):tgt_shape(2,3))
08941       Integer, Intent (InOut)         :: found (loc_fnd_shape(1,1):loc_fnd_shape(2,1), 
08942                                                 loc_fnd_shape(1,2):loc_fnd_shape(2,2), 
08943                                                 loc_fnd_shape(1,3):loc_fnd_shape(2,3))
08944       Integer, Intent (InOut)         :: loc   (loc_fnd_shape(1,1):loc_fnd_shape(2,1), 
08945                                                 loc_fnd_shape(1,2):loc_fnd_shape(2,2), 
08946                                                 loc_fnd_shape(1,3):loc_fnd_shape(2,3))
08947       Integer, Intent (Out)           :: virtual_cell (loc_fnd_shape(1,1):loc_fnd_shape(2,1), 
08948                                                        loc_fnd_shape(1,2):loc_fnd_shape(2,2), 
08949                                                        loc_fnd_shape(1,3):loc_fnd_shape(2,3))
08950       Integer, Intent (Out)           :: ierror
08951    end subroutine
08952 
08953     subroutine psmile_mg_method_irreg2_dble (comp_info,    &
08954                     found, locations, search,              &
08955                     array, shape_2d, range_2d, control_2d, &
08956                            shape_1d, range_1d, control_1d, &
08957                     m_arrays, m_levdim,                    &
08958                     grid_id, method_id, tol, ierror)
08959 
08960        Use PSMILe_common
08961 
08962        Type (Enddef_comp), Intent (In)  :: comp_info
08963        Type (Enddef_search)             :: search
08964        Integer,            Intent (In)  :: grid_id, method_id
08965        Double Precision,   Intent (In)  :: tol
08966        Type (dble_vector), Intent (In)  :: array (        ndim_3d, search%npart)
08967        Integer,            Intent (In)  :: shape_2d   (2, ndim_3d, search%npart)
08968        Integer,            Intent (In)  :: range_2d   (2, ndim_3d, search%npart)
08969        Integer,            Intent (In)  :: control_2d (2, ndim_3d, search%npart)
08970        Integer,            Intent (In)  :: shape_1d   (2, ndim_3d, search%npart)
08971        Integer,            Intent (In)  :: range_1d   (2, ndim_3d, search%npart)
08972        Integer,            Intent (In)  :: control_1d (2, ndim_3d, search%npart)
08973        Type (Enddef_mg_double)          :: m_arrays
08974        Integer,            Intent (In)  :: m_levdim (ndim_3d)
08975        Type (integer_vector)            :: found     (search%npart, 2)
08976        Type (integer_vector)            :: locations (search%npart, 2)
08977        Integer,            Intent (Out) :: ierror
08978     End Subroutine
08979 
08980     subroutine psmile_mg_srch_nneigh_reg_dble (grid_id, nn_srch,     &
08981                     arrays, search_mode, nref_3d, grid_valid_shape,  &
08982                     neighbors_3d, nloc, num_neigh,                   &
08983                     sin_search, cos_search, z_search,                &
08984                     dist_dble, dim1, indices, jbeg, jend,            &
08985                     mask_array, mask_shape, mask_available,          &
08986                     tol, ierror)
08987 
08988        Use PSMILe_common
08989 
08990        Integer,          Intent (In)   :: grid_id
08991        Type (Extra_search_nn), Intent (In) :: nn_srch
08992        Type (Extra_search_dble)        :: arrays
08993        Integer,          Intent (In)   :: search_mode, nref_3d
08994        Integer,          Intent (In)   :: jbeg, jend, nloc
08995        Integer,          Intent (In)   :: grid_valid_shape (2, ndim_3d)
08996        Integer,          Intent (In)   ::       mask_shape (2, ndim_3d)
08997        Integer,          Intent (In)   :: num_neigh
08998        Integer,          Intent (In)   :: indices (:), dim1 (2)
08999        Double Precision, Intent (In)   :: sin_search (jbeg:jend, 2)
09000        Double Precision, Intent (In)   :: cos_search (jbeg:jend, 2)
09001        Double Precision, Intent (In)   ::   z_search (jbeg:jend)
09002        Logical,          Intent (In)   :: 
09003           mask_array (mask_shape (1,1):mask_shape (2,1), 
09004                       mask_shape (1,2):mask_shape (2,2), 
09005                       mask_shape (1,3): mask_shape (2,3))
09006        Logical,          Intent (In)   :: mask_available
09007        Double Precision, Intent (In)   :: tol
09008 !
09009        Double Precision, Intent (InOut) :: 
09010           dist_dble (dim1(1):dim1(2), num_neigh)
09011 !
09012        Integer,          Intent (Out)   :: 
09013           neighbors_3d (ndim_3d, nloc, num_neigh)
09014        Integer,          Intent (Out)   :: ierror
09015     End Subroutine
09016 
09017     subroutine psmile_mg_srch_nneigh_irr_dble (grid_id,        &
09018                     arrays, search_mode, nref_3d,              &
09019                     sin_values, cos_values, grid_valid_shape,  &
09020                     z_coords, coords_shape,                    &
09021                     neighbors_3d, nloc, num_neigh,             &
09022                     sin_search, cos_search, z_search,          &
09023                     dist_dble, dim1, indices, jbeg, jend,      &
09024                     mask_ind,                                  &
09025                     mask_array, mask_shape, mask_available,    &
09026                     tol, ierror)
09027 
09028        Use PSMILe_common
09029 
09030        Integer,          Intent (In)   :: grid_id
09031        Type (Extra_search_dble)        :: arrays
09032        Integer,          Intent (In)   :: search_mode, nref_3d
09033        Integer,          Intent (In)   :: jbeg, jend, nloc
09034        Integer,          Intent (In)   :: grid_valid_shape (2, ndim_3d)
09035        Integer,          Intent (In)   ::     coords_shape (2, ndim_3d)
09036        Integer,          Intent (In)   ::       mask_shape (2, ndim_3d)
09037        Double Precision, Intent (In)   :: 
09038           sin_values (grid_valid_shape(1,1):grid_valid_shape(2,1), 
09039                       grid_valid_shape(1,2):grid_valid_shape(2,2), 2)
09040        Double Precision, Intent (In)   :: 
09041           cos_values (grid_valid_shape(1,1):grid_valid_shape(2,1), 
09042                       grid_valid_shape(1,2):grid_valid_shape(2,2), 2)
09043        Double Precision, Intent (In)   :: 
09044           z_coords (coords_shape(1,3):coords_shape(2,3))
09045        Integer,          Intent (In)   :: num_neigh
09046        Integer,          Intent (In)   :: indices (:), dim1 (2)
09047        Double Precision, Intent (In)   :: sin_search (jbeg:jend, 2)
09048        Double Precision, Intent (In)   :: cos_search (jbeg:jend, 2)
09049        Double Precision, Intent (In)   ::   z_search (jbeg:jend)
09050        Logical,          Intent (In)   :: mask_ind   (jbeg:jend)
09051        Logical,          Intent (In)   :: 
09052           mask_array (mask_shape (1,1):mask_shape (2,1), 
09053                       mask_shape (1,2):mask_shape (2,2), 
09054                       mask_shape (1,3): mask_shape (2,3))
09055        Logical,          Intent (In)   :: mask_available
09056        Double Precision, Intent (In)   :: tol
09057 !
09058        Double Precision, Intent (InOut) :: 
09059           dist_dble (dim1(1):dim1(2), num_neigh)
09060 !
09061        Integer,          Intent (Out)   :: 
09062           neighbors_3d (ndim_3d, nloc, num_neigh)
09063        Integer,          Intent (Out)   :: ierror
09064     End Subroutine
09065 !
09066     subroutine psmile_print_3d_coord_dble (x, y, z, shape,     &
09067                                            ind, nloc, message)
09068        Use PSMILe_common
09069 
09070        Integer, Intent (In)            :: shape (2, ndim_3d)
09071        Double Precision, Intent (In)   :: x (*), y (*), z (*)
09072        Integer, Intent(In)             :: nloc
09073        Integer, Intent(In)             :: ind (ndim_3d, nloc)
09074        Character (len=*), Intent(In)   :: message
09075     End Subroutine
09076 !
09077     subroutine psmile_print_3d_reg_coord_dble (x, y, z, shape,     &
09078                                                ind, nloc, message)
09079        Use PSMILe_common
09080 
09081        Integer, Intent (In)            :: shape (2, ndim_3d)
09082        Double Precision, Intent (In)   :: x (*), y (*), z (*)
09083        Integer, Intent(In)             :: nloc
09084        Integer, Intent(In)             :: ind (ndim_3d, nloc)
09085        Character (len=*), Intent(In)   :: message
09086     End Subroutine
09087 !
09088     subroutine psmile_print_irreg2_coord_dble (x, y, z, shape,     &
09089                                                ind, nloc, message)
09090        Use PSMILe_common
09091 
09092        Integer, Intent (In)            :: shape (2, ndim_3d)
09093        Double Precision, Intent (In)   :: x (*), y (*), z (*)
09094        Integer, Intent(In)             :: nloc
09095        Integer, Intent(In)             :: ind (ndim_3d, nloc)
09096        Character (len=*), Intent(In)   :: message
09097     End Subroutine
09098 
09099 !   Put / Get
09100 
09101 !!$    We cannot include an interface description here since this
09102 !!$      is overloaded wrt. data_array by the calling routine prism_put.
09103 !!$
09104 !!$    Subroutine PSMILe_Put_dble ( field_id, julian_day, julian_sec, &
09105 !!$              julian_dayb, julian_secb, data_array, info, ierror )
09106 !!$
09107 !!$       use PRISM, only: PSMILe_Time_Struct
09108 !!$
09109 !!$       Integer, Intent (In)                 :: field_id
09110 !!$
09111 !!$       Double Precision, Intent (In)        :: julian_day, julian_dayb(2)
09112 !!$       Double Precision, Intent (In)        :: julian_sec, julian_secb(2)
09113 !!$
09114 !!$       Double Precision, Intent (In)        :: data_array(*)
09115 !!$       Integer, Intent (Out)                :: info, ierror
09116 !!$    End Subroutine
09117 
09118     subroutine psmile_put_field_dble (field_id, task_id, data_array, len, &
09119                                       nbr_fields, ierror)
09120 
09121        Integer, Intent (In)                 :: field_id
09122        Integer, Intent (In)                 :: task_id
09123        Integer, Intent (In)                 :: len, nbr_fields
09124        Double Precision, Intent (In)        :: data_array(*)
09125        Integer, Intent (Out)                :: ierror
09126     End Subroutine
09127 
09128     subroutine psmile_put_field_gauss2_dble (data_array, data_shape, nbr_fields, &
09129                                           srcloc, nparts, nloc, npoints, &
09130                                           dest, tag, comm, ierror)
09131        Use PSMILe_common
09132 
09133        Integer, Intent (In)          :: nloc, dest, tag, comm, nbr_fields
09134        Integer, Intent (In)          :: nparts
09135        Integer, Intent (In)          :: npoints (2, nparts)
09136        Integer, Intent (In)          :: data_shape (2, ndim_3d)
09137        Type (integer_vector), Intent (In) :: srcloc (2, nparts)
09138        Double Precision, Intent (In) :: data_array (*)
09139        Integer, Intent (Out)         :: ierror
09140     End Subroutine
09141 
09142     subroutine psmile_put_field_21d_dble (data_array, data_shape, nbr_fields, &
09143                                           srcloc, nparts, nloc, npoints, &
09144                                           dest, tag, comm, ierror)
09145        Use PSMILe_common
09146 
09147        Integer, Intent (In)          :: nloc, dest, tag, comm, nbr_fields
09148        Integer, Intent (In)          :: nparts
09149        Integer, Intent (In)          :: npoints (2, nparts)
09150        Integer, Intent (In)          :: data_shape (2, ndim_3d)
09151        Type (integer_vector), Intent (In) :: srcloc (2, nparts)
09152        Double Precision, Intent (In) :: data_array (*)
09153        Integer, Intent (Out)         :: ierror
09154     End Subroutine
09155 
09156     subroutine psmile_put_field_3d_dble (data_array, data_shape, nbr_fields, &
09157                                          srcloc, nparts, nloc, npoints, &
09158                                          dest, tag, comm, ierror)
09159        Use PSMILe_common
09160 
09161        Integer, Intent (In)          :: nloc, dest, tag, comm, nbr_fields
09162        Integer, Intent (In)          :: nparts
09163        Integer, Intent (In)          :: npoints (ndim_3d, nparts)
09164        Integer, Intent (In)          :: data_shape (2, ndim_3d)
09165        Type (integer_vector), Intent (In) :: srcloc (ndim_3d, nparts)
09166        Double Precision, Intent (In) :: data_array (*)
09167        Integer, Intent (Out)         :: ierror
09168     End Subroutine
09169 
09170     subroutine psmile_put_irr_field_dble (data_array, data_shape, nbr_fields,  &
09171                                           srcloc, npoints, srcars, nars, nloc, &
09172                                           dest, tag, comm, ierror)
09173        Use PSMILe_common
09174 
09175        Integer,          Intent (In)    :: nars, nloc, npoints, nbr_fields
09176        Integer,          Intent (In)    :: dest, tag, comm
09177        Integer,          Intent (In)    :: data_shape (2, ndim_3d)
09178        Integer,          Intent (In)    :: srcloc (ndim_3d, npoints)
09179        Integer,          Intent (In)    :: srcars (2, ndim_3d, nars)
09180        Double Precision, Intent (In)    :: data_array (*)
09181        Integer,          Intent (Out)   :: ierror
09182     End Subroutine
09183 
09184     subroutine psmile_get_field_dble (field_id, data_array, len, &
09185                                       nbr_fields, ierror)
09186 
09187        Integer,          Intent (In)    :: field_id
09188        Integer,          Intent (In)    :: len, nbr_fields
09189        Double Precision, Intent (InOut) :: data_array(*)
09190        Integer,          Intent (Out)   :: ierror
09191     End Subroutine
09192 
09193     subroutine psmile_get_irr_field_dble (data_array, data_shape, nbr_fields,  &
09194                                           dstijk, npoints, dstars, nars, nloc, &
09195                                           source, tag, comm, ierror)
09196        Use PSMILe_common
09197 
09198        Integer,          Intent (In)    :: nars, nloc, npoints, nbr_fields
09199        Integer,          Intent (In)    :: source, tag, comm
09200        Integer,          Intent (In)    :: data_shape (2, ndim_3d)
09201        Integer,          Intent (In)    :: dstijk (ndim_3d, npoints)
09202        Integer,          Intent (In)    :: dstars (2, ndim_3d, nars)
09203        Double Precision, Intent (InOut) :: data_array (*)
09204        Integer,          Intent (Out)   :: ierror
09205     End Subroutine
09206 
09207 !   Utilities
09208 
09209     subroutine psmile_copy_subarray_3d_double (dest_vector, size, &
09210                darray, idlow, idhigh, jdlow, jdhigh, kdlow, kdhigh, &
09211                sub, ierror)
09212        Use PSMILe_common
09213 
09214        Integer(kind=int64), Intent (In) :: size
09215        Integer, Intent (In)             :: idlow, idhigh, jdlow, jdhigh, 
09216                                            kdlow, kdhigh
09217        Integer, Intent (In)             :: sub (2, ndim_3d)
09218        Double Precision, Intent (In)    :: darray (idlow:idhigh, jdlow:jdhigh, 
09219                                                    kdlow:kdhigh)
09220        Double Precision, Intent (Out)   :: dest_vector (size)
09221        Integer, Intent (Out)            :: ierror
09222     End Subroutine
09223 
09224     subroutine psmile_copy_subarray_2d_double (dest_vector, size, &
09225                darray, idlow, idhigh, jdlow, jdhigh, &
09226                        ibeg,  iend,   jbeg,  jend,   ierror)
09227        Use PSMILe_common
09228        Integer(kind=int64), Intent (In) :: size
09229        Integer, Intent (In)             :: idlow, idhigh, jdlow, jdhigh
09230        Integer, Intent (In)             :: ibeg,  iend,   jbeg,  jend
09231        Double Precision, Intent (In)    :: darray (idlow:idhigh, jdlow:jdhigh)
09232        Double Precision, Intent (Out)   :: dest_vector (size)
09233        Integer, Intent (Out)            :: ierror
09234     End Subroutine
09235 
09236     subroutine psmile_tricu_gauss2_extra (search, grid_id, mask_array, &
09237                      mask_shape, mask_available, ibuf, len_item,       &
09238                      n_send, num_neigh, ierror)
09239        Use PSMILe_common
09240 
09241        Integer,              Intent (In)    :: mask_shape   (2, ndim_3d)
09242        Logical,              Intent (In)    ::         
09243           mask_array (mask_shape(1,1):mask_shape(2,1), 
09244                       mask_shape(1,2):mask_shape(2,2), 
09245                       mask_shape(1,3):mask_shape(2,3))
09246        Logical,              Intent (In)    :: mask_available
09247        Integer,              Intent (In)    :: grid_id
09248        Integer,              Intent (In)    :: len_item, n_send, num_neigh
09249        Type (Enddef_global_search), Intent (InOut) :: search
09250        Integer,              Intent (InOut) :: ibuf (len_item, n_send)
09251        Integer,              Intent (Out)   :: ierror
09252     End Subroutine
09253 
09254     subroutine psmile_trili_gauss2_extra (search, grid_id, mask_array, &
09255                      mask_shape, mask_available, ibuf, len_item,       &
09256                      n_send, num_neigh, ierror)
09257        Use PSMILe_common
09258 
09259        Integer,              Intent (In)    :: mask_shape   (2, ndim_3d)
09260        Logical,              Intent (In)    ::         
09261           mask_array (mask_shape(1,1):mask_shape(2,1), 
09262                       mask_shape(1,2):mask_shape(2,2), 
09263                       mask_shape(1,3):mask_shape(2,3))
09264        Logical,              Intent (In)    :: mask_available
09265        Integer,              Intent (In)    :: grid_id
09266        Integer,              Intent (In)    :: len_item, n_send, num_neigh
09267        Type (Enddef_global_search), Intent (InOut) :: search
09268        Integer,              Intent (InOut) :: ibuf (len_item, n_send)
09269        Integer,              Intent (Out)   :: ierror
09270     End Subroutine
09271 
09272 subroutine psmile_global_sum_compute_dble(data, data_size, &
09273                         nbr_fields, comm, global_sum, ierror)
09274    Use PSMILe_common
09275    implicit none
09276 
09277    integer, intent (in)          :: data_size
09278    integer, intent (in)          :: nbr_fields
09279    double complex, intent (in)   :: data(data_size, nbr_fields)
09280    integer, intent (in)          :: comm
09281    double complex, intent(out)   :: global_sum(nbr_fields)
09282    integer, intent(out)          :: ierror
09283 end subroutine
09284 
09285 subroutine psmile_global_sum_compute_int(data, data_size, &
09286                         nbr_fields, comm, global_sum, ierror)
09287    integer, intent (in) :: data_size
09288    integer, intent (in) :: nbr_fields
09289    integer, intent (in) :: data(data_size, nbr_fields)
09290    integer, intent (in) :: comm
09291    integer, intent(out) :: global_sum(nbr_fields)
09292    integer, intent(out) :: ierror
09293 end subroutine
09294 
09295 subroutine psmile_global_sum_send_dble(data, nbr_fields, &
09296                                        rank, ierror)
09297    integer, intent(in)          :: nbr_fields
09298    double complex, intent(in)   :: data(nbr_fields)
09299    integer, intent(in)          :: rank
09300    integer, intent(out)         :: ierror
09301 end subroutine
09302 
09303 subroutine psmile_global_sum_send_int(data, nbr_fields, &
09304                                       rank, ierror)
09305    integer, intent(in)  :: nbr_fields
09306    integer, intent(in)  :: data(nbr_fields)
09307    integer, intent(in)  :: rank
09308 
09309    integer, intent(out) :: ierror
09310 end subroutine
09311 
09312 subroutine psmile_global_sum_recv_dble(data, nbr_fields, &
09313                                        rank, ierror)
09314    integer, intent(in)          :: nbr_fields
09315    double complex, intent(out)  :: data(nbr_fields)
09316    integer, intent(in)          :: rank
09317    integer, intent(out)         :: ierror
09318 end subroutine
09319 
09320 subroutine psmile_global_sum_recv_int(data, nbr_fields, &
09321                                       rank, ierror)
09322    integer, intent(in)  :: nbr_fields
09323    integer, intent(out) :: data(nbr_fields)
09324    integer, intent(in)  :: rank
09325 
09326    integer, intent(out) :: ierror
09327 end subroutine
09328 
09329 subroutine psmile_ddadd_mpi_callback (dda, ddb, len, itype)
09330    integer, intent(in)           :: len, itype
09331    double complex, intent(in)    :: dda(len)
09332    double complex, intent(inout) :: ddb(len)
09333 end subroutine
09334 
09335 ! ----------------------------------------------------------------------------
09336 ! Interfaces of PSMILe transformer routines
09337 ! ----------------------------------------------------------------------------
09338 
09339     subroutine psmile_trs_inform(ida_args, id_trs_rank, id_err)
09340        Use PSMILe_Common, only : PSMILe_Trans_header_length
09341        Integer, Dimension(PSMILe_Trans_header_length), Intent (In)             :: ida_args
09342        Integer, Intent (In)                            :: id_trs_rank
09343        Integer, Intent (Out)                           :: id_err
09344     End Subroutine
09345 
09346     subroutine psmile_trs_set_src_epio3d_dble(id_epio_id,            &
09347                                               id_trans_rank,         &
09348                                               id_src_epio_size,      &
09349                                               id_nbr_corner,         &
09350                                               dda_src_epio_lat,      &
09351                                               dda_src_epio_lon,      &
09352                                               dda_src_epio_z,        &
09353                                               id_src_mask,           &
09354                                               ida_src_epio_mask,     &
09355                                               id_err                 )
09356       Integer, Intent (Out)                             :: id_epio_id
09357       Integer, Intent (Out)                             :: id_trans_rank
09358       Integer, Intent (In)                              :: id_src_epio_size
09359       Integer, Intent (In)                              :: id_nbr_corner
09360       Double Precision,Dimension(id_src_epio_size),Intent(In)::dda_src_epio_lat
09361       Double Precision,Dimension(id_src_epio_size),Intent(In)::dda_src_epio_lon
09362       Double Precision,Dimension(id_src_epio_size),Intent(In)::dda_src_epio_z
09363       Integer, Intent (In)                              :: id_src_mask
09364       Integer, Dimension(id_src_epio_size), Intent (In) :: ida_src_epio_mask
09365       Integer, Intent (Out)                             :: id_err
09366     End Subroutine
09367 
09368     subroutine psmile_trs_set_src_epio3d_real(id_epio_id,            &
09369                                               id_trans_rank,         &
09370                                               id_src_epio_size,      &
09371                                               id_nbr_corner,         &
09372                                               rda_src_epio_lat,      &
09373                                               rda_src_epio_lon,      &
09374                                               rda_src_epio_z,        &
09375                                               id_src_mask,           &
09376                                               ida_src_epio_mask,     &
09377                                               id_err                 )
09378       Integer, Intent (Out)                             :: id_epio_id
09379       Integer, Intent (Out)                             :: id_trans_rank
09380       Integer, Intent (In)                              :: id_src_epio_size
09381       Integer, Intent (In)                              :: id_nbr_corner
09382       Real,Dimension(id_src_epio_size),Intent(In)       :: rda_src_epio_lat
09383       Real,Dimension(id_src_epio_size),Intent(In)       :: rda_src_epio_lon
09384       Real,Dimension(id_src_epio_size),Intent(In)       :: rda_src_epio_z
09385       Integer, Intent (In)                              :: id_src_mask
09386       Integer, Dimension(id_src_epio_size), Intent (In) :: ida_src_epio_mask
09387       Integer, Intent (Out)                             :: id_err
09388     End Subroutine
09389 
09390     subroutine psmile_trs_set_tgt_epio3d_dble(id_epio_id,            &
09391                                               id_trans_rank,         &
09392                                               id_tgt_epio_size,      &
09393                                               id_nbr_corner,         &
09394                                               dda_tgt_epio_lat,      &
09395                                               dda_tgt_epio_lon,      &
09396                                               dda_tgt_epio_z,        &
09397                                               id_tgt_mask,           &
09398                                               ida_tgt_epio_mask,     &
09399                                               id_err                 )
09400       Integer, Intent (In)                              :: id_epio_id
09401       Integer, Intent (In)                              :: id_trans_rank
09402       Integer, Intent (In)                              :: id_tgt_epio_size
09403       Integer, Intent (In)                              :: id_nbr_corner
09404       Double Precision,Dimension(id_tgt_epio_size),Intent(In)::dda_tgt_epio_lat
09405       Double Precision,Dimension(id_tgt_epio_size),Intent(In)::dda_tgt_epio_lon
09406       Double Precision,Dimension(id_tgt_epio_size),Intent(In)::dda_tgt_epio_z
09407       Integer, Intent (In)                              :: id_tgt_mask
09408       Integer, Dimension(id_tgt_epio_size), Intent (In) :: ida_tgt_epio_mask
09409       Integer, Intent (Out)                             :: id_err
09410     End Subroutine
09411 
09412     subroutine psmile_trs_set_tgt_epio3d_real(id_epio_id,            &
09413                                               id_trans_rank,         &
09414                                               id_tgt_epio_size,      &
09415                                               id_nbr_corner,         &
09416                                               rda_tgt_epio_lat,      &
09417                                               rda_tgt_epio_lon,      &
09418                                               rda_tgt_epio_z,        &
09419                                               id_tgt_mask,           &
09420                                               ida_tgt_epio_mask,     &
09421                                               id_err                 )
09422       Integer, Intent (In)                              :: id_epio_id
09423       Integer, Intent (In)                              :: id_trans_rank
09424       Integer, Intent (In)                              :: id_tgt_epio_size
09425       Integer, Intent (In)                              :: id_nbr_corner
09426       Real,Dimension(id_tgt_epio_size),Intent(In)       :: rda_tgt_epio_lat
09427       Real,Dimension(id_tgt_epio_size),Intent(In)       :: rda_tgt_epio_lon
09428       Real,Dimension(id_tgt_epio_size),Intent(In)       :: rda_tgt_epio_z
09429       Integer, Intent (In)                              :: id_tgt_mask
09430       Integer, Dimension(id_tgt_epio_size), Intent (In) :: ida_tgt_epio_mask
09431       Integer, Intent (Out)                             :: id_err
09432     End Subroutine
09433 
09434     subroutine psmile_trs_set_triple_links(id_trans_out_id,     &
09435                                            id_trans_in_id,      &
09436                                            id_epio_id,          &
09437                                            id_trans_rank,       &
09438                                            id_err               )
09439       Integer, Intent (In)              :: id_trans_out_id
09440       Integer, Intent (In)              :: id_trans_in_id
09441       Integer, Intent (In)              :: id_epio_id
09442       Integer, Intent (In)              :: id_trans_rank
09443       Integer, Intent (Out)             :: id_err
09444     End Subroutine
09445 
09446     subroutine psmile_trs_put_int(id_transient_out_id, &
09447                                   id_epio_id,          &
09448                                   id_trans_rank,       &
09449                                   id_epio_field_size,  &
09450                                   ida_field,           &
09451                                   id_nbr_fields,       &
09452                                   id_err)
09453       Integer, Intent (In)                     :: id_transient_out_id
09454       Integer, Intent (In)                     :: id_epio_id
09455       Integer, Intent (In)                     :: id_trans_rank
09456       Integer, Intent (In)                     :: id_epio_field_size
09457       Integer, Dimension(id_epio_field_size), Intent (In) :: ida_field
09458       Integer, Intent (In)                     :: id_nbr_fields
09459       Integer, Intent (Out)                    :: id_err
09460     End Subroutine
09461 
09462     subroutine psmile_trs_put_real(id_transient_out_id, &
09463                                    id_epio_id,          &
09464                                    id_trans_rank,       &
09465                                    id_epio_field_size,  &
09466                                    rda_field,           &
09467                                    id_nbr_fields,       &
09468                                    id_err)
09469       Integer, Intent (In)                     :: id_transient_out_id
09470       Integer, Intent (In)                     :: id_epio_id
09471       Integer, Intent (In)                     :: id_trans_rank
09472       Integer, Intent (In)                     :: id_epio_field_size
09473       Real, Dimension(id_epio_field_size), Intent (In) :: rda_field
09474       Integer, Intent (In)                     :: id_nbr_fields
09475       Integer, Intent (Out)                    :: id_err
09476     End Subroutine
09477 
09478     subroutine psmile_trs_put_dble(id_transient_out_id, &
09479                                    id_epio_id,          &
09480                                    id_trans_rank,       &
09481                                    id_epio_field_size,  &
09482                                    dda_field,           &
09483                                    id_nbr_fields,       &
09484                                    id_err)
09485       Integer, Intent (In)                     :: id_transient_out_id
09486       Integer, Intent (In)                     :: id_epio_id
09487       Integer, Intent (In)                     :: id_trans_rank
09488       Integer, Intent (In)                     :: id_epio_field_size
09489       Double Precision, Dimension(id_epio_field_size), Intent (In) :: dda_field
09490       Integer, Intent (In)                     :: id_nbr_fields
09491       Integer, Intent (Out)                    :: id_err
09492     End Subroutine
09493 
09494     subroutine psmile_trs_get_int(id_transient_in_id, &
09495                                   id_epio_id,         &
09496                                   id_trans_rank,      &
09497                                   id_epio_field_size, &
09498                                   ida_field,          &
09499                       id_nbr_fields,      &
09500                                   id_err)
09501       Integer, Intent (In)                     :: id_transient_in_id
09502       Integer, Intent (In)                     :: id_epio_id
09503       Integer, Intent (In)                     :: id_trans_rank
09504       Integer, Intent (In)                     :: id_epio_field_size
09505       Integer, Dimension(id_epio_field_size), Intent (Out) :: ida_field
09506       Integer, Intent (In)                     :: id_nbr_fields
09507       Integer, Intent (Out)                    :: id_err
09508     End Subroutine
09509 
09510     subroutine psmile_trs_get_real(id_transient_in_id, &
09511                                    id_epio_id,         &
09512                                    id_trans_rank,      &
09513                                    id_epio_field_size, &
09514                                    rda_field,          &
09515                    id_nbr_fields,      &
09516                                    id_err)
09517       Integer, Intent (In)                     :: id_transient_in_id
09518       Integer, Intent (In)                     :: id_epio_id
09519       Integer, Intent (In)                     :: id_trans_rank
09520       Integer, Intent (In)                     :: id_epio_field_size
09521       Real, Dimension(id_epio_field_size), Intent (Out) :: rda_field
09522       Integer, Intent (In)                     :: id_nbr_fields
09523       Integer, Intent (Out)                    :: id_err
09524     End Subroutine
09525 
09526     subroutine psmile_trs_get_dble(id_transient_in_id, &
09527                                    id_epio_id,         &
09528                                    id_trans_rank,      &
09529                                    id_epio_field_size, &
09530                                    dda_field,          &
09531                    id_nbr_fields,      &
09532                                    id_err)
09533       Integer, Intent (In)                     :: id_transient_in_id
09534       Integer, Intent (In)                     :: id_epio_id
09535       Integer, Intent (In)                     :: id_trans_rank
09536       Integer, Intent (In)                     :: id_epio_field_size
09537       Double Precision, Dimension(id_epio_field_size), Intent (Out) :: dda_field
09538       Integer, Intent (In)                     :: id_nbr_fields
09539       Integer, Intent (Out)                    :: id_err
09540     End Subroutine
09541 
09542     subroutine psmile_trs_give_neighbors3d (id_epio_id,           &
09543                                             id_trans_rank,        &
09544                                             id_epio_tgt_size,     &
09545                                             id_nb_neighbors,      &
09546                                             ida_neighbor_indices, &
09547                                             id_err)
09548 
09549       Integer, Intent (In)                     :: id_epio_id
09550       Integer, Intent (In)                     :: id_trans_rank
09551       Integer, Intent (In)                     :: id_epio_tgt_size
09552       Integer, Intent (In)                     :: id_nb_neighbors
09553       Integer, Dimension(id_nb_neighbors*id_epio_tgt_size), Intent (In) :: 
09554                                               ida_neighbor_indices
09555       Integer, Intent (Out)                    :: id_err
09556 
09557     End Subroutine
09558 
09559     subroutine psmile_trs_give_neighbors_gauss (id_epio_id,           &
09560                                                 id_trans_rank,        &
09561                                                 id_epio_tgt_size,     &
09562                                                 id_nb_neighbors,      &
09563                                                 ida_neighbor_indices, &
09564                                                 ida_neighbor_bascule, &
09565                                                 id_err)
09566 
09567       Integer, Intent (In)                     :: id_epio_id
09568       Integer, Intent (In)                     :: id_trans_rank
09569       Integer, Intent (In)                     :: id_epio_tgt_size
09570       Integer, Intent (In)                     :: id_nb_neighbors
09571       Integer, Dimension(id_nb_neighbors*id_epio_tgt_size), Intent (In) :: 
09572                                               ida_neighbor_indices
09573       Integer, Dimension(id_epio_tgt_size), Intent (In) :: 
09574                                               ida_neighbor_bascule
09575       Integer, Intent (Out)                    :: id_err
09576 
09577     End Subroutine
09578 
09579     subroutine psmile_trs_give_neighcells3d(id_epio_id,        &
09580                                             id_trans_rank,     &
09581                                             id_epio_tgt_size,  &
09582                                             ida_nbsrccells_pertgtpt,     &
09583                                             id_source_size,    &
09584                                             id_nb_corners,     &
09585                                             ida_source_cell_index, &
09586                                             ida_corner_index,  &
09587                                             id_grid_type,      &
09588                                             id_err)
09589 
09590       Integer, Intent (In)                     :: id_epio_id
09591       Integer, Intent (In)                     :: id_trans_rank
09592       Integer, Intent (In)                     :: id_epio_tgt_size
09593       Integer, Intent (In)                     :: id_source_size
09594       Integer, Intent (In)                     :: id_nb_corners
09595       Integer, Intent (In)                     :: id_grid_type
09596       Integer, Dimension(id_epio_tgt_size), Intent (In) :: 
09597                                                ida_nbsrccells_pertgtpt
09598       Integer, Dimension(id_source_size), INTENT (In)   :: 
09599                                               ida_source_cell_index
09600       Integer, Dimension(id_nb_corners*id_source_size), Intent (In) :: 
09601                                                ida_corner_index
09602       Integer, Intent (Out)                    :: id_err
09603     End Subroutine
09604 
09605     subroutine psmile_trs_trili_srch_neigh3d (                            &
09606          ila_grid1_dims, il_grid1_size, ila_grid1_mask,                   &
09607          ila_grid1_center_lon, ila_grid1_center_lat,ila_grid1_center_z,   &
09608          ila_grid2_dims, il_grid2_size, ila_grid2_mask,                   &
09609          ila_grid2_center_lon, ila_grid2_center_lat,ila_grid2_center_z,   &
09610          il_num_srch_bin, il_restrict_type, ila_neighbors, il_err)
09611       Integer, Dimension(3), Intent (In) :: ila_grid1_dims
09612       Integer, Dimension(3), Intent (In) :: ila_grid2_dims
09613       Integer, Intent (In) :: il_grid1_size
09614       Integer, Intent (In) :: il_grid2_size
09615       Integer, Dimension(il_grid1_size), Intent (In) :: ila_grid1_mask
09616       Integer, Dimension(il_grid2_size), Intent (In) :: ila_grid2_mask
09617       Real, Dimension(il_grid1_size), Intent (Inout) :: ila_grid1_center_lon
09618       Real, Dimension(il_grid1_size), Intent (Inout) :: ila_grid1_center_lat
09619       Real, Dimension(il_grid1_size), Intent (Inout) :: ila_grid1_center_z
09620       Real, Dimension(il_grid2_size), Intent (Inout) :: ila_grid2_center_lon
09621       Real, Dimension(il_grid2_size), Intent (Inout) :: ila_grid2_center_lat
09622       Real, Dimension(il_grid2_size), Intent (Inout) :: ila_grid2_center_z
09623       Integer, Intent (In) :: il_num_srch_bin
09624       Integer, Intent (In) :: il_restrict_type
09625       Integer, Dimension(il_grid2_size,8), Intent (Out) :: ila_neighbors
09626       Integer, Intent (Out)               :: il_err
09627     End Subroutine
09628 
09629      subroutine psmile_trs_finalize(id_trans_rank, id_err)
09630        Integer, Intent (In)                       :: id_trans_rank
09631        Integer, Intent (Out)                      :: id_err
09632      End Subroutine
09633 
09634 ! ----------------------------------------------------------------------------
09635 ! Interfaces of internal PSMILe I/O routines
09636 ! ----------------------------------------------------------------------------
09637 
09638     subroutine psmile_io_derive_pelist(id_comm_appl,id_comp_id, &
09639                                        comp_info,pelist,ierror)
09640       Use PSMILe_common
09641       Integer,Intent(In) :: id_comm_appl
09642       Integer,Intent(In) :: id_comp_id
09643       Type (Enddef_comp), Intent (In) :: comp_info
09644       Integer,Intent(Out):: pelist(*)
09645       Integer,Intent(Out):: ierror
09646 
09647     End Subroutine
09648 
09649     subroutine psmile_io_init ( ierror )
09650       Integer, Intent (Out)               :: ierror
09651     End Subroutine
09652 
09653     subroutine psmile_io_init_comp (id_comp_id, ierror)
09654        Integer, Intent (In)            :: id_comp_id
09655        Integer, Intent (Out)           :: ierror
09656     End Subroutine
09657 
09658     subroutine psmile_io_init_pelist (id_comp_id, comp_info, ierror)
09659 
09660        Use PSMILe_common
09661 
09662        Integer, Intent (In)            :: id_comp_id
09663        Type (Enddef_comp), Intent (In) :: comp_info
09664        Integer, Intent (Out)           :: ierror
09665     End Subroutine
09666 
09667     subroutine psmile_io_init_cf (ierror)
09668        Integer, Intent (Out)           :: ierror
09669     End Subroutine
09670 
09671     subroutine psmile_io_finalize (ierror)
09672        Integer, Intent (Out)           :: ierror
09673     End Subroutine
09674 
09675     subroutine psmile_io_close (ierror)
09676        Integer, Intent (Out)           :: ierror
09677     End Subroutine
09678 
09679     subroutine psmile_def_domains(ierror)
09680       Integer, Intent (Out)           :: ierror
09681     End Subroutine
09682 
09683     subroutine psmile_def_metadata (id_varid,ierror)
09684       Integer, Intent (In)            :: id_varid
09685       Integer, Intent (Out)           :: ierror
09686     End Subroutine
09687 
09688     subroutine psmile_enddef_metadata (ierror)
09689       Integer, Intent (Out)           :: ierror
09690     End Subroutine
09691 
09692     subroutine psmile_open_files ( ierror )
09693       Integer, Intent (Out)           :: ierror
09694     End Subroutine
09695 
09696     subroutine psmile_open_file_byid (varid, taskid, date, ierror)
09697       Use PRISM_Constants
09698       Integer, Intent (In)                 :: varid,taskid
09699       Type(PRISM_Time_Struct), Intent (In) :: date
09700       Integer, Intent (Out)                :: ierror
09701     End Subroutine
09702 
09703     subroutine  psmile_check_restart(id_varid,id_taskid,id_info,ierror)
09704       Integer, Intent (In)                 :: id_varid
09705       Integer, Intent (In)                 :: id_taskid
09706       Integer, Intent (Out)                :: id_info
09707       Integer, Intent (Out)                :: ierror
09708     End Subroutine
09709 
09710     subroutine psmile_close_files (ierror)
09711        Integer, Intent (Out)          :: ierror
09712     End Subroutine
09713 
09714     subroutine psmile_io_cleanup (ierror)
09715        Integer, Intent (Out)          :: ierror
09716     End Subroutine
09717 
09718     subroutine psmile_close_file_byid (varid, taskid, ierror)
09719        Integer, Intent (In)           :: varid, taskid
09720        Integer, Intent (Out)          :: ierror
09721     End Subroutine
09722 
09723     subroutine psmile_check_file_size (varids, size, flag, ierror)
09724       Integer, Intent (In)           :: varids(:)
09725       Integer, Intent (In)           :: size
09726       Logical, Intent (Out)          :: flag
09727       Integer, Intent (Out)          :: ierror
09728     End Subroutine
09729 
09730     subroutine psmile_io_scandir(basename,file_list,len_of_list,no_of_files,ierror)
09731       Character(len=*),Intent(in)    ::basename
09732       Character(len=*),Intent(out)   ::file_list(*)
09733       Integer,Intent(in)             ::len_of_list
09734       Integer,Intent(out)            ::no_of_files
09735       Integer,Intent(out)            ::ierror
09736     End Subroutine
09737 
09738     subroutine psmile_io_scandir_no_of_files(basename,no_of_files,ierror)
09739       Character(len=*),Intent(in)    ::basename
09740       Integer,Intent(out)            ::no_of_files
09741       Integer,Intent(out)            ::ierror
09742     End Subroutine
09743 
09744     subroutine psmile_write_meta_byid(id_varid,id_taskid,ierror)
09745       Integer,Intent(In) :: id_varid,id_taskid
09746       Integer,Intent(Out) :: ierror
09747     End Subroutine
09748 
09749     subroutine psmile_write_meta(ierror)
09750       Integer,Intent(Out) :: ierror
09751     End Subroutine
09752 
09753 !!$    We cannot include an interface description here since this
09754 !!$      is overloaded wrt. data_array by the calling routine prism_put.
09755 
09756 !!$    Subroutine psmile_write_byid_dble(id_varid,id_taskid &
09757 !!$                                     ,dd_a,ju_day,ju_sec,ierror)
09758 !!$      integer,intent(in)::id_varid,id_taskid
09759 !!$      integer,intent(out):: ierror
09760 !!$      double precision, Intent (In) :: dd_a(*)
09761 !!$      double precision, Intent (In) :: ju_day, ju_sec
09762 !!$    End Subroutine
09763 !!$
09764 !!$    Subroutine psmile_write_byid_real(id_varid,id_taskid &
09765 !!$                                     ,rd_a,ju_day,ju_sec,ierror)
09766 !!$      integer,intent(in)::id_varid,id_taskid
09767 !!$      integer,intent(out):: ierror
09768 !!$      real             , Intent (In) :: rd_a(*)
09769 !!$      double precision, Intent (In) :: ju_day, ju_sec
09770 !!$    End Subroutine
09771 !!$
09772 !!$    Subroutine psmile_write_byid_int(id_varid,id_taskid &
09773 !!$                                    ,id_a,ju_day,ju_sec,ierror)
09774 !!$      integer,intent(in)::id_varid,id_taskid
09775 !!$      integer,intent(out):: ierror
09776 !!$      integer          , Intent (In) :: id_a(*)
09777 !!$      double precision, Intent (In) :: ju_day, ju_sec
09778 !!$    End Subroutine
09779 
09780     subroutine psmile_read_byid_dble(id_varid,id_taskid,rd_a,ju_day,ju_sec &
09781                                     ,ju_dayb,ju_secb,timeop,ierror)
09782       Integer,Intent(in)::id_varid,id_taskid
09783       Logical,Intent(out):: timeop
09784       Integer,Intent(out):: ierror
09785       Double Precision             , Intent (InOut) :: rd_a(*)
09786       Double Precision, Intent (In) :: ju_day, ju_sec
09787       Double Precision, Intent (In) :: ju_dayb(2), ju_secb(2)
09788     End Subroutine
09789 
09790     subroutine psmile_read_byid_real(id_varid,id_taskid,rd_a,ju_day,ju_sec &
09791                                     ,ju_dayb,ju_secb,timeop,ierror)
09792       Integer,Intent(in)::id_varid,id_taskid
09793       Logical,Intent(out):: timeop
09794       Integer,Intent(out):: ierror
09795       Real             , Intent (InOut) :: rd_a(*)
09796       Double Precision, Intent (In) :: ju_day, ju_sec
09797       Double Precision, Intent (In) :: ju_dayb(2), ju_secb(2)
09798     End Subroutine
09799 
09800     subroutine psmile_read_byid_int(id_varid,id_taskid,rd_a,ju_day,ju_sec &
09801                                    ,ju_dayb,ju_secb,timeop,ierror)
09802       Integer,Intent(in)::id_varid,id_taskid
09803       Logical,Intent(out):: timeop
09804       Integer,Intent(out):: ierror
09805       Integer             , Intent (InOut) :: rd_a(*)
09806       Double Precision, Intent (In) :: ju_day, ju_sec
09807       Double Precision, Intent (In) :: ju_dayb(2), ju_secb(2)
09808     End Subroutine
09809 
09810 ! ----------------------------------------------------------------------------
09811 ! Interfaces of internal PSMILe reduction routines
09812 ! ----------------------------------------------------------------------------
09813 
09814     subroutine psmile_multi_reduce_int ( task, shape_in, data_in, &
09815                                         shape_out, data_out, mask, ierror )
09816       Integer, Intent (In)  :: task
09817       Integer, Intent (In)  :: shape_in(2,6)
09818       Integer, Intent (In)  :: shape_out(2,6)
09819       Integer, Intent (In)  :: data_in  ( shape_in(1,1) : shape_in (2,1), 
09820                                           shape_in(1,2) : shape_in (2,2), 
09821                                           shape_in(1,3) : shape_in (2,3), 
09822                                           shape_in(1,4) : shape_in (2,4), 
09823                                           shape_in(1,5) : shape_in (2,5), 
09824                                           shape_in(1,6) : shape_in (2,6) )
09825       Logical, Intent (In)  :: mask     ( shape_in(1,1) : shape_in (2,1), 
09826                                           shape_in(1,2) : shape_in (2,2), 
09827                                           shape_in(1,3) : shape_in (2,3), 
09828                                           shape_in(1,4) : shape_in (2,4), 
09829                                           shape_in(1,5) : shape_in (2,5) )
09830       Integer, Intent (Out) :: data_out ( shape_out(1,1) : shape_out (2,1), 
09831                                           shape_out(1,2) : shape_out (2,2), 
09832                                           shape_out(1,3) : shape_out (2,3), 
09833                                           shape_out(1,4) : shape_out (2,4), 
09834                                           shape_out(1,5) : shape_out (2,5), 
09835                                           shape_out(1,6) : shape_out (2,6) )
09836       Integer, Intent (Out) :: ierror
09837 
09838     End Subroutine
09839 
09840     subroutine psmile_multi_reduce_real ( task, shape_in, data_in, &
09841                                         shape_out, data_out, mask, ierror )
09842       Integer, Intent (In)  :: task
09843       Integer, Intent (In)  :: shape_in(2,6)
09844       Integer, Intent (In)  :: shape_out(2,6)
09845       Real, Intent (In)     :: data_in  ( shape_in(1,1) : shape_in (2,1), 
09846                                           shape_in(1,2) : shape_in (2,2), 
09847                                           shape_in(1,3) : shape_in (2,3), 
09848                                           shape_in(1,4) : shape_in (2,4), 
09849                                           shape_in(1,5) : shape_in (2,5), 
09850                                           shape_in(1,6) : shape_in (2,6) )
09851       Logical, Intent (In)  :: mask     ( shape_in(1,1) : shape_in (2,1), 
09852                                           shape_in(1,2) : shape_in (2,2), 
09853                                           shape_in(1,3) : shape_in (2,3), 
09854                                           shape_in(1,4) : shape_in (2,4), 
09855                                           shape_in(1,5) : shape_in (2,5) )
09856       Real, Intent (Out)    :: data_out ( shape_out(1,1) : shape_out (2,1), 
09857                                           shape_out(1,2) : shape_out (2,2), 
09858                                           shape_out(1,3) : shape_out (2,3), 
09859                                           shape_out(1,4) : shape_out (2,4), 
09860                                           shape_out(1,5) : shape_out (2,5), 
09861                                           shape_out(1,6) : shape_out (2,6) )
09862       Integer, Intent (Out) :: ierror
09863 
09864     End Subroutine
09865 
09866     subroutine psmile_multi_reduce_dble ( task, shape_in, data_in, &
09867                                         shape_out, data_out, mask, ierror )
09868       Integer, Intent (In)           :: task
09869       Integer, Intent (In)           :: shape_in(2,6)
09870       Integer, Intent (In)           :: shape_out(2,6)
09871       Double Precision, Intent (In)  :: data_in  ( shape_in(1,1) : shape_in (2,1), 
09872                                                    shape_in(1,2) : shape_in (2,2), 
09873                                                    shape_in(1,3) : shape_in (2,3), 
09874                                                    shape_in(1,4) : shape_in (2,4), 
09875                                                    shape_in(1,5) : shape_in (2,5), 
09876                                                    shape_in(1,6) : shape_in (2,6) )
09877       Logical, Intent (In)           :: mask     ( shape_in(1,1) : shape_in (2,1), 
09878                                                    shape_in(1,2) : shape_in (2,2), 
09879                                                    shape_in(1,3) : shape_in (2,3), 
09880                                                    shape_in(1,4) : shape_in (2,4), 
09881                                                    shape_in(1,5) : shape_in (2,5) )
09882       Double Precision, Intent (Out) :: data_out ( shape_out(1,1) : shape_out (2,1), 
09883                                                    shape_out(1,2) : shape_out (2,2), 
09884                                                    shape_out(1,3) : shape_out (2,3), 
09885                                                    shape_out(1,4) : shape_out (2,4), 
09886                                                    shape_out(1,5) : shape_out (2,5), 
09887                                                    shape_out(1,6) : shape_out (2,6) )
09888       Integer, Intent (Out)          :: ierror
09889 
09890     End Subroutine
09891 
09892     subroutine psmile_loc_trans_int ( task, nbr_fields, &
09893                                       len_in,  data_in,  &
09894                                       len_out, data_out, field_id )
09895       Integer, Intent (In)                :: task
09896       Integer, Intent (In)                :: nbr_fields
09897       Integer, Intent (In)                :: len_in
09898       Integer, Intent (In)                :: data_in(len_in,nbr_fields)
09899       Integer, Intent (In)                :: len_out
09900       Integer, Intent (InOut)             :: data_out(len_out,nbr_fields)
09901       Integer, Optional, Intent (In)      :: field_id
09902 
09903     End Subroutine
09904 
09905     subroutine psmile_loc_trans_real ( task, nbr_fields, &
09906                                        len_in,  data_in,  &
09907                                        len_out, data_out, field_id )
09908       Integer, Intent (In)                :: task
09909       Integer, Intent (In)                :: nbr_fields
09910       Integer, Intent (In)                :: len_in
09911       Real, Intent (In)                   :: data_in(len_in,nbr_fields)
09912       Integer, Intent (In)                :: len_out
09913       Real, Intent (InOut)                :: data_out(len_out,nbr_fields)
09914       Integer, Optional, Intent (In)      :: field_id
09915 
09916     End Subroutine
09917 
09918     subroutine psmile_loc_trans_dble ( task, nbr_fields, &
09919                                        len_in,  data_in,  &
09920                                        len_out, data_out, field_id )
09921       Integer, Intent (In)                :: task
09922       Integer, Intent (In)                :: nbr_fields
09923       Integer, Intent (In)                :: len_in
09924       Double Precision, Intent (In)       :: data_in(len_in,nbr_fields)
09925       Integer, Intent (In)                :: len_out
09926       Double Precision, Intent (InOut)    :: data_out(len_out,nbr_fields)
09927       Integer, Optional, Intent (In)      :: field_id
09928 
09929     End Subroutine
09930 
09931     subroutine psmile_get_initial_date ( initial_date, ierror )
09932       Use PRISM_Constants
09933       Type(PRISM_Time_struct), Intent(Out) :: initial_date
09934       Integer, Intent(Out)                  :: ierror
09935     End Subroutine
09936 
09937     Subroutine psmile_set_userdef (var_id, side, chan_id, ierror)
09938       Integer, intent (In)                :: var_id
09939       Integer, intent (In)                :: side
09940       Integer, intent (In)                :: chan_id
09941       Integer, Intent (Out)               :: ierror
09942     End Subroutine psmile_set_userdef
09943 !
09944 !==================================================================
09945 !
09946    ! The following four interfaces are here instead of psmile_common.F90
09947    ! (where they belong), because someone forgot to add the import
09948    ! statement to Fortran 90...
09949    subroutine psmile_init_enddef_msg_inters (msg_intersections)
09950       use psmile_common, only : enddef_msg_intersections
09951 
09952       type (enddef_msg_intersections), intent (out) :: msg_intersections
09953    end subroutine psmile_init_enddef_msg_inters
09954 
09955    subroutine psmile_pack_msg_intersections (msg_intersections, buffer)
09956       use psmile_common, only : enddef_msg_intersections, nd_msgint
09957 
09958       type (enddef_msg_intersections), intent (in) :: msg_intersections
09959       integer, intent (inout)                      :: buffer(nd_msgint)
09960    end subroutine psmile_pack_msg_intersections
09961 
09962    subroutine psmile_unpack_msg_intersections (msg_intersections, buffer)
09963       use psmile_common, only : enddef_msg_intersections, nd_msgint
09964 
09965       type (enddef_msg_intersections), intent (out) :: msg_intersections
09966       integer, intent (inout)                       :: buffer(nd_msgint)
09967    end subroutine psmile_unpack_msg_intersections
09968 
09969    subroutine psmile_copy_msg_intersections (msg_intersections_to, &
09970                                              msg_intersections_from)
09971       use psmile_common, only : enddef_msg_intersections
09972 
09973       type (enddef_msg_intersections), intent (in)  :: msg_intersections_from
09974       type (enddef_msg_intersections), intent (out) :: msg_intersections_to
09975    end subroutine psmile_copy_msg_intersections
09976 
09977    subroutine psmile_init_enddef_msg_locs (msg_locations)
09978       use psmile_common, only : enddef_msg_locations, &
09979                               psmile_undef
09980 
09981       type (enddef_msg_locations), intent (out) :: msg_locations
09982    end subroutine psmile_init_enddef_msg_locs
09983 
09984    subroutine psmile_pack_msg_locations (msg_locations, buffer)
09985       use psmile_common, only : enddef_msg_locations, msgloc_size
09986 
09987       type (enddef_msg_locations), intent (in) :: msg_locations
09988       integer, intent (out)                    :: buffer(msgloc_size)
09989    end subroutine psmile_pack_msg_locations
09990 
09991    subroutine psmile_unpack_msg_locations (msg_locations, buffer)
09992       use psmile_common, only : enddef_msg_locations, msgloc_size
09993 
09994       type (enddef_msg_locations), intent (out) :: msg_locations
09995       integer, intent (in)                      :: buffer(msgloc_size)
09996    end subroutine psmile_unpack_msg_locations
09997 
09998 End Interface
09999 
10000 End Module PSMILe

Generated on 18 Mar 2011 for Oasis4 by  doxygen 1.6.1