SURFEX v7.3
General documentation of Surfex
|
00001 ! ######################################### 00002 SUBROUTINE CANOPY_GRID(KI,KLVL,PZ,PZF,PDZ,PDZF) 00003 ! ######################################### 00004 ! 00005 !!**** *CANOPY_GRID* - computation of vertical grid coordinatesa at 00006 !! half levels and grid depths at half and full 00007 !! levels 00008 !! 00009 !! 00010 !! PURPOSE 00011 !! ------- 00012 !! 00013 !!** METHOD 00014 !! ------ 00015 !! 00016 ! 00017 ! 00018 ! --------------------------------- PZ(k+1) PDZ(k+1) 00019 ! ^ 00020 ! | 00021 ! | 00022 ! - - - - - - - - - - - - - - - - - PZf(k+1) | PDZf(k+1) 00023 ! ^ | 00024 ! | | 00025 ! --------------------------------- PZ(k), XU, XT, XQ, XTKE | PDZ(k) V 00026 ! | ^ 00027 ! - - - - - - - - - - - - - - - - - PZf(k) V | PDZf(k) 00028 ! --------------------------------- PZ(k-1) PDZ(k-1) V 00029 ! - - - - - - - - - - - - - - - - - PZf(k-1) 00030 ! 00031 00032 !! EXTERNAL 00033 !! -------- 00034 !! 00035 !! 00036 !! IMPLICIT ARGUMENTS 00037 !! ------------------ 00038 !! 00039 !! REFERENCE 00040 !! --------- 00041 !! 00042 !! 00043 !! AUTHOR 00044 !! ------ 00045 !! V. Masson *Meteo France* 00046 !! 00047 !! MODIFICATIONS 00048 !! ------------- 00049 !! Original 07/2006 00050 !------------------------------------------------------------------------------- 00051 ! 00052 !* 0. DECLARATIONS 00053 ! ------------ 00054 ! 00055 ! 00056 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00057 USE PARKIND1 ,ONLY : JPRB 00058 ! 00059 IMPLICIT NONE 00060 ! 00061 !* 0.1 Declarations of arguments 00062 ! ------------------------- 00063 ! 00064 INTEGER, INTENT(IN) :: KI ! number of horizontal points 00065 INTEGER, INTENT(IN) :: KLVL ! number of levels in canopy 00066 REAL, DIMENSION(KI,KLVL), INTENT(IN) :: PZ ! heights of canopy levels (m) 00067 REAL, DIMENSION(KI,KLVL), INTENT(OUT) :: PZF ! heights of surface between canopy lev.(m) 00068 REAL, DIMENSION(KI,KLVL), INTENT(OUT) :: PDZF ! depth between 2 full canopy levels (m) 00069 ! ! PDZF is located at half levels 00070 REAL, DIMENSION(KI,KLVL), INTENT(OUT) :: PDZ ! depth between 2 half canopy levels (m) 00071 ! ! PDZ is located at full levels 00072 ! 00073 ! 00074 !* 0.2 Declarations of local variables 00075 ! ------------------------------- 00076 ! 00077 INTEGER :: JLAYER ! loop counter on layers 00078 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00079 ! 00080 !------------------------------------------------------------------------------- 00081 ! 00082 !* 1. Geometric computations 00083 ! ---------------------- 00084 ! 00085 ! 00086 !* 1.1 layer depths (variable located at half levels below full levels) 00087 ! ------------ 00088 ! 00089 IF (LHOOK) CALL DR_HOOK('CANOPY_GRID',0,ZHOOK_HANDLE) 00090 PDZF(:,:) = -999. 00091 PDZF(:,1) = 2.*PZ(:,1) 00092 DO JLAYER=2,KLVL 00093 PDZF(:,JLAYER) = PZ(:,JLAYER) - PZ(:,JLAYER-1) 00094 END DO 00095 ! 00096 !* 1.2 Layer heights (variable located at half levels below full levels) 00097 ! ------------- 00098 ! 00099 PZF(:,:) = -999. 00100 PZF(:,1) = 0. 00101 DO JLAYER=2,KLVL 00102 PZF(:,JLAYER) = 2.*PZ(:,JLAYER-1) - PZF(:,JLAYER-1) 00103 END DO 00104 ! 00105 ! 00106 !* 1.3 layer depths (variable located at full levels) 00107 ! ------------ 00108 ! 00109 PDZ(:,:) = -999. 00110 DO JLAYER=1,KLVL-1 00111 PDZ(:,JLAYER) = PZF(:,JLAYER+1) - PZF(:,JLAYER) 00112 END DO 00113 PDZ(:,KLVL) = 2.*(PZ(:,KLVL)-PZF(:,KLVL)) 00114 IF (LHOOK) CALL DR_HOOK('CANOPY_GRID',1,ZHOOK_HANDLE) 00115 ! 00116 !------------------------------------------------------------------------------- 00117 END SUBROUTINE CANOPY_GRID