|
DOUG 0.2
|
The main aim of this module is to create the restriction matrix. More...
Functions/Subroutines | |
| subroutine | CreateRestrict (C, M, R) |
| subroutine | CreatePathRestrict (C, M, R, gendata, getvals, getsize) |
| subroutine | getSizeOne (ptcnt, nsd, rsz, isz) |
| subroutine | genNoData (cpts, csz, nsd, routp, ioutp) |
| subroutine | getInvDistVals (cpts, csz, nsd, rinp, iinp, pt, outp) |
| subroutine | getKrigingSize (ptcnt, nsd, rsz, isz) |
| subroutine | genKrigingData (cpts, csz, nsd, routp, ioutp) |
| subroutine | getKrigingVals (cpts, csz, nsd, rinp, iinp, pt, outp) |
| subroutine | stripRestrict (M, R) |
Variables | |
| real(kind=xyzk), parameter | invdistpow = 0.5_xyzk |
The main aim of this module is to create the restriction matrix.
In the bi/trilinear case some of this functionality is moved to GeomInterp. The main framework, however, resides here.
First the prolongation matrix is created for nodes that would interpolate values from coarse nodes to fine nodes. That matrix is then transposed and translated from nodes to freedoms, thus giving the proper Restriction matrix required. The resulting matrix is such that it can interpolate the value of every fine node based on the coarse nodes. That restrict is used to create the coarse matrix. However, to create coarse vectors, some rows need to be removed so there wouldnt be any value overlap for the freedoms present on many different processes. That is achieved by the function stripRestrict.
Restriction matrix itself is currently created in a top down way - the points used in interpolation for a fine node are the centers of elements that are passed in descending in the refinement tree. The sad thing is that inverse distances and kriging dont really provide a continuos interpolation (in fact, contrasts can be quite sharp), so their practicality in this implementation is doubtful.
| subroutine CoarseCreateRestrict::CreatePathRestrict | ( | type(CoarseGrid),intent(inout) | C, |
| type(Mesh),intent(in) | M, | ||
| type(SpMtx),intent(out) | R, | ||
| gendata, | |||
| getvals, | |||
| getsize | |||
| ) |
Definition at line 99 of file CreateRestrict.F90.
Referenced by CreateRestrict().
| subroutine CoarseCreateRestrict::CreateRestrict | ( | type(CoarseGrid),intent(inout) | C, |
| type(Mesh),intent(in) | M, | ||
| type(SpMtx),intent(out) | R | ||
| ) |
Definition at line 59 of file CreateRestrict.F90.
References GeomInterp::CalcMlinearInterp(), CoarseGrid_class::COARSE_INTERPOLATION_INVDIST, CoarseGrid_class::COARSE_INTERPOLATION_KRIGING, CoarseGrid_class::COARSE_INTERPOLATION_MULTLIN, GeomInterp::CreateGeneralRestrict(), CreatePathRestrict(), genKrigingData(), genNoData(), getInvDistVals(), getKrigingSize(), getKrigingVals(), getSizeOne(), and globals::sctls.
Referenced by CoarsePreconditioner_geometric_mod::CoarsePreconditioner_geometric_Init().
| subroutine CoarseCreateRestrict::genKrigingData | ( | real(kind=xyzk),dimension(:,:),intent(in) | cpts, |
| integer | csz, | ||
| integer | nsd, | ||
| real(kind=xyzk),dimension(:),intent(out) | routp, | ||
| integer,dimension(:),intent(out) | ioutp | ||
| ) |
Definition at line 422 of file CreateRestrict.F90.
References invdistpow.
Referenced by CreateRestrict().
| subroutine CoarseCreateRestrict::genNoData | ( | real(kind=xyzk),dimension(:,:),intent(in) | cpts, |
| integer | csz, | ||
| integer | nsd, | ||
| real(kind=xyzk),dimension(:),intent(out) | routp, | ||
| integer,dimension(:),intent(out) | ioutp | ||
| ) |
Definition at line 369 of file CreateRestrict.F90.
Referenced by CreateRestrict().
| subroutine CoarseCreateRestrict::getInvDistVals | ( | real(kind=xyzk),dimension(:,:),intent(in) | cpts, |
| integer | csz, | ||
| integer | nsd, | ||
| real(kind=xyzk),dimension(:),intent(in) | rinp, | ||
| integer,dimension(:),intent(in) | iinp, | ||
| real(kind=xyzk),dimension(:),intent(in) | pt, | ||
| float(kind=rk),dimension(:),intent(out) | outp | ||
| ) |
Definition at line 379 of file CreateRestrict.F90.
References globals::eps, invdistpow, and RealKind::rk.
Referenced by CreateRestrict().
| subroutine CoarseCreateRestrict::getKrigingSize | ( | integer,intent(in) | ptcnt, |
| integer,intent(in) | nsd, | ||
| integer,intent(out) | rsz, | ||
| integer,intent(out) | isz | ||
| ) |
Definition at line 414 of file CreateRestrict.F90.
Referenced by CreateRestrict().
| subroutine CoarseCreateRestrict::getKrigingVals | ( | real(kind=xyzk),dimension(:,:),intent(in) | cpts, |
| integer | csz, | ||
| integer | nsd, | ||
| float(kind=rk),dimension(:),intent(in) | rinp, | ||
| integer,dimension(:),intent(in) | iinp, | ||
| real(kind=xyzk),dimension(:),intent(in) | pt, | ||
| float(kind=rk),dimension(:),intent(out) | outp | ||
| ) |
Definition at line 460 of file CreateRestrict.F90.
References invdistpow, and RealKind::rk.
Referenced by CreateRestrict().
| subroutine CoarseCreateRestrict::getSizeOne | ( | integer,intent(in) | ptcnt, |
| integer,intent(in) | nsd, | ||
| integer,intent(out) | rsz, | ||
| integer,intent(out) | isz | ||
| ) |
Definition at line 362 of file CreateRestrict.F90.
Referenced by CreateRestrict().
| subroutine CoarseCreateRestrict::stripRestrict | ( | type(Mesh),intent(in) | M, |
| type(SpMtx),intent(inout) | R | ||
| ) |
Definition at line 493 of file CreateRestrict.F90.
References SpMtx_class::D_SpMtx_ARRNG_NO, and globals::stream.
| real(kind=xyzk),parameter CoarseCreateRestrict::invdistpow = 0.5_xyzk |
Definition at line 54 of file CreateRestrict.F90.
Referenced by genKrigingData(), getInvDistVals(), and getKrigingVals().
1.7.3-20110217