00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 subroutine psmile_gridless_func_real ( field_id, userdef_id, il_side, data_array, ierror )
00013
00014
00015
00016 use PSMILe
00017
00018 implicit none
00019
00020
00021
00022 Integer, Intent (In) :: field_id
00023
00024
00025
00026 Integer, Intent (In) :: userdef_id
00027
00028
00029
00030 Integer, Intent (In) :: il_side
00031
00032
00033
00034 Real, Intent (InOut) :: data_array(*)
00035
00036
00037
00038
00039
00040 Integer, Intent (Out) :: ierror
00041
00042
00043
00044
00045
00046 Integer :: i
00047 Integer :: imaxg, il_celldim
00048 Integer :: iloc, ilink
00049 Integer :: indi, indj, indk
00050 Integer :: dim1, dim2, dim3
00051 Integer :: ijklin, ijkdat, ndim
00052 Integer :: il_nbdl, ibd
00053
00054 Type(Userdef), POINTER :: ug
00055 Type(GridFunction), POINTER :: fp
00056
00057
00058
00059
00060 ierror = 0
00061 ug => Userdefs(userdef_id)
00062 imaxg = ug%ig_nb_ppp
00063 il_celldim = ug%ig_celldim
00064 print *, ' psmile_gridless_func_real : imaxg = ',imaxg
00065
00066
00067
00068
00069 fp => Fields(field_id)
00070 ndim = Grids(Methods(fp%method_id)%grid_id)%n_dim
00071 print *, ' psmile_gridless_func_real : ndim = ',ndim
00072
00073
00074
00075 dim1 = fp%var_shape(2,1) - fp%var_shape(1,1) + 1
00076 print *, ' dim1 = ', dim1
00077 dim2 = fp%var_shape(2,2) - fp%var_shape(1,2) + 1
00078 print *, ' dim2 = ', dim2
00079 if ( ndim == 3 ) then
00080 dim3 = fp%var_shape(2,3) - fp%var_shape(1,3) + 1
00081 print *, ' dim3 = ', dim3
00082 endif
00083
00084
00085 il_nbdl = ug%ig_nbr_fields
00086
00087
00088
00089
00090 if ( il_side == 0 ) then
00091
00092
00093
00094
00095
00096
00097
00098 if ( ndim == 3 ) then
00099
00100 do iloc = 1, imaxg
00101 indi = ug%iga_igl(iloc,1) - fp%var_shape(1,1) + 1
00102 indj = ug%iga_igl(iloc,2) - fp%var_shape(1,2) + 1
00103 indk = ug%iga_igl(iloc,3) - fp%var_shape(1,3) + 1
00104 ilink = ug%iga_igl(iloc,4)
00105 ijklin = indi + dim1*(indj-1) + dim1*dim2*(indk-1)
00106 #ifdef DEBUG
00107 print *, 'indi-j-k ilink = ',indi, indj, indk, ilink
00108 print *, 'ijkdat et data = ',ijklin, data_array(ijklin)
00109 #endif
00110 do ibd = 1, il_nbdl
00111 ijkdat = ijklin + dim1*dim2*dim3*(ibd-1)
00112 ug%real_gridless(iloc,1,1,ibd) = &
00113 (ug%dga_wght(iloc)) * data_array(ijkdat)
00114 enddo
00115 enddo
00116 endif
00117
00118 if ( ndim == 2 ) then
00119
00120 do iloc = 1, imaxg
00121 indi = ug%iga_igl(iloc,1) - fp%var_shape(1,1) + 1
00122 indj = ug%iga_igl(iloc,2) - fp%var_shape(1,2) + 1
00123 ilink = ug%iga_igl(iloc,4)
00124 ijklin = indi + dim1*(indj-1)
00125 #ifdef DEBUG
00126 print *, 'indi-j ilink = ',indi, indj, ilink
00127 print *, 'ijkdat et data = ',ijklin, data_array(ijklin)
00128 #endif
00129 do ibd = 1, il_nbdl
00130 ijkdat = ijklin + dim1*dim2*(ibd-1)
00131 ug%real_gridless(iloc,1,1,ibd) = &
00132 (ug%dga_wght(iloc)) * data_array(ijkdat)
00133 enddo
00134 enddo
00135 endif
00136
00137
00138 elseif (il_side == 1 ) then
00139
00140
00141 if ( ndim == 3 ) then
00142 do iloc = 1, imaxg
00143 indi = ug%iga_igl(iloc,1) - fp%var_shape(1,1) + 1
00144 indj = ug%iga_igl(iloc,2) - fp%var_shape(1,2) + 1
00145 indk = ug%iga_igl(iloc,3) - fp%var_shape(1,3) + 1
00146 ilink = ug%iga_igl(iloc,4)
00147 ijklin = indi + dim1*(indj-1) + dim1*dim2*(indk-1)
00148 #ifdef DEBUG
00149 print *, 'indi-j-k ilink = ',indi, indj, indk, ilink
00150 #endif
00151 do ibd = 1, il_nbdl
00152 ijkdat = ijklin + dim1*dim2*dim3*(ibd-1)
00153 data_array(ijkdat) = data_array(ijkdat) + &
00154 ug%real_gridless(iloc,1,1,ibd)
00155 #ifdef DEBUG
00156 print *, 'ijkdat et data = ',ijkdat, data_array(ijkdat)
00157 #endif
00158 enddo
00159 enddo
00160 endif
00161
00162 if ( ndim == 2 ) then
00163 do iloc = 1, imaxg
00164 indi = ug%iga_igl(iloc,1) - fp%var_shape(1,1) + 1
00165 indj = ug%iga_igl(iloc,2) - fp%var_shape(1,2) + 1
00166 ilink = ug%iga_igl(iloc,4)
00167 #ifdef DEBUG
00168 print *, 'indi-j-k ilink = ',indi, indj, ilink
00169 #endif
00170 ijklin = indi + dim1*(indj-1)
00171 do ibd = 1, il_nbdl
00172 ijkdat = ijklin + dim1*dim2*(ibd-1)
00173 data_array(ijkdat) = data_array(ijkdat) + &
00174 ug%real_gridless(iloc,1,1,ibd)
00175 #ifdef DEBUG
00176 print *, 'ijkdat et data = ',ijkdat, data_array(ijkdat)
00177 #endif
00178 enddo
00179 enddo
00180 endif
00181
00182
00183 endif
00184
00185 #ifdef DEBUG
00186 PRINT *, ' local values of function on gridless grid (j = k = 1) '
00187 PRINT *, (ug%real_gridless(i,1,1,1),i=1,imaxg)
00188 #endif
00189
00190 return
00191 end subroutine psmile_gridless_func_real