SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/modd_surf_atm_gridn.F90
Go to the documentation of this file.
00001 !     ##################
00002       MODULE MODD_SURF_ATM_GRID_n
00003 !     ##################
00004 !
00005 !!****  *MODD_SURF_ATM_GRID - declaration of SURF_ATM 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 SURF_ATM_GRID_t
00036 !-------------------------------------------------------------------------------
00037 !
00038 ! Grid definition
00039 !
00040   CHARACTER(LEN=10)               :: CGRID       ! grid type
00041 !                                              ! "NONE        " : no grid computations
00042 !                                              ! "CONF PROJ   " : conformal projection
00043 !
00044   REAL, POINTER,     DIMENSION(:) :: XGRID_PAR   ! lits of parameters used to define the grid
00045 !                                              ! (depends on value of CGRID)
00046   REAL, POINTER,     DIMENSION(:) :: XGRID_FULL_PAR   ! lits of parameters used to define the grid
00047 !                                                     ! (depends on value of CGRID)
00048   INTEGER                         :: NGRID_PAR   ! size of XGRID_PAR
00049 !
00050   INTEGER, POINTER, DIMENSION(:,:) :: NNEAR
00051 !-------------------------------------------------------------------------------
00052 !
00053 ! General surface parameters:
00054 !
00055   REAL, POINTER, DIMENSION(:) :: XLAT        ! latitude (degrees +North)               (-)
00056   REAL, POINTER, DIMENSION(:) :: XLON        ! longitude (degrees +East)               (-)
00057   REAL, POINTER, DIMENSION(:) :: XMESH_SIZE  ! mesh size                               (m2)
00058   REAL, POINTER, DIMENSION(:) :: XJPDIR      ! heading of J direction (deg from N clockwise)
00059 !-------------------------------------------------------------------------------
00060 !
00061 
00062 END TYPE SURF_ATM_GRID_t
00063 
00064 TYPE(SURF_ATM_GRID_t), ALLOCATABLE, TARGET, SAVE :: SURF_ATM_GRID_MODEL(:)
00065 
00066  CHARACTER(LEN=10), POINTER :: CGRID=>NULL()
00067 !$OMP THREADPRIVATE(CGRID)
00068 REAL, POINTER,     DIMENSION(:) :: XGRID_PAR=>NULL()
00069 !$OMP THREADPRIVATE(XGRID_PAR)
00070 INTEGER, POINTER,     DIMENSION(:,:) :: NNEAR=>NULL()
00071 !$OMP THREADPRIVATE(NNEAR)
00072 REAL, POINTER,     DIMENSION(:) :: XGRID_FULL_PAR=>NULL()
00073 !$OMP THREADPRIVATE(XGRID_FULL_PAR)
00074 INTEGER, POINTER :: NGRID_PAR=>NULL()
00075 !$OMP THREADPRIVATE(NGRID_PAR)
00076 REAL, POINTER, DIMENSION(:) :: XLAT=>NULL()
00077 !$OMP THREADPRIVATE(XLAT)
00078 REAL, POINTER, DIMENSION(:) :: XLON=>NULL()
00079 !$OMP THREADPRIVATE(XLON)
00080 REAL, POINTER, DIMENSION(:) :: XMESH_SIZE=>NULL()
00081 !$OMP THREADPRIVATE(XMESH_SIZE)
00082 REAL, POINTER, DIMENSION(:) :: XJPDIR=>NULL()
00083 !$OMP THREADPRIVATE(XJPDIR)
00084 
00085 CONTAINS
00086 
00087 SUBROUTINE SURF_ATM_GRID_GOTO_MODEL(KFROM, KTO, LKFROM)
00088 LOGICAL, INTENT(IN) :: LKFROM
00089 INTEGER, INTENT(IN) :: KFROM, KTO
00090 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00091 !
00092 ! Save current state for allocated arrays
00093 IF (LKFROM) THEN
00094 SURF_ATM_GRID_MODEL(KFROM)%XGRID_PAR=>XGRID_PAR
00095 SURF_ATM_GRID_MODEL(KFROM)%NNEAR=>NNEAR
00096 SURF_ATM_GRID_MODEL(KFROM)%XGRID_FULL_PAR=>XGRID_FULL_PAR
00097 SURF_ATM_GRID_MODEL(KFROM)%XLAT=>XLAT
00098 SURF_ATM_GRID_MODEL(KFROM)%XLON=>XLON
00099 SURF_ATM_GRID_MODEL(KFROM)%XMESH_SIZE=>XMESH_SIZE
00100 SURF_ATM_GRID_MODEL(KFROM)%XJPDIR=>XJPDIR
00101 ENDIF
00102 !
00103 ! Current model is set to model KTO
00104 IF (LHOOK) CALL DR_HOOK('MODD_SURF_ATM_GRID_N:SURF_ATM_GRID_GOTO_MODEL',0,ZHOOK_HANDLE)
00105 CGRID=>SURF_ATM_GRID_MODEL(KTO)%CGRID
00106 XGRID_PAR=>SURF_ATM_GRID_MODEL(KTO)%XGRID_PAR
00107 NNEAR=>SURF_ATM_GRID_MODEL(KTO)%NNEAR
00108 XGRID_FULL_PAR=>SURF_ATM_GRID_MODEL(KTO)%XGRID_FULL_PAR
00109 NGRID_PAR=>SURF_ATM_GRID_MODEL(KTO)%NGRID_PAR
00110 XLAT=>SURF_ATM_GRID_MODEL(KTO)%XLAT
00111 XLON=>SURF_ATM_GRID_MODEL(KTO)%XLON
00112 XMESH_SIZE=>SURF_ATM_GRID_MODEL(KTO)%XMESH_SIZE
00113 XJPDIR=>SURF_ATM_GRID_MODEL(KTO)%XJPDIR
00114 IF (LHOOK) CALL DR_HOOK('MODD_SURF_ATM_GRID_N:SURF_ATM_GRID_GOTO_MODEL',1,ZHOOK_HANDLE)
00115 
00116 END SUBROUTINE SURF_ATM_GRID_GOTO_MODEL
00117 
00118 SUBROUTINE SURF_ATM_GRID_ALLOC(KMODEL)
00119 INTEGER, INTENT(IN) :: KMODEL
00120 INTEGER :: J
00121 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00122 IF (LHOOK) CALL DR_HOOK("MODD_SURF_ATM_GRID_N:SURF_ATM_GRID_ALLOC",0,ZHOOK_HANDLE)
00123 ALLOCATE(SURF_ATM_GRID_MODEL(KMODEL))
00124 DO J=1,KMODEL
00125   NULLIFY(SURF_ATM_GRID_MODEL(J)%XGRID_PAR)
00126   NULLIFY(SURF_ATM_GRID_MODEL(J)%NNEAR)
00127   NULLIFY(SURF_ATM_GRID_MODEL(J)%XGRID_FULL_PAR)
00128   NULLIFY(SURF_ATM_GRID_MODEL(J)%XLAT)
00129   NULLIFY(SURF_ATM_GRID_MODEL(J)%XLON)
00130   NULLIFY(SURF_ATM_GRID_MODEL(J)%XMESH_SIZE)
00131   NULLIFY(SURF_ATM_GRID_MODEL(J)%XJPDIR)
00132 ENDDO
00133 SURF_ATM_GRID_MODEL(:)%CGRID=' '
00134 SURF_ATM_GRID_MODEL(:)%NGRID_PAR=0
00135 IF (LHOOK) CALL DR_HOOK("MODD_SURF_ATM_GRID_N:SURF_ATM_GRID_ALLOC",1,ZHOOK_HANDLE)
00136 END SUBROUTINE SURF_ATM_GRID_ALLOC
00137 
00138 SUBROUTINE SURF_ATM_GRID_DEALLO
00139 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00140 IF (LHOOK) CALL DR_HOOK("MODD_SURF_ATM_GRID_N:SURF_ATM_GRID_DEALLO",0,ZHOOK_HANDLE)
00141 IF (ALLOCATED(SURF_ATM_GRID_MODEL)) DEALLOCATE(SURF_ATM_GRID_MODEL)
00142 IF (LHOOK) CALL DR_HOOK("MODD_SURF_ATM_GRID_N:SURF_ATM_GRID_DEALLO",1,ZHOOK_HANDLE)
00143 END SUBROUTINE SURF_ATM_GRID_DEALLO
00144 
00145 END MODULE MODD_SURF_ATM_GRID_n