SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/mod1dn.F90
Go to the documentation of this file.
00001 !     #########
00002     SUBROUTINE MOD1D_n(HPROGRAM,PTIME,PEMIS,PDIR_ALB,PSCA_ALB,PLW,PSCA_SW,&
00003                        PDIR_SW, PSFTH,PSFTQ,PSFU,PSFV,PRAIN,PSST )           
00004 !     #######################################################################
00005 !
00006 !!****  *MOD1D_n*  
00007 !!
00008 !!    PURPOSE
00009 !!    -------
00010 !     Source that exchanges Fluxes and SST between SURFEX (coupling_seaflux) 
00011 !     and the oceanic 1D model in TKE eqations (mixtl_n) 
00012 !     
00013 !!**  METHOD
00014 !!    ------
00015 !     Change turbulent fluxes in solar, non solar, and fresh water fluxes 
00016 !     with the oceanic convention for orientation of fluxes
00017 !     The stress of wind is exchange between SURFEX and TKE model
00018 !
00019 !!    EXTERNAL
00020 !!    --------
00021 !!
00022 !!    IMPLICIT ARGUMENTS
00023 !!    ------------------ 
00024 !!      
00025 !!    REFERENCE
00026 !!    ---------
00027 !!
00028 !!      
00029 !!    AUTHOR
00030 !!    ------
00031 !!     C. Lebeaupin  *Météo-France* 
00032 !!
00033 !!    MODIFICATIONS
00034 !!    -------------
00035 !!      Original     02/2008
00036 !!      Modified     07/2012, P. Le Moigne : CMO1D phasing
00037 !-------------------------------------------------------------------------------
00038 !
00039 !*       0.     DECLARATIONS
00040 !               ------------
00041 !
00042 USE MODD_CSTS
00043 USE MODD_OCEAN_CSTS
00044 USE MODD_OCEAN_n, ONLY : XSEATEND, LPROGSST, NOCTCOUNT, XSEAHMO
00045 USE MODD_SEAFLUX_n
00046 USE MODD_SURF_PAR,   ONLY : XUNDEF
00047 !
00048 USE MODI_MIXTL_n
00049 USE MODI_DIAG_INLINE_OCEAN_n
00050 !
00051 USE MODD_OCEAN_REL_n , ONLY : LFLUX_NULL
00052 USE MODI_GET_LUOUT
00053 !
00054 !
00055 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00056 USE PARKIND1  ,ONLY : JPRB
00057 !
00058 IMPLICIT NONE
00059 !
00060 !*      0.1    declarations of arguments
00061 !
00062 !
00063  CHARACTER(LEN=6),    INTENT(IN)       :: HPROGRAM  ! program calling surf. schemes
00064 REAL                ,INTENT(IN)       :: PTIME   ! current time since midnight in second
00065 REAL, DIMENSION(:)  ,INTENT(IN)       :: PEMIS    ! emissivity
00066 REAL, DIMENSION(:,:),INTENT(IN)       :: PDIR_ALB ! direct albedo
00067 REAL, DIMENSION(:,:),INTENT(IN)       :: PSCA_ALB ! scattered albedo
00068 REAL, DIMENSION(:)  ,INTENT(IN)       :: PLW     ! longwave radiation on horizontal surface (W/m2)
00069 REAL, DIMENSION(:,:),INTENT(IN)       :: PSCA_SW ! diffuse solar radiation on horizontal surface (W/m2)
00070 REAL, DIMENSION(:,:),INTENT(IN)       :: PDIR_SW ! direct solar radiation on horizontal surface (W/m2)
00071 REAL, DIMENSION(:)  ,INTENT(IN)       :: PSFTH   ! flux of heat (W/m2)
00072 REAL, DIMENSION(:)  ,INTENT(IN)       :: PSFTQ   ! flux of water vapor (kg/m2/s)
00073 REAL, DIMENSION(:)  ,INTENT(IN)       :: PSFU    ! zonal stress (Pa)
00074 REAL, DIMENSION(:)  ,INTENT(IN)       :: PSFV    ! meridian stress (Pa)
00075 REAL, DIMENSION(:)  ,INTENT(IN)       :: PRAIN   ! liquid precipitation (kg/s/m2)
00076 !
00077 REAL, DIMENSION(:)  ,INTENT(INOUT)    :: PSST    ! sea surface temperature (K)
00078 !
00079 !*      0.2    declarations of local variables
00080 !
00081 INTEGER :: JPT
00082 INTEGER :: ITIME,NOCEAN_STEP
00083 REAL, DIMENSION(SIZE(PSFTH)) :: ZFSOL,ZFNSOL !total solar and non-solar fluxes (W/m2)
00084 REAL, DIMENSION(SIZE(PSFTH)) :: ZSFTEAU      !fresh water flux(kg/m2/s)
00085 REAL, DIMENSION(SIZE(PSFTH)) :: ZLV          !latent heat
00086 !
00087 REAL, DIMENSION(SIZE(PSFTH)) :: ZLWU         !long waves upward fluxes (W/m2)
00088 REAL, DIMENSION(SIZE(PDIR_ALB,1),SIZE(PDIR_ALB,2)) :: ZSWU
00089                                              !shortwave upward fluxes (W/m2)
00090 !
00091 REAL, DIMENSION(SIZE(PSFTH)) :: ZSEATEMP     !surface temperature (K)
00092 !
00093 LOGICAL         :: GCALLMIXT, GTIMEOK
00094 INTEGER         :: ILUOUT              ! output listing logical unit
00095 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00096 !
00097 !-------------------------------------------------------------------------------
00098 !
00099 IF (LHOOK) CALL DR_HOOK('MOD1D_N',0,ZHOOK_HANDLE)
00100 !
00101  CALL GET_LUOUT(HPROGRAM,ILUOUT)
00102 !
00103 ITIME=INT(PTIME)
00104 NOCEAN_STEP=INT(XOCEAN_TSTEP)
00105 !
00106 GTIMEOK=(MOD(ITIME,NOCEAN_STEP)==0)
00107 GCALLMIXT=((MOD(ITIME,NOCEAN_STEP)==0).AND.(NOCTCOUNT>0))
00108 !
00109 !Call 1D model if ptime proportional to the oceanic model time step
00110 !
00111 IF (GCALLMIXT) THEN
00112 !
00113 !       1.     Initializations
00114 !________________________________________________________________________
00115 !Computation of solar, non solar and fresh water fluxes
00116   DO JPT=1,SIZE(PSFTH)
00117  !SW Flux up
00118     ZSWU(JPT,:)= PDIR_SW(JPT,:) * PDIR_ALB(JPT,:) + PSCA_SW(JPT,:)*PSCA_ALB(JPT,:)
00119  !Net solar flux  
00120     ZFSOL(JPT)=(SUM(PDIR_SW(JPT,:))+SUM(PSCA_SW(JPT,:))-SUM(ZSWU(JPT,:)))/(XRHOSW*XCPSW)
00121  !Calcul flux LW UP
00122     ZLWU(JPT)= PEMIS(JPT)*XSTEFAN*PSST(JPT)**4 + (1-PEMIS(JPT))*PLW(JPT)
00123    
00124     IF (PSST(JPT)<=(XTT-2)) THEN
00125       ZFNSOL(JPT)=(PLW(JPT)-ZLWU(JPT)-PSFTH(JPT)-(XLSTT*PSFTQ(JPT)))/(XRHOSW*XCPSW)
00126       ZSFTEAU(JPT)=PSFTQ(JPT)/XRHOSWREF
00127     ELSE
00128       ZLV(JPT)=XLVTT+(XCPV-XCL)*(PSST(JPT)-XTT)
00129       ZFNSOL(JPT)=(PLW(JPT)-ZLWU(JPT)-PSFTH(JPT)-(ZLV(JPT)*PSFTQ(JPT)))/(XRHOSW*XCPSW)
00130       ZSFTEAU(JPT)=(PSFTQ(JPT)-PRAIN(JPT))/XRHOSWREF
00131     ENDIF  
00132   ENDDO
00133 !__________________________________________________________________________
00134 !
00135 !        2. Call oceanic TKE model
00136 !           ----------------------
00137 !
00138   IF (LFLUX_NULL) THEN
00139      WRITE(ILUOUT,*) 'Caution : SURFACE FLUX ARE SET TO 0 '
00140      ZFSOL(:)   = 0.
00141      ZFNSOL(:)  = 0.
00142      ZSFTEAU(:) = 0.
00143   END IF
00144 
00145   CALL MIXTL_n(ZFSOL,ZFNSOL,ZSFTEAU,PSFU,PSFV,ZSEATEMP)
00146 !
00147 !---------------------------------------------------------------------------
00148 !        3. Coupling with SURFEX by SST (and relative wind) evolution
00149 !
00150   IF (LPROGSST) THEN 
00151     PSST(:)=ZSEATEMP(:)
00152     !WRITE(ILUOUT,*) '**SST CHANGED FOR THE ',NOCTCOUNT,'TIME BY FIRST LEVEL OCEANIC MODEL TEMPERATURE AT ', ITIME,' s **'
00153   ENDIF
00154   !
00155 ENDIF
00156 !
00157 IF (GTIMEOK) THEN
00158   CALL DIAG_INLINE_OCEAN_n
00159   NOCTCOUNT=NOCTCOUNT+1
00160 ENDIF
00161 !
00162 IF (LHOOK) CALL DR_HOOK('MOD1D_N',1,ZHOOK_HANDLE)
00163 !!-------------------------------------------------------------------------------
00164 !!-----------------------------------------------------------------------------
00165 END SUBROUTINE MOD1D_n