SURFEX v7.3
General documentation of Surfex
|
00001 ! #################### 00002 MODULE MODD_DATA_COVER_n 00003 ! ###################### 00004 ! 00005 !!**** *MODD_DATA_COVER_n* - declaration of correspondances between surface 00006 !! classes and variables, for parameters that 00007 !! can change as function of physical options 00008 !! (GARDENs or not). 00009 !! 00010 !! PURPOSE 00011 !! ------- 00012 ! Declaration of surface parameters 00013 ! 00014 !! 00015 !!** IMPLICIT ARGUMENTS 00016 !! ------------------ 00017 !! None 00018 !! 00019 !! REFERENCE 00020 !! --------- 00021 !! 00022 !! AUTHOR 00023 !! ------ 00024 !! V. Masson *Meteo France* 00025 !! 00026 !! MODIFICATIONS 00027 !! ------------- 00028 !! Original 09/2011 00029 ! 00030 !* 0. DECLARATIONS 00031 ! ------------ 00032 ! 00033 ! 00034 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00035 USE PARKIND1 ,ONLY : JPRB 00036 ! 00037 IMPLICIT NONE 00038 00039 TYPE DATA_COVER_t 00040 ! 00041 !----------------------------------------------------------------------------------------------------- 00042 ! 00043 REAL, DIMENSION(:), POINTER :: XDATA_TOWN ! artificial surfaces fraction 00044 REAL, DIMENSION(:), POINTER :: XDATA_NATURE ! natural and cul. fraction 00045 REAL, DIMENSION(:), POINTER :: XDATA_GARDEN ! garden fraction 00046 REAL, DIMENSION(:), POINTER :: XDATA_BLD ! building fraction in 00047 ! artificial areas 00048 REAL, DIMENSION(:), POINTER :: XDATA_WALL_O_HOR ! ratio of vert. surf. 00049 ! ! over hor. surf. 00050 ! 00051 LOGICAL :: LGARDEN ! T: define urban green areas 00052 ! ! F: no urban green areas 00053 ! 00054 !----------------------------------------------------------------------------------------------------- 00055 ! 00056 END TYPE DATA_COVER_t 00057 00058 TYPE(DATA_COVER_t), ALLOCATABLE, TARGET, SAVE :: DATA_COVER_MODEL(:) 00059 00060 REAL, POINTER, DIMENSION(:) :: XDATA_TOWN=>NULL() 00061 !$OMP THREADPRIVATE(XDATA_TOWN) 00062 REAL, POINTER, DIMENSION(:) :: XDATA_NATURE=>NULL() 00063 !$OMP THREADPRIVATE(XDATA_NATURE) 00064 REAL, POINTER, DIMENSION(:) :: XDATA_GARDEN=>NULL() 00065 !$OMP THREADPRIVATE(XDATA_GARDEN) 00066 REAL, POINTER, DIMENSION(:) :: XDATA_BLD =>NULL() 00067 !$OMP THREADPRIVATE(XDATA_BLD) 00068 REAL, POINTER, DIMENSION(:) :: XDATA_WALL_O_HOR =>NULL() 00069 !$OMP THREADPRIVATE(XDATA_WALL_O_HOR) 00070 LOGICAL, POINTER :: LGARDEN=>NULL() 00071 !$OMP THREADPRIVATE(LGARDEN) 00072 00073 CONTAINS 00074 00075 SUBROUTINE DATA_COVER_GOTO_MODEL(KFROM, KTO, LKFROM) 00076 LOGICAL, INTENT(IN) :: LKFROM 00077 INTEGER, INTENT(IN) :: KFROM, KTO 00078 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00079 00080 ! 00081 ! Save current state for allocated arrays 00082 IF (LKFROM) THEN 00083 DATA_COVER_MODEL(KFROM)%XDATA_TOWN=>XDATA_TOWN 00084 DATA_COVER_MODEL(KFROM)%XDATA_NATURE=>XDATA_NATURE 00085 DATA_COVER_MODEL(KFROM)%XDATA_GARDEN=>XDATA_GARDEN 00086 DATA_COVER_MODEL(KFROM)%XDATA_BLD=>XDATA_BLD 00087 DATA_COVER_MODEL(KFROM)%XDATA_WALL_O_HOR=>XDATA_WALL_O_HOR 00088 ENDIF 00089 ! 00090 ! Current model is set to model KTO 00091 IF (LHOOK) CALL DR_HOOK('MODD_DATA_COVER_N:DATA_COVER_GOTO_MODEL',0,ZHOOK_HANDLE) 00092 00093 XDATA_TOWN=>DATA_COVER_MODEL(KTO)%XDATA_TOWN 00094 XDATA_NATURE=>DATA_COVER_MODEL(KTO)%XDATA_NATURE 00095 XDATA_GARDEN=>DATA_COVER_MODEL(KTO)%XDATA_GARDEN 00096 XDATA_BLD=>DATA_COVER_MODEL(KTO)%XDATA_BLD 00097 XDATA_WALL_O_HOR=>DATA_COVER_MODEL(KTO)%XDATA_WALL_O_HOR 00098 LGARDEN=>DATA_COVER_MODEL(KTO)%LGARDEN 00099 00100 IF (LHOOK) CALL DR_HOOK('MODD_DATA_COVER_N:DATA_COVER_GOTO_MODEL',1,ZHOOK_HANDLE) 00101 00102 END SUBROUTINE DATA_COVER_GOTO_MODEL 00103 00104 SUBROUTINE DATA_COVER_ALLOC(KMODEL) 00105 INTEGER, INTENT(IN) :: KMODEL 00106 INTEGER :: J 00107 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00108 IF (LHOOK) CALL DR_HOOK("MODD_DATA_COVER_N:DATA_COVER_ALLOC",0,ZHOOK_HANDLE) 00109 ALLOCATE(DATA_COVER_MODEL(KMODEL)) 00110 DO J=1,KMODEL 00111 NULLIFY(DATA_COVER_MODEL(J)%XDATA_TOWN) 00112 NULLIFY(DATA_COVER_MODEL(J)%XDATA_NATURE) 00113 NULLIFY(DATA_COVER_MODEL(J)%XDATA_GARDEN) 00114 NULLIFY(DATA_COVER_MODEL(J)%XDATA_BLD) 00115 NULLIFY(DATA_COVER_MODEL(J)%XDATA_WALL_O_HOR) 00116 ENDDO 00117 DATA_COVER_MODEL(:)%LGARDEN=.FALSE. 00118 IF (LHOOK) CALL DR_HOOK("MODD_DATA_COVER_N:DATA_COVER_ALLOC",1,ZHOOK_HANDLE) 00119 END SUBROUTINE DATA_COVER_ALLOC 00120 00121 SUBROUTINE DATA_COVER_DEALLO 00122 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00123 IF (LHOOK) CALL DR_HOOK("MODD_DATA_COVER_N:DATA_COVER_DEALLO",0,ZHOOK_HANDLE) 00124 IF (ALLOCATED(DATA_COVER_MODEL)) DEALLOCATE(DATA_COVER_MODEL) 00125 IF (LHOOK) CALL DR_HOOK("MODD_DATA_COVER_N:DATA_COVER_DEALLO",1,ZHOOK_HANDLE) 00126 END SUBROUTINE DATA_COVER_DEALLO 00127 00128 END MODULE MODD_DATA_COVER_n 00129