SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE GET_SURF_SIZE_n(HTYPE,KL) 00003 ! ##################################################### 00004 ! 00005 !!**** *GET_SURF_SIZE_n* - routine to define the masks between all surface 00006 !! points and each of the four surface types 00007 !! 00008 !! PURPOSE 00009 !! ------- 00010 !! 00011 !!** METHOD 00012 !! ------- 00013 !! 00014 !! REFERENCE 00015 !! --------- 00016 !! 00017 !! 00018 !! AUTHOR 00019 !! ------ 00020 !! V. Masson *Meteo France* 00021 !! 00022 !! MODIFICATIONS 00023 !! ------------- 00024 !! Original 01/2004 00025 !------------------------------------------------------------------------------- 00026 ! 00027 !* 0. DECLARATIONS 00028 ! ------------ 00029 ! 00030 USE MODD_SURF_ATM_n, ONLY : XCOVER, XNATURE, XSEA, XTOWN, XWATER 00031 ! 00032 USE MODI_CONVERT_COVER_FRAC 00033 ! 00034 ! 00035 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00036 USE PARKIND1 ,ONLY : JPRB 00037 ! 00038 IMPLICIT NONE 00039 ! 00040 !* 0.1 Declarations of arguments 00041 ! ------------------------- 00042 ! 00043 CHARACTER(LEN=*), INTENT(IN) :: HTYPE ! Type of surface 00044 INTEGER, INTENT(OUT) :: KL ! number of points of this surface type 00045 ! 00046 !* 0.2 Declarations of local variables 00047 ! ------------------------------- 00048 ! 00049 REAL, DIMENSION(:), ALLOCATABLE :: ZSEA ! sea cover 00050 REAL, DIMENSION(:), ALLOCATABLE :: ZNATURE! nature cover 00051 REAL, DIMENSION(:), ALLOCATABLE :: ZTOWN ! town cover 00052 REAL, DIMENSION(:), ALLOCATABLE :: ZWATER ! water cover 00053 ! 00054 INTEGER :: ILU ! total horizontal size 00055 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00056 !------------------------------------------------------------------------------- 00057 ! 00058 !* 1. Fractions 00059 ! --------- 00060 ! 00061 IF (LHOOK) CALL DR_HOOK('GET_SURF_SIZE_N',0,ZHOOK_HANDLE) 00062 ILU = SIZE(XCOVER,1) 00063 ! 00064 ALLOCATE(ZSEA (ILU)) 00065 ALLOCATE(ZNATURE(ILU)) 00066 ALLOCATE(ZTOWN (ILU)) 00067 ALLOCATE(ZWATER (ILU)) 00068 IF (.NOT.ASSOCIATED(XSEA)) THEN 00069 CALL CONVERT_COVER_FRAC(XCOVER,ZSEA,ZNATURE,ZTOWN,ZWATER) 00070 ELSE 00071 ZSEA = XSEA 00072 ZNATURE = XNATURE 00073 ZWATER = XWATER 00074 ZTOWN = XTOWN 00075 END IF 00076 ! 00077 SELECT CASE (HTYPE) 00078 CASE ('FULL') 00079 KL = ILU 00080 ! 00081 CASE ('NATURE') 00082 KL = COUNT(ZNATURE(:) > 0.) 00083 ! 00084 CASE ('SEA') 00085 KL = COUNT(ZSEA(:) > 0.) 00086 ! 00087 CASE ('TOWN') 00088 KL = COUNT(ZTOWN(:) > 0.) 00089 ! 00090 CASE ('WATER') 00091 ! 00092 KL = COUNT(ZWATER(:) > 0.) 00093 ! 00094 CASE ('LAND') 00095 ! 00096 KL = COUNT(ZNATURE(:) + ZTOWN(:) > 0.) 00097 ! 00098 END SELECT 00099 !------------------------------------------------------------------------------- 00100 DEALLOCATE(ZSEA ) 00101 DEALLOCATE(ZNATURE) 00102 DEALLOCATE(ZTOWN ) 00103 DEALLOCATE(ZWATER ) 00104 IF (LHOOK) CALL DR_HOOK('GET_SURF_SIZE_N',1,ZHOOK_HANDLE) 00105 !------------------------------------------------------------------------------- 00106 ! 00107 END SUBROUTINE GET_SURF_SIZE_n