SURFEX v7.3
General documentation of Surfex
|
00001 ! ################## 00002 MODULE MODD_ISBA_GRID_n 00003 ! ################## 00004 ! 00005 !!**** *MODD_ISBA - declaration of grid for ISBA scheme 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 ISBA_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 " : nature 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 ISBA_GRID_t 00060 00061 TYPE(ISBA_GRID_t), ALLOCATABLE, TARGET, SAVE :: ISBA_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 ISBA_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 ISBA_GRID_MODEL(KFROM)%XGRID_PAR=>XGRID_PAR 00086 ISBA_GRID_MODEL(KFROM)%XLAT=>XLAT 00087 ISBA_GRID_MODEL(KFROM)%XLON=>XLON 00088 ISBA_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_ISBA_GRID_N:ISBA_GRID_GOTO_MODEL',0,ZHOOK_HANDLE) 00093 NDIM=>ISBA_GRID_MODEL(KTO)%NDIM 00094 CGRID=>ISBA_GRID_MODEL(KTO)%CGRID 00095 XGRID_PAR=>ISBA_GRID_MODEL(KTO)%XGRID_PAR 00096 XLAT=>ISBA_GRID_MODEL(KTO)%XLAT 00097 XLON=>ISBA_GRID_MODEL(KTO)%XLON 00098 XMESH_SIZE=>ISBA_GRID_MODEL(KTO)%XMESH_SIZE 00099 IF (LHOOK) CALL DR_HOOK('MODD_ISBA_GRID_N:ISBA_GRID_GOTO_MODEL',1,ZHOOK_HANDLE) 00100 00101 END SUBROUTINE ISBA_GRID_GOTO_MODEL 00102 00103 SUBROUTINE ISBA_GRID_ALLOC(KMODEL) 00104 INTEGER, INTENT(IN) :: KMODEL 00105 INTEGER :: J 00106 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00107 IF (LHOOK) CALL DR_HOOK("MODD_ISBA_GRID_N:ISBA_GRID_ALLOC",0,ZHOOK_HANDLE) 00108 ALLOCATE(ISBA_GRID_MODEL(KMODEL)) 00109 DO J=1,KMODEL 00110 NULLIFY(ISBA_GRID_MODEL(J)%XGRID_PAR) 00111 NULLIFY(ISBA_GRID_MODEL(J)%XLAT) 00112 NULLIFY(ISBA_GRID_MODEL(J)%XLON) 00113 NULLIFY(ISBA_GRID_MODEL(J)%XMESH_SIZE) 00114 ENDDO 00115 ISBA_GRID_MODEL(:)%NDIM=0 00116 ISBA_GRID_MODEL(:)%CGRID=' ' 00117 IF (LHOOK) CALL DR_HOOK("MODD_ISBA_GRID_N:ISBA_GRID_ALLOC",1,ZHOOK_HANDLE) 00118 END SUBROUTINE ISBA_GRID_ALLOC 00119 00120 SUBROUTINE ISBA_GRID_DEALLO 00121 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00122 IF (LHOOK) CALL DR_HOOK("MODD_ISBA_GRID_N:ISBA_GRID_DEALLO",0,ZHOOK_HANDLE) 00123 IF (ALLOCATED(ISBA_GRID_MODEL)) DEALLOCATE(ISBA_GRID_MODEL) 00124 IF (LHOOK) CALL DR_HOOK("MODD_ISBA_GRID_N:ISBA_GRID_DEALLO",1,ZHOOK_HANDLE) 00125 END SUBROUTINE ISBA_GRID_DEALLO 00126 00127 END MODULE MODD_ISBA_GRID_n