psmile_enddef_msg_extra_utils.F90

Go to the documentation of this file.
00001 !-----------------------------------------------------------------------
00002 ! Copyright 2011, DKRZ, Hamburg, Germany.
00003 ! All rights reserved. Use is subject to OASIS4 license terms.
00004 !-----------------------------------------------------------------------
00005 !
00006 ! !DESCRIPTION:
00007 !
00008 ! This file contains routines for initiating objects of the derived
00009 ! type enddef_msg_extra. In addition there are two routines
00010 ! which allow to convert between object from this type and an integer
00011 ! array, which is sendable via MPI.
00012 !
00013 !
00014 ! !REVISION HISTORY:
00015 !
00016 !   Date      Programmer   Description
00017 ! ----------  ----------   -----------
00018 ! 06.04.2011  M. Hanke     created
00019 !
00020 !----------------------------------------------------------------------
00021 !
00022 !  $Id: psmile_enddef_msg_extra_utils.F90 3117 2011-04-08 11:04:46Z hanke $
00023 !  $Author: hanke $
00024 !
00025 !----------------------------------------------------------------------
00026 
00027 subroutine psmile_init_enddef_msg_extra (msg_extra)
00028    use psmile_common, only : enddef_msg_extra, &
00029                              psmile_undef
00030 
00031    implicit none
00032 
00033    type (enddef_msg_extra), intent (out) :: msg_extra
00034 
00035    msg_extra%reqest_type         = psmile_undef
00036    msg_extra%datatype            = psmile_undef
00037    msg_extra%len_int_data        = psmile_undef
00038    msg_extra%len_coord_data      = psmile_undef
00039    msg_extra%global_comp_id      = psmile_undef
00040    msg_extra%transi_out_id       = psmile_undef
00041    msg_extra%num_volumes         = psmile_undef
00042    msg_extra%num_int_per_vol     = psmile_undef
00043    msg_extra%num_items_per_coord = psmile_undef
00044    msg_extra%partition_avail     = .false.
00045    msg_extra%partition(:)        = 0
00046    msg_extra%num_neigh           = psmile_undef
00047    msg_extra%local_grid_id       = psmile_undef
00048    msg_extra%idx_req             = psmile_undef
00049 
00050 end subroutine psmile_init_enddef_msg_extra
00051 
00052 subroutine psmile_pack_msg_extra (msg_extra, buffer)
00053    use psmile_common, only : enddef_msg_extra, msg_extra_size
00054 
00055    implicit none
00056 
00057    type (enddef_msg_extra), intent (in) :: msg_extra
00058    integer, intent (out)                    :: buffer(msg_extra_size)
00059 
00060    buffer  (1)    = msg_extra%reqest_type
00061    buffer  (2)    = msg_extra%datatype
00062    buffer  (3)    = msg_extra%len_int_data
00063    buffer  (4)    = msg_extra%len_coord_data
00064    buffer  (5)    = msg_extra%global_comp_id
00065    buffer  (6)    = msg_extra%transi_out_id
00066    buffer  (7)    = msg_extra%num_volumes
00067    buffer  (8)    = msg_extra%num_int_per_vol
00068    buffer  (9)    = msg_extra%num_items_per_coord
00069    if (msg_extra%partition_avail) then
00070       buffer (10)    = 1
00071    else
00072       buffer (10)    = 0
00073    endif
00074    buffer (11:13) = msg_extra%partition(:)
00075    buffer (14)    = msg_extra%num_neigh
00076    buffer (15)    = msg_extra%local_grid_id
00077    buffer (16)    = msg_extra%idx_req
00078 #ifdef DEBUGX
00079   PRINT *, ' pack reqest_type         ', buffer   (1)
00080   PRINT *, ' pack datatype            ', buffer   (2)
00081   PRINT *, ' pack len_int_data        ', buffer   (3)
00082   PRINT *, ' pack len_coord_data      ', buffer   (4)
00083   PRINT *, ' pack global_comp_id      ', buffer   (5)
00084   PRINT *, ' pack transi_out_id       ', buffer   (6)
00085   PRINT *, ' pack num_volumes         ', buffer   (7)
00086   PRINT *, ' pack num_int_per_vol     ', buffer   (8)
00087   PRINT *, ' pack num_items_per_coord ', buffer   (9)
00088   PRINT *, ' pack partition_avail     ', buffer  (10) /= 0
00089   PRINT *, ' pack partition(:)        ', buffer  (11:13)
00090   PRINT *, ' pack num_neigh           ', buffer  (14)
00091   PRINT *, ' pack local_grid_id       ', buffer  (15)
00092   PRINT *, ' pack idx_req             ', buffer  (16)
00093 #endif
00094 
00095 end subroutine psmile_pack_msg_extra
00096 
00097 subroutine psmile_unpack_msg_extra (msg_extra, buffer)
00098    use psmile_common, only : enddef_msg_extra, msg_extra_size
00099 
00100    implicit none
00101 
00102    type (enddef_msg_extra), intent (out) :: msg_extra
00103    integer, intent (in)                      :: buffer(msg_extra_size)
00104 
00105    msg_extra%reqest_type         = buffer  (1)
00106    msg_extra%datatype            = buffer  (2)
00107    msg_extra%len_int_data        = buffer  (3)
00108    msg_extra%len_coord_data      = buffer  (4)
00109    msg_extra%global_comp_id      = buffer  (5)
00110    msg_extra%transi_out_id       = buffer  (6)
00111    msg_extra%num_volumes         = buffer  (7)
00112    msg_extra%num_int_per_vol     = buffer  (8)
00113    msg_extra%num_items_per_coord = buffer  (9)
00114    msg_extra%partition_avail     = buffer (10) /= 0
00115    msg_extra%partition(:)        = buffer (11:13)
00116    msg_extra%num_neigh           = buffer (14)
00117    msg_extra%local_grid_id       = buffer (15)
00118    msg_extra%idx_req             = buffer (16)
00119 
00120 #ifdef DEBUGX
00121   PRINT *, ' unpack reqest_type         ', buffer   (1)
00122   PRINT *, ' unpack datatype            ', buffer   (2)
00123   PRINT *, ' unpack len_int_data        ', buffer   (3)
00124   PRINT *, ' unpack len_coord_data      ', buffer   (4)
00125   PRINT *, ' unpack global_comp_id      ', buffer   (5)
00126   PRINT *, ' unpack transi_out_id       ', buffer   (6)
00127   PRINT *, ' unpack num_volumes         ', buffer   (7)
00128   PRINT *, ' unpack num_int_per_vol     ', buffer   (8)
00129   PRINT *, ' unpack num_items_per_coord ', buffer   (9)
00130   PRINT *, ' unpack partition_avail     ', buffer  (10) /= 0
00131   PRINT *, ' unpack partition(:)        ', buffer  (11:13)
00132   PRINT *, ' unpack num_neigh           ', buffer  (14)
00133   PRINT *, ' unpack local_grid_id       ', buffer  (15)
00134   PRINT *, ' unpack idx_req             ', buffer  (16)
00135 #endif
00136 
00137 end subroutine psmile_unpack_msg_extra

Generated on 1 Dec 2011 for Oasis4 by  doxygen 1.6.1