psmile_is_mask_defined.F90

Go to the documentation of this file.
00001 !-----------------------------------------------------------------------
00002 ! Copyright 2006-2010, NEC Europe Ltd., London, UK.
00003 ! All rights reserved. Use is subject to OASIS4 license terms.
00004 !-----------------------------------------------------------------------
00005 !BOP
00006 !
00007 ! !ROUTINE: PSMILe_is_mask_defined
00008 !
00009 ! !INTERFACE:
00010 
00011       subroutine psmile_is_mask_defined (mask_array, mask_shape, &
00012                                          inter, nparts,    &
00013                                          defined, ierror)
00014 !
00015 ! !USES:
00016 !
00017       use PRISM_constants
00018 !
00019       use PSMILe, dummy_interface => PSMILe_is_mask_defined
00020 
00021       implicit none
00022 !
00023 ! !INPUT PARAMETERS:
00024 !
00025       Integer, Intent (In)               :: mask_shape (2, ndim_3d)
00026 !
00027 !     Dimensions of mask array "mask_array"
00028 !
00029       Logical, Intent (In)               :: mask_array (                     
00030                                             mask_shape(1,1):mask_shape(2,1), 
00031                                             mask_shape(1,2):mask_shape(2,2), 
00032                                             mask_shape(1,3):mask_shape(2,3))
00033 !
00034 !     Mask array to be controlled
00035 !
00036       Integer, Intent (In)               :: nparts
00037 !
00038 !     Number of sub-regions to be controlled
00039 !
00040       Integer, Intent (In)               :: inter (2, ndim_3d, nparts)
00041 
00042 !     Sub-regions to be controlled
00043 !
00044 ! !OUTPUT PARAMETERS:
00045 !
00046       Integer, Intent (Out)             :: defined
00047 
00048 !     Returns the status of mask evaluation with
00049 !     defined = 0 : all  mask values are false
00050 !     defined = 1 : some mask values are false
00051 !     defined = 2 : all  mask values are true
00052 !
00053       Integer, Intent (Out)             :: ierror
00054 
00055 !     Returns the error code of PSMILe_is_mask_defined;
00056 !             ierror = 0 : No error
00057 !             ierror > 0 : Severe error
00058 !
00059 ! !LOCAL VARIABLES
00060 !
00061       Integer                      :: ipart, n
00062 !
00063       Integer                      :: num (nparts)
00064 
00065 !  ... for error parameters
00066 
00067 !     Integer, Parameter           :: nerrp = 3
00068 !     Integer                      :: ierrp (nerrp)
00069 !
00070 ! !DESCRIPTION:
00071 !
00072 ! Subroutine "PSMILe_is_mask_defined" controls whether the status of
00073 ! the mask values of "mask_array" in the regions "inter (:, :, 1:nparts)"
00074 ! which are to be controlled.
00075 !
00076 ! !REVISION HISTORY:
00077 !
00078 !   Date      Programmer   Description
00079 ! ----------  ----------   -----------
00080 ! 08.02.05    H. Ritzdorf  created
00081 !
00082 !EOP
00083 !----------------------------------------------------------------------
00084 !
00085 ! $Id: psmile_is_mask_defined.F90 2325 2010-04-21 15:00:07Z valcke $
00086 ! $Author: valcke $
00087 !
00088    Character(len=len_cvs_string), save :: mycvs = 
00089        '$Id: psmile_is_mask_defined.F90 2325 2010-04-21 15:00:07Z valcke $'
00090 !
00091 !----------------------------------------------------------------------
00092 !
00093 #ifdef VERBOSE
00094       print 9990, trim(ch_id)
00095 
00096       call psmile_flushstd
00097 #endif /* VERBOSE */
00098 !
00099 !  Initialization
00100 !
00101       ierror = 0
00102 !
00103          do ipart = 1, nparts
00104          num (ipart) = (inter(2,1,ipart)-inter(1,1,ipart)+1)* &
00105                        (inter(2,2,ipart)-inter(1,2,ipart)+1)* &
00106                        (inter(2,3,ipart)-inter(1,3,ipart)+1)
00107          end do
00108 !
00109 !  Control mask values
00110 !
00111       defined = 0 ! all masks are false
00112 !
00113          do ipart = 1, nparts
00114          n = count ( mask_array(inter(1,1,ipart):inter(2,1,ipart), &
00115                                 inter(1,2,ipart):inter(2,2,ipart), &
00116                                 inter(1,3,ipart):inter(2,3,ipart)) )
00117          if (n == 0) then
00118             if (defined /= 0) then
00119                defined = 1
00120                exit
00121             endif
00122 !
00123          else if (n == num(ipart)) then
00124             if (defined /= 2) then
00125                if (ipart > 1) exit
00126                defined = 2
00127             endif
00128 !
00129          else
00130             defined = 1
00131             exit
00132          endif
00133          end do
00134 !
00135 !===> All done
00136 !
00137 #ifdef VERBOSE
00138       print 9980, trim(ch_id), ierror, defined
00139       call psmile_flushstd
00140 #endif /* VERBOSE */
00141 
00142 !
00143 !  Formats:
00144 !
00145 
00146 #ifdef VERBOSE
00147 
00148 9990 format (1x, a, ': psmile_is_mask_defined:')
00149 9980 format (1x, a, ': psmile_is_mask_defined: eof ierror =', i3, &
00150                     '; defined =', i2)
00151 
00152 #endif /* VERBOSE */ 
00153 
00154       end subroutine PSMILe_is_mask_defined

Generated on 18 Mar 2011 for Oasis4 by  doxygen 1.6.1