psmile_transform_index.F90

Go to the documentation of this file.
00001 !-----------------------------------------------------------------------
00002 ! Copyright 2010, DKRZ, Hamburg, Germany.
00003 ! All rights reserved. Use is subject to OASIS4 license terms.
00004 !-----------------------------------------------------------------------
00005 
00006       function psmile_transform_index_1d_to_3d ( &
00007                       index_1d, array_shape)
00008 !
00009 ! !USES:
00010 !
00011       use psmile_common, only : ndim_3d
00012       use psmile, dummy_interface => psmile_transform_index_1d_to_3d
00013 
00014       implicit none
00015 !
00016 ! !INPUT PARAMETERS:
00017 !
00018       integer, intent(in) :: index_1d
00019 !     The 1d index which is to be transformed into a 3d one
00020       integer, intent(in) :: array_shape (2, ndim_3d)
00021 !     The array shape which is used for transforming the 1d index
00022 !
00023 ! !RETURN VALUE:
00024 !
00025       integer :: psmile_transform_index_1d_to_3d (ndim_3d)
00026 
00027 !     Contains the 3d index
00028 !
00029 ! !DEFINED PARAMETERS:
00030 !
00031       integer :: array_size(3)
00032 !
00033 !
00034 ! !DESCRIPTION:
00035 !
00036 ! Subroutine "psmile_transform_index_1d_to_3d" transforms a given 1d
00037 ! index into a 3d index based on the shape information provided.
00038 !
00039 ! !REVISION HISTORY:
00040 !
00041 !   Date      Programmer   Description
00042 ! ----------  ----------   -----------
00043 ! 20.09.10    M. Hanke     created
00044 !
00045 !----------------------------------------------------------------------
00046 !
00047 !  $Id: psmile_transform_index.F90 2580 2010-09-21 12:58:05Z hanke $
00048 !  $Author: hanke $
00049 !
00050    Character(len=len_cvs_string), save :: mycvs = 
00051        '$Id: psmile_transform_index.F90 2580 2010-09-21 12:58:05Z hanke $'
00052 !
00053 !----------------------------------------------------------------------
00054 !
00055 !  Initialization
00056 !
00057       array_size(:) = array_shape(2,:) - array_shape(1,:) + 1
00058 
00059       psmile_transform_index_1d_to_3d(3) = (index_1d-1) / product(array_size(1:2))
00060       psmile_transform_index_1d_to_3d(2) = (index_1d - 1 - &
00061                                             psmile_transform_index_1d_to_3d(3) * &
00062                                             product(array_size(1:2))) / array_size(1)
00063       psmile_transform_index_1d_to_3d(1) = index_1d - 1 - &
00064                                            psmile_transform_index_1d_to_3d(2) * &
00065                                            array_size(1) - &
00066                                            psmile_transform_index_1d_to_3d(3) * &
00067                                            product(array_size(1:2))
00068 
00069       psmile_transform_index_1d_to_3d(:) = psmile_transform_index_1d_to_3d(:) + &
00070                                            array_shape(1,:)
00071 
00072       end function psmile_transform_index_1d_to_3d
00073 
00074 !----------------------------------------------------------------------
00075 
00076       function psmile_transform_index_3d_to_1d ( &
00077                       index_3d, array_shape)
00078 !
00079 ! !USES:
00080 !
00081       use psmile_common, only : ndim_3d
00082       use psmile, dummy_interface => psmile_transform_index_3d_to_1d
00083 
00084       implicit none
00085 !
00086 ! !INPUT PARAMETERS:
00087 !
00088       integer, intent(in) :: index_3d (ndim_3d)
00089 !     The 1d index which is to be transformed into a 3d one
00090       integer, intent(in) :: array_shape (2, ndim_3d)
00091 !     The array shape which is used for transforming the 1d index
00092 !
00093 ! !RETURN VALUE:
00094 !
00095       integer :: psmile_transform_index_3d_to_1d
00096 
00097 !     Contains the 3d index
00098 !
00099 ! !DEFINED PARAMETERS:
00100 !
00101       integer :: array_size(3), i
00102 !
00103 !
00104 ! !DESCRIPTION:
00105 !
00106 ! Subroutine "psmile_transform_index_3d_to_1d" transforms a given 3d
00107 ! index into a 1d index based on the shape information provided.
00108 !
00109 ! !REVISION HISTORY:
00110 !
00111 !   Date      Programmer   Description
00112 ! ----------  ----------   -----------
00113 ! 20.09.10    M. Hanke     created
00114 !
00115 !----------------------------------------------------------------------
00116 !
00117 !  $Id: psmile_transform_index.F90 2580 2010-09-21 12:58:05Z hanke $
00118 !  $Author: hanke $
00119 !
00120    Character(len=len_cvs_string), save :: mycvs = 
00121        '$Id: psmile_transform_index.F90 2580 2010-09-21 12:58:05Z hanke $'
00122 !
00123 !----------------------------------------------------------------------
00124 !
00125 !  Initialization
00126 !
00127       array_size(:) = array_shape(2,:) - array_shape(1,:) + 1
00128 
00129       psmile_transform_index_3d_to_1d = 1 + &
00130          (index_3d(1) - array_shape(1,1)) + &
00131          (index_3d(2) - array_shape(1,2)) * array_size(1) + &
00132          (index_3d(3) - array_shape(1,3)) * product(array_size(1:2))
00133 
00134       end function psmile_transform_index_3d_to_1d
00135 

Generated on 18 Mar 2011 for Oasis4 by  doxygen 1.6.1