00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011       subroutine psmile_mg_first_level (grid_id, range, &
00012                       mg_info, tol, simplified_grid, ierror)
00013 
00014 
00015 
00016       use PRISM_constants
00017 
00018       use PSMILe, dummy_interface => PSMILe_MG_first_level
00019 
00020       implicit none
00021 
00022 
00023 
00024       Integer,                  Intent (In) :: grid_id
00025 
00026 
00027 
00028       Integer,                  Intent (In) :: range (2, ndim_3d)
00029 
00030 
00031 
00032 
00033       Real (PSMILe_float_kind), Intent (In) :: tol
00034 
00035 
00036 
00037       Logical,                  Intent (In) :: simplified_grid
00038 
00039 
00040 
00041 
00042 
00043 
00044       Type (Enddef_mg),       Intent (InOut) :: mg_info
00045 
00046 
00047 
00048 
00049 
00050 
00051       Integer,                  Intent (Out) :: ierror
00052 
00053 
00054 
00055 
00056 
00057 
00058 
00059       Type (Corner_Block), Pointer        :: corner_pointer
00060 
00061 
00062 
00063       integer, parameter                  :: nerrp = 1
00064       integer                             :: ierrp (nerrp)
00065 
00066 
00067 
00068 
00069 
00070 
00071 
00072 
00073 
00074 
00075 
00076 
00077 
00078 
00079 
00080 
00081 
00082 
00083    Character(len=len_cvs_string), save :: mycvs = 
00084        '$Id: psmile_mg_first_level.F90 2325 2010-04-21 15:00:07Z valcke $'
00085 
00086 
00087 
00088 #ifdef VERBOSE
00089       print *, trim(ch_id), ': psmile_mg_first_level: grid_id', grid_id
00090 
00091       call psmile_flushstd
00092 #endif /* VERBOSE */
00093 
00094 
00095 
00096       corner_pointer => Grids(grid_id)%corner_pointer
00097 
00098       if (corner_pointer%corner_datatype == MPI_REAL) then
00099 
00100 
00101 
00102          call psmile_mg_first_level_real (grid_id, range, &
00103                    mg_info, tol, simplified_grid, ierror)
00104 
00105       else if (corner_pointer%corner_datatype == MPI_DOUBLE_PRECISION) then
00106 
00107 
00108 
00109          call psmile_mg_first_level_dble (grid_id, range, &
00110                    mg_info, tol, simplified_grid, ierror)
00111 
00112 #if defined ( PRISM_QUAD_TYPE )
00113       else if (corner_pointer%corner_datatype == MPI_REAL16) then
00114 
00115 
00116 
00117          call psmile_mg_first_level_quad (grid_id, range, &
00118                    mg_info, tol, simplified_grid, ierror)
00119 #endif
00120 
00121       else
00122 
00123 
00124 
00125          ierrp (1) = corner_pointer%corner_datatype
00126          ierror = PRISM_Error_Internal
00127          call psmile_error ( ierror, 'unsupported data type', &
00128                              ierrp, 1, __FILE__, __LINE__ )
00129       endif
00130 
00131 
00132 
00133 #ifdef VERBOSE
00134       print *, trim(ch_id), ': psmile_mg_first_level eof: grid_id',&
00135                              grid_id, ', ierror =', ierror
00136 
00137       call psmile_flushstd
00138 #endif /* VERBOSE */
00139 
00140       end subroutine PSMILe_MG_first_level