SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/modd_flake_gridn.F90
Go to the documentation of this file.
00001 !     ##################
00002 MODULE MODD_FLAKE_GRID_n
00003 !     ##################
00004 !
00005 !!****  *MODD_FLAKE_GRID - declaration of FLAKE grid
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !
00010 !!
00011 !!**  IMPLICIT ARGUMENTS
00012 !!    ------------------
00013 !!      None 
00014 !!
00015 !!    REFERENCE
00016 !!    ---------
00017 !!
00018 !!    AUTHOR
00019 !!    ------
00020 !!      V. Masson   *Meteo France*
00021 !!
00022 !!    MODIFICATIONS
00023 !!    -------------
00024 !!      Original       01/2004
00025 !
00026 !*       0.   DECLARATIONS
00027 !             ------------
00028 !
00029 !
00030 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00031 USE PARKIND1  ,ONLY : JPRB
00032 !
00033 IMPLICIT NONE
00034 
00035 TYPE FLAKE_GRID_t
00036 !-------------------------------------------------------------------------------
00037 !
00038 ! Grid definition
00039 !
00040   INTEGER                         :: NDIM        ! number of points
00041   CHARACTER(LEN=10)               :: CGRID       ! grid type
00042 !                                              ! "NONE        " : no grid computations
00043 !                                              ! "CONF PROJ   " : conformal projection
00044 !                                              ! "SURF ATM    " : water points of surf. atm. grid
00045 !
00046   REAL, POINTER,     DIMENSION(:) :: XGRID_PAR   ! lits of parameters used to define the grid
00047 !                                              ! (depends on value of CGRID)
00048 !
00049 !-------------------------------------------------------------------------------
00050 !
00051 ! General surface parameters:
00052 !
00053   REAL, POINTER, DIMENSION(:) :: XLAT        ! latitude (degrees +North)               (-)
00054   REAL, POINTER, DIMENSION(:) :: XLON        ! longitude (degrees +East)               (-)
00055   REAL, POINTER, DIMENSION(:) :: XMESH_SIZE  ! mesh size                               (m2)
00056 !-------------------------------------------------------------------------------
00057 !
00058 
00059 END TYPE FLAKE_GRID_t
00060 
00061 TYPE(FLAKE_GRID_t), ALLOCATABLE, TARGET, SAVE :: FLAKE_GRID_MODEL(:)
00062 
00063 INTEGER, POINTER :: NDIM=>NULL()
00064 !$OMP THREADPRIVATE(NDIM)
00065  CHARACTER(LEN=10), POINTER :: CGRID=>NULL()
00066 !$OMP THREADPRIVATE(CGRID)
00067 REAL, POINTER,     DIMENSION(:) :: XGRID_PAR=>NULL()
00068 !$OMP THREADPRIVATE(XGRID_PAR)
00069 REAL, POINTER, DIMENSION(:) :: XLAT=>NULL()
00070 !$OMP THREADPRIVATE(XLAT)
00071 REAL, POINTER, DIMENSION(:) :: XLON=>NULL()
00072 !$OMP THREADPRIVATE(XLON)
00073 REAL, POINTER, DIMENSION(:) :: XMESH_SIZE=>NULL()
00074 !$OMP THREADPRIVATE(XMESH_SIZE)
00075 
00076 CONTAINS
00077 
00078 SUBROUTINE FLAKE_GRID_GOTO_MODEL(KFROM, KTO, LKFROM)
00079 LOGICAL, INTENT(IN) :: LKFROM
00080 INTEGER, INTENT(IN) :: KFROM, KTO
00081 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00082 !
00083 ! Save current state for allocated arrays
00084 IF (LKFROM) THEN
00085 FLAKE_GRID_MODEL(KFROM)%XGRID_PAR=>XGRID_PAR
00086 FLAKE_GRID_MODEL(KFROM)%XLAT=>XLAT
00087 FLAKE_GRID_MODEL(KFROM)%XLON=>XLON
00088 FLAKE_GRID_MODEL(KFROM)%XMESH_SIZE=>XMESH_SIZE
00089 ENDIF
00090 !
00091 ! Current model is set to model KTO
00092 IF (LHOOK) CALL DR_HOOK('MODD_FLAKE_GRID_N:FLAKE_GRID_GOTO_MODEL',0,ZHOOK_HANDLE)
00093 NDIM=>FLAKE_GRID_MODEL(KTO)%NDIM
00094 CGRID=>FLAKE_GRID_MODEL(KTO)%CGRID
00095 XGRID_PAR=>FLAKE_GRID_MODEL(KTO)%XGRID_PAR
00096 XLAT=>FLAKE_GRID_MODEL(KTO)%XLAT
00097 XLON=>FLAKE_GRID_MODEL(KTO)%XLON
00098 XMESH_SIZE=>FLAKE_GRID_MODEL(KTO)%XMESH_SIZE
00099 IF (LHOOK) CALL DR_HOOK('MODD_FLAKE_GRID_N:FLAKE_GRID_GOTO_MODEL',1,ZHOOK_HANDLE)
00100 
00101 END SUBROUTINE FLAKE_GRID_GOTO_MODEL
00102 
00103 SUBROUTINE FLAKE_GRID_ALLOC(KMODEL)
00104 INTEGER, INTENT(IN) :: KMODEL
00105 INTEGER :: J
00106 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00107 IF (LHOOK) CALL DR_HOOK("MODD_FLAKE_GRID_N:FLAKE_GRID_ALLOC",0,ZHOOK_HANDLE)
00108 ALLOCATE(FLAKE_GRID_MODEL(KMODEL))
00109 DO J=1,KMODEL
00110   NULLIFY(FLAKE_GRID_MODEL(J)%XGRID_PAR)
00111   NULLIFY(FLAKE_GRID_MODEL(J)%XLAT)
00112   NULLIFY(FLAKE_GRID_MODEL(J)%XLON)
00113   NULLIFY(FLAKE_GRID_MODEL(J)%XMESH_SIZE)
00114 ENDDO
00115 FLAKE_GRID_MODEL(:)%NDIM=0
00116 FLAKE_GRID_MODEL(:)%CGRID=' '
00117 IF (LHOOK) CALL DR_HOOK("MODD_FLAKE_GRID_N:FLAKE_GRID_ALLOC",1,ZHOOK_HANDLE)
00118 END SUBROUTINE FLAKE_GRID_ALLOC
00119 
00120 SUBROUTINE FLAKE_GRID_DEALLO
00121 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00122 IF (LHOOK) CALL DR_HOOK("MODD_FLAKE_GRID_N:FLAKE_GRID_DEALLO",0,ZHOOK_HANDLE)
00123 IF (ALLOCATED(FLAKE_GRID_MODEL)) DEALLOCATE(FLAKE_GRID_MODEL)
00124 IF (LHOOK) CALL DR_HOOK("MODD_FLAKE_GRID_N:FLAKE_GRID_DEALLO",1,ZHOOK_HANDLE)
00125 END SUBROUTINE FLAKE_GRID_DEALLO
00126 
00127 END MODULE MODD_FLAKE_GRID_n