SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE PREP_HOR_OCEAN_FIELDS(HPROGRAM,HSURF,HFILE,HFILETYPE,KLUOUT,OUNIF) 00003 ! ####################################################### 00004 ! 00005 ! 00006 !!**** *PREP_HOR_OCEAN_FIELDS* - prepares all oceanic fields for the 1D oceanic model 00007 !! 00008 !! PURPOSE 00009 !! ------- 00010 ! 00011 !!** METHOD 00012 !! ------ 00013 !! 00014 !! REFERENCE 00015 !! --------- 00016 !! 00017 !! 00018 !! AUTHOR 00019 !! ------ 00020 !! C. Lebeaupin Brossier 00021 !! 00022 !! MODIFICATIONS 00023 !! ------------- 00024 !! Original 01/2008 00025 !! Modified 07/2012, P. Le Moigne : CMO1D phasing 00026 !!------------------------------------------------------------------ 00027 ! 00028 ! 00029 USE MODD_SURF_PAR, ONLY : XUNDEF 00030 USE MODD_OCEAN_CSTS, ONLY : XRHOSWREF 00031 USE MODD_SEAFLUX_n 00032 USE MODD_OCEAN_GRID_n, ONLY : NOCKMIN,NOCKMAX,XDZ1,XZHOC 00033 USE MODD_OCEAN_n 00034 USE MODD_OCEAN_REL_n 00035 ! 00036 USE MODI_PREP_HOR_OCEAN_FIELD 00037 ! 00038 ! 00039 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00040 USE PARKIND1 ,ONLY : JPRB 00041 ! 00042 IMPLICIT NONE 00043 ! 00044 !* 0.1 declarations of arguments 00045 ! 00046 CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes 00047 CHARACTER(LEN=7), INTENT(IN) :: HSURF ! type of field 00048 CHARACTER(LEN=28), INTENT(IN) :: HFILE ! file name 00049 CHARACTER(LEN=6), INTENT(IN) :: HFILETYPE ! file type 00050 INTEGER, INTENT(IN) :: KLUOUT ! logical unit of output listing 00051 LOGICAL, INTENT(IN) :: OUNIF ! flag for prescribed uniform field 00052 ! 00053 ! 00054 !* 0.2 declarations of local variables 00055 ! 00056 CHARACTER(LEN=8) :: YSURF ! type of field 00057 CHARACTER(LEN=28) :: YNCVARNAME ! variable to read 00058 ! 00059 INTEGER :: IL ! number of points 00060 INTEGER :: IK1 00061 INTEGER :: J, JLEV ! loop counters 00062 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00063 !--------------------------------------------------------------------------- 00064 ! 00065 !* 1. Patch 00066 ! 00067 !--------------------------------------------------------------------------- 00068 ! 00069 !* 3. Treatment of oceanic temperature 00070 IF (LHOOK) CALL DR_HOOK('PREP_HOR_OCEAN_FIELDS',0,ZHOOK_HANDLE) 00071 YSURF='TEMP_OC' 00072 YNCVARNAME='temperature' 00073 CALL PREP_HOR_OCEAN_FIELD(HPROGRAM,HFILE,HFILETYPE,KLUOUT,OUNIF,YSURF,YNCVARNAME) 00074 !--------------------------------------------------------------------------- 00075 ! 00076 !* 4. Treatment of oceanic salinity 00077 YSURF='SALT_OC' 00078 YNCVARNAME='salinity' 00079 CALL PREP_HOR_OCEAN_FIELD(HPROGRAM,HFILE,HFILETYPE,KLUOUT,OUNIF,YSURF,YNCVARNAME) 00080 !--------------------------------------------------------------------------- 00081 ! 00082 !* 5. Treatment of oceanic current 00083 YSURF='UCUR_OC' 00084 YNCVARNAME='u' 00085 CALL PREP_HOR_OCEAN_FIELD(HPROGRAM,HFILE,HFILETYPE,KLUOUT,OUNIF,YSURF,YNCVARNAME) 00086 YSURF='VCUR_OC' 00087 YNCVARNAME='v' 00088 CALL PREP_HOR_OCEAN_FIELD(HPROGRAM,HFILE,HFILETYPE,KLUOUT,OUNIF,YSURF,YNCVARNAME) 00089 !--------------------------------------------------------------------------- 00090 ! 00091 IK1=NOCKMIN+1 00092 IL = SIZE(XSEAT,1) 00093 IF (IL/=0) THEN 00094 ALLOCATE(XSEAE (SIZE(XSEAT,1),NOCKMIN:NOCKMAX)) 00095 XSEAE(:,:) =1.E-3 00096 ALLOCATE(XSEABATH (SIZE(XSEAT,1),NOCKMIN:NOCKMAX)) 00097 XSEABATH(:,:)=1. 00098 ALLOCATE(XSEAHMO (SIZE(XSEAT,1))) 00099 XSEAHMO(:) =XUNDEF 00100 ALLOCATE(XLE (SIZE(XSEAT,1),NOCKMIN:NOCKMAX)) 00101 ALLOCATE(XLK (SIZE(XSEAT,1),NOCKMIN:NOCKMAX)) 00102 ALLOCATE(XKMEL (SIZE(XSEAT,1),NOCKMIN:NOCKMAX)) 00103 ALLOCATE(XKMELM (SIZE(XSEAT,1),NOCKMIN:NOCKMAX)) 00104 XLE(:,:) =XUNDEF 00105 XLK(:,:) =XUNDEF 00106 XKMEL(:,:) =XUNDEF 00107 XKMELM(:,:) =XUNDEF 00108 ALLOCATE(XSEATEND (SIZE(XSEAT,1))) 00109 XSEATEND(:) =XUNDEF 00110 ! 00111 ALLOCATE(XDTFNSOL (SIZE(XSEAT,1))) 00112 XDTFNSOL(:) = XUNDEF 00113 ALLOCATE(XDTFSOL (SIZE(XSEAT,1),NOCKMIN:NOCKMAX)) 00114 XDTFSOL(:,:)= XUNDEF 00115 !!---------------------------------------------------------------------------- 00116 !! 00117 !!* 6. Treatment of bathymetry indice and 00118 !! apply bathy mask 00119 DO J=1,IL 00120 DO JLEV=IK1+1,NOCKMAX 00121 IF (XSEABATHY(J)-XZHOC(JLEV)>0.) THEN 00122 XSEABATH(J,JLEV)=0. 00123 XSEAE(J,JLEV) = XUNDEF 00124 XSEAU(J,JLEV) = XUNDEF 00125 XSEAV(J,JLEV) = XUNDEF 00126 XSEAT(J,JLEV) = XUNDEF 00127 XSEAS(J,JLEV) = XUNDEF 00128 ! 00129 XSEAT_REL(J,JLEV) = XUNDEF 00130 XSEAS_REL(J,JLEV) = XUNDEF 00131 ! 00132 XSEAU_REL(J,JLEV) = XUNDEF 00133 XSEAV_REL(J,JLEV) = XUNDEF 00134 ! 00135 ENDIF 00136 ENDDO 00137 ENDDO 00138 ! 00139 !--------------------------------------------------------------------------- 00140 ENDIF 00141 IF (LHOOK) CALL DR_HOOK('PREP_HOR_OCEAN_FIELDS',1,ZHOOK_HANDLE) 00142 !---------------------------------------------------------------------------- 00143 END SUBROUTINE PREP_HOR_OCEAN_FIELDS