00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 subroutine psmile_gridless_func_dble ( 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 Double Precision, 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
00055 Type(Userdef), POINTER :: ug
00056 Type(GridFunction), POINTER :: fp
00057
00058
00059
00060
00061 ierror = 0
00062 ug => Userdefs(userdef_id)
00063 imaxg = ug%ig_nb_ppp
00064 il_celldim = ug%ig_celldim
00065 print *, ' imaxg = ',imaxg
00066
00067
00068
00069
00070 fp => Fields(field_id)
00071 ndim = Grids(Methods(fp%method_id)%grid_id)%n_dim
00072 print *, ' ndim = ',ndim
00073
00074
00075
00076 dim1 = fp%var_shape(2,1) - fp%var_shape(1,1) + 1
00077 print *, ' dim1 = ', dim1
00078 dim2 = fp%var_shape(2,2) - fp%var_shape(1,2) + 1
00079 print *, ' dim2 = ', dim2
00080 if ( ndim == 3 ) then
00081 dim3 = fp%var_shape(2,3) - fp%var_shape(1,3) + 1
00082 print *, ' dim3 = ', dim3
00083 endif
00084
00085
00086 il_nbdl = ug%ig_nbr_fields
00087
00088
00089
00090
00091 if ( il_side == 0 ) then
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%dble_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%dble_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%dble_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%dble_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%dble_gridless(i,1,1,1),i=1,imaxg)
00188 #endif
00189
00190 return
00191 end subroutine psmile_gridless_func_dble