SURFEX v7.3
General documentation of Surfex
|
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