SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/OFFLIN/init_outfn_sean.F90
Go to the documentation of this file.
00001 !     #########
00002        SUBROUTINE INIT_OUTFN_SEA_n(HPROGRAM,KLUOUT)
00003 !     ###############################
00004 !
00005 !!****  *INIT_OUTFN_SEA_n* -  create output files and defines variables
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !!
00010 !!**  METHOD
00011 !!    ------
00012 !!
00013 !!    EXTERNAL
00014 !!    --------
00015 !!
00016 !!
00017 !!    IMPLICIT ARGUMENTS
00018 !!    ------------------
00019 !!
00020 !!    REFERENCE
00021 !!    ---------
00022 !!
00023 !!
00024 !!    AUTHOR
00025 !!    ------
00026 !!      P. LeMoigne   *Meteo France*
00027 !!
00028 !!    MODIFICATIONS
00029 !!    -------------
00030 !!      Original    04-04  P. LeMoigne
00031 !-------------------------------------------------------------------------------
00032 !
00033 !*       0.    DECLARATIONS
00034 !              ------------
00035 !
00036 USE MODD_DIAG_SURF_ATM_n,ONLY : LPROVAR_TO_DIAG
00037 !
00038 USE MODD_OL_FILEID,      ONLY : XVAR_TO_FILEOUT, XID, XOUT
00039 USE MODD_SEAFLUX_n,      ONLY : LSBL, TTIME
00040 USE MODD_SEAFLUX_SBL_n,  ONLY : NLVL
00041 USE MODD_DIAG_SEAFLUX_n
00042 USE MODD_OCEAN_n
00043 USE MODD_OCEAN_GRID_n, ONLY: NOCKMIN, NOCKMAX
00044 USE MODD_DIAG_OCEAN_n, ONLY: LDIAG_OCEAN, XTOCMOY, XSOCMOY, XUOCMOY, XVOCMOY, XDOCMOY
00045 !
00046 USE MODN_IO_OFFLINE,    ONLY: XTSTEP_OUTPUT
00047 !
00048 USE MODI_GET_DIM_FULL_n
00049 USE MODI_OL_DEFINE_DIM
00050 USE MODI_GET_DATE_OL
00051 USE MODI_CREATE_FILE
00052 USE MODI_DEF_VAR_NETCDF
00053 USE MODI_OL_WRITE_COORD
00054 !
00055 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00056 USE PARKIND1  ,ONLY : JPRB
00057 !
00058 IMPLICIT NONE
00059 include 'netcdf.inc'
00060 
00061  CHARACTER(LEN=6),  INTENT(IN) :: HPROGRAM
00062 INTEGER, INTENT(IN)           :: KLUOUT
00063 !
00064 !*       0.2   Declarations of local variables
00065 !              -------------------------------
00066 !
00067 INTEGER                          :: INI
00068 INTEGER                          :: IDIM1, INDIMS
00069  CHARACTER(LEN=13),DIMENSION(1)   :: YUNIT1, YUNIT2
00070 REAL,DIMENSION(:), POINTER       :: ZX, ZY
00071 INTEGER, DIMENSION(:), POINTER   :: IDIMS, IDDIM
00072  CHARACTER(LEN=100), DIMENSION(:), POINTER :: YNAME_DIM
00073 !
00074  CHARACTER(LEN=40),DIMENSION(1)   :: YDATE
00075 INTEGER                          :: IFILE_ID
00076  CHARACTER(LEN=50)                :: YFILE
00077  CHARACTER(LEN=100), DIMENSION(1) :: YATT_TITLE, YATT
00078  CHARACTER(LEN=3)                 :: YPAS, YLVL
00079 INTEGER                          :: JLAYER
00080 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00081 !
00082 !-------------------------------------------------------------------------------
00083 
00084 ! 1. Compute output lenght dimension
00085 !-----------------------------------
00086 IF (LHOOK) CALL DR_HOOK('INIT_OUTFN_SEA_N',0,ZHOOK_HANDLE)
00087  CALL GET_DIM_FULL_n(INI)
00088  CALL OL_DEFINE_DIM(HPROGRAM, KLUOUT, INI, IDIM1, YUNIT1, YUNIT2, &
00089                    ZX, ZY, IDIMS, IDDIM, YNAME_DIM)
00090  CALL GET_DATE_OL(TTIME,XTSTEP_OUTPUT,YDATE(1))
00091 !
00092 INDIMS = SIZE(IDDIM)
00093 !
00094 ! 4. Create output file for fluxes values
00095 !----------------------------------------------------------
00096 !
00097 IF (ALLOCATED(XVAR_TO_FILEOUT)) DEALLOCATE(XVAR_TO_FILEOUT)
00098 IF (ALLOCATED(XID)) DEALLOCATE(XID)
00099 ALLOCATE(XVAR_TO_FILEOUT(0))
00100 ALLOCATE(XID(0))
00101 XOUT=0
00102 !
00103 YATT_TITLE(1)='units'
00104 !
00105 YFILE='SEAFLUX_DIAGNOSTICS.OUT.nc'
00106  CALL CREATE_FILE(YFILE,IDIMS,YNAME_DIM,IFILE_ID,IDDIM)
00107 YATT='dimensionless'
00108 !
00109 IF(LPROVAR_TO_DIAG) THEN
00110   YATT='K'
00111   CALL DEF_VAR_NETCDF(IFILE_ID,'SST'   ,'Sea_Surface_Temperature'               ,IDDIM,YATT_TITLE,YATT)
00112 ENDIF
00113 !
00114 IF (LCOEF) THEN
00115   YATT='W/s2'
00116   CALL DEF_VAR_NETCDF(IFILE_ID,'CD_SEA'   ,'Drag_Coefficient_For_Momentum   ',IDDIM,YATT_TITLE,YATT)
00117   YATT='W/s'
00118   CALL DEF_VAR_NETCDF(IFILE_ID,'CH_SEA'   ,'Drag_Coefficient_For_Heat       ',IDDIM,YATT_TITLE,YATT)
00119   YATT='W/s/K'
00120   CALL DEF_VAR_NETCDF(IFILE_ID,'CE_SEA'   ,'Drag_Coefficient_For_Evaporation',IDDIM,YATT_TITLE,YATT)
00121   YATT='m'
00122   CALL DEF_VAR_NETCDF(IFILE_ID,'Z0_SEA'   ,'Roughness_Length_For_Momentum   ',IDDIM,YATT_TITLE,YATT)
00123   CALL DEF_VAR_NETCDF(IFILE_ID,'Z0H_SEA'  ,'Roughness_Length_For_Heat       ',IDDIM,YATT_TITLE,YATT)
00124 ENDIF
00125 !
00126 IF (LSURF_VARS) THEN
00127    YATT='kg/kg'
00128    CALL DEF_VAR_NETCDF(IFILE_ID,'QS_SEA'   ,'Surface_Humidity   '   ,IDDIM,YATT_TITLE,YATT)
00129 ENDIF
00130 !
00131 IF (N2M>0) THEN
00132    YATT='K'
00133    CALL DEF_VAR_NETCDF(IFILE_ID,'T2M_SEA' ,'2m_Temperature         '   ,IDDIM,YATT_TITLE,YATT)
00134    CALL DEF_VAR_NETCDF(IFILE_ID,'T2MMIN_SEA' ,'Minimum_2m_Temperature   '   ,IDDIM,YATT_TITLE,YATT)
00135    CALL DEF_VAR_NETCDF(IFILE_ID,'T2MMAX_SEA' ,'Maximum_2m_Temperature   '   ,IDDIM,YATT_TITLE,YATT)
00136    YATT='kg/kg'
00137    CALL DEF_VAR_NETCDF(IFILE_ID,'Q2M_SEA' ,'2m_Specific_Humidity   '   ,IDDIM,YATT_TITLE,YATT)
00138    YATT='(-)'
00139    CALL DEF_VAR_NETCDF(IFILE_ID,'HU2M_SEA','2m_Relative_Humidity   '   ,IDDIM,YATT_TITLE,YATT)
00140    CALL DEF_VAR_NETCDF(IFILE_ID,'HU2MMIN_SEA','Minimum_2m_Relative_Humidity   ' ,IDDIM,YATT_TITLE,YATT)
00141    CALL DEF_VAR_NETCDF(IFILE_ID,'HU2MMAX_SEA','Maximum_2m_Relative_Humidity   ' ,IDDIM,YATT_TITLE,YATT)
00142    YATT='m/s'
00143    CALL DEF_VAR_NETCDF(IFILE_ID,'ZON10M_SEA','10m_Zonal_wind       '   ,IDDIM,YATT_TITLE,YATT)
00144    CALL DEF_VAR_NETCDF(IFILE_ID,'MER10M_SEA','10m_Meridian_Wind     '   ,IDDIM,YATT_TITLE,YATT)
00145    CALL DEF_VAR_NETCDF(IFILE_ID,'W10M_SEA','10m_Wind     '   ,IDDIM,YATT_TITLE,YATT)
00146    CALL DEF_VAR_NETCDF(IFILE_ID,'W10MMAX_SEA','Maximum_10m_Wind  '   ,IDDIM,YATT_TITLE,YATT)
00147 ENDIF
00148 !
00149 IF (N2M>0) THEN
00150    YATT='-'
00151    CALL DEF_VAR_NETCDF(IFILE_ID,'RI_SEA'   ,'Averaged_Richardson_Number'                ,IDDIM,YATT_TITLE,YATT)
00152 ENDIF
00153 !
00154 IF (LSURF_BUDGET) THEN
00155    YATT='W/m2'
00156    CALL DEF_VAR_NETCDF(IFILE_ID,'RN_SEA'   ,'Averaged_Net_Radiation'                    ,IDDIM,YATT_TITLE,YATT)
00157    CALL DEF_VAR_NETCDF(IFILE_ID,'H_SEA'    ,'Averaged_Sensible_Heat_Flux'               ,IDDIM,YATT_TITLE,YATT)
00158    CALL DEF_VAR_NETCDF(IFILE_ID,'LE_SEA'   ,'Averaged_Total_Latent_Heat_Flux  '         ,IDDIM,YATT_TITLE,YATT)
00159    CALL DEF_VAR_NETCDF(IFILE_ID,'LEI_SEA'  ,'Averaged_SublimationLatent_Heat_Flux  '    ,IDDIM,YATT_TITLE,YATT)
00160    CALL DEF_VAR_NETCDF(IFILE_ID,'GFLUX_SEA','Averaged_Ground_Heat_Flux  '               ,IDDIM,YATT_TITLE,YATT)
00161    IF(LRAD_BUDGET)THEN
00162       CALL DEF_VAR_NETCDF(IFILE_ID,'SWD_SEA'  ,'Averaged_Downward_SW       '             ,IDDIM,YATT_TITLE,YATT)
00163       CALL DEF_VAR_NETCDF(IFILE_ID,'SWU_SEA'  ,'Averaged_Upward_SW         '             ,IDDIM,YATT_TITLE,YATT)
00164       CALL DEF_VAR_NETCDF(IFILE_ID,'LWD_SEA'  ,'Averaged_Downward_LW       '             ,IDDIM,YATT_TITLE,YATT)
00165       CALL DEF_VAR_NETCDF(IFILE_ID,'LWU_SEA'  ,'Averaged_Upward_LW         '             ,IDDIM,YATT_TITLE,YATT)
00166    ENDIF
00167    YATT='kg/ms2'
00168    CALL DEF_VAR_NETCDF(IFILE_ID,'FMU_SEA'  ,'Averaged_Zonal_Wind_Stress '               ,IDDIM,YATT_TITLE,YATT)
00169    CALL DEF_VAR_NETCDF(IFILE_ID,'FMV_SEA'  ,'Averaged_Merid_Wind_Stress '               ,IDDIM,YATT_TITLE,YATT)
00170 ENDIF
00171 !
00172 IF (LDIAG_OCEAN) THEN
00173      ! Mean cmo temperature
00174      YATT='K'
00175      CALL DEF_VAR_NETCDF(IFILE_ID,'TOML','Mean cmo Tempe ',IDDIM,YATT_TITLE,YATT)
00176      ! Mean cmo salinity
00177      YATT='psu'
00178      CALL DEF_VAR_NETCDF(IFILE_ID,'SOML','Mean cmo Salin ',IDDIM,YATT_TITLE,YATT)
00179      ! Mean cmo U-current
00180      YATT='m/s'
00181      CALL DEF_VAR_NETCDF(IFILE_ID,'UOML','Mean cmo U-cur ',IDDIM,YATT_TITLE,YATT)
00182      ! Mean cmo V-current
00183      YATT='m/s'
00184      CALL DEF_VAR_NETCDF(IFILE_ID,'VOML','Mean cmo V-cur ',IDDIM,YATT_TITLE,YATT)
00185      ! Mean cmo density
00186      YATT='Kg/m3'
00187      CALL DEF_VAR_NETCDF(IFILE_ID,'DOML','Mean cmo Densi ',IDDIM,YATT_TITLE,YATT)
00188 
00189 ENDIF
00190 !
00191  CALL OL_WRITE_COORD(YFILE,IFILE_ID,IDDIM,YATT_TITLE,YNAME_DIM,YUNIT1,YUNIT2,IDIM1,YDATE,ZX,ZY)
00192 !
00193 !
00194 IF (LSURF_BUDGETC) THEN
00195   !        
00196   YFILE='SEAFLUX_DIAG_CUMUL.OUT.nc'
00197   CALL CREATE_FILE(YFILE,IDIMS,YNAME_DIM,IFILE_ID,IDDIM)
00198   !
00199   YATT='J/m2'
00200   CALL DEF_VAR_NETCDF(IFILE_ID,'RNC_SEA'  ,'Cumulated_Averaged_Net_Radiation'        ,IDDIM,YATT_TITLE,YATT)
00201   CALL DEF_VAR_NETCDF(IFILE_ID,'HC_SEA'   ,'Cumulated_Averaged_Sensible_Heat_Flux'   ,IDDIM,YATT_TITLE,YATT)
00202   CALL DEF_VAR_NETCDF(IFILE_ID,'LEC_SEA'  ,'Cumulated_Averaged_Total_Latent_Heat_Flux',IDDIM,YATT_TITLE,YATT)
00203   CALL DEF_VAR_NETCDF(IFILE_ID,'LEIC_SEA' ,'Cumulated_Averaged_Sublimation_Latent_Heat_Flux',IDDIM,YATT_TITLE,YATT)
00204   CALL DEF_VAR_NETCDF(IFILE_ID,'GFLUXC_SEA','Cumulated_Averaged_Ground_Heat_Flux'    ,IDDIM,YATT_TITLE,YATT)
00205   IF(LRAD_BUDGET)THEN
00206     CALL DEF_VAR_NETCDF(IFILE_ID,'SWDC_SEA'  ,'Cumulated_Averaged_Downward_SW  '    ,IDDIM,YATT_TITLE,YATT)
00207     CALL DEF_VAR_NETCDF(IFILE_ID,'SWUC_SEA'  ,'Cumulated_Averaged_Upward_SW    '    ,IDDIM,YATT_TITLE,YATT)
00208     CALL DEF_VAR_NETCDF(IFILE_ID,'LWDC_SEA'  ,'Cumulated_Averaged_Downward_LW  '    ,IDDIM,YATT_TITLE,YATT)
00209     CALL DEF_VAR_NETCDF(IFILE_ID,'LWUC_SEA'  ,'Cumulated_Averaged_Upward_LW     '   ,IDDIM,YATT_TITLE,YATT)
00210   ENDIF
00211   YATT='kg/ms'
00212   CALL DEF_VAR_NETCDF(IFILE_ID,'FMUC_SEA'  ,'Cumulated_Averaged_Zonal_Wind_Stress '  ,IDDIM,YATT_TITLE,YATT)
00213   CALL DEF_VAR_NETCDF(IFILE_ID,'FMVC_SEA'  ,'Cumulated_Averaged_Merid_Wind_Stress '  ,IDDIM,YATT_TITLE,YATT)
00214   !   
00215   CALL OL_WRITE_COORD(YFILE,IFILE_ID,IDDIM,YATT_TITLE,YNAME_DIM,YUNIT1,YUNIT2,IDIM1,YDATE,ZX,ZY)
00216   !
00217 ENDIF
00218 !
00219 !
00220 IF(.NOT.LPROVAR_TO_DIAG) THEN
00221   !
00222   YFILE='SEAFLUX_PROGNOSTIC.OUT.nc'
00223   CALL CREATE_FILE(YFILE,IDIMS,YNAME_DIM,IFILE_ID,IDDIM)
00224   !
00225   YATT='K'
00226   CALL DEF_VAR_NETCDF(IFILE_ID,'SST'   ,'Sea_Surface_Temperature'                    ,IDDIM,YATT_TITLE,YATT)
00227   !
00228   YATT='m'
00229   CALL DEF_VAR_NETCDF(IFILE_ID,'Z0SEA' ,'Roughness_Length'                           ,IDDIM,YATT_TITLE,YATT)
00230   !
00231   DO JLAYER=NOCKMIN+1,NOCKMAX
00232      WRITE(YPAS,'(I1.1,1X)') JLAYER
00233      IF (JLAYER>=10) WRITE(YPAS,'(I2.2,1X)') JLAYER
00234      YLVL=ADJUSTL(YPAS(:LEN_TRIM(YPAS)))
00235      ! Ocean temperature
00236      YATT='K'
00237      CALL DEF_VAR_NETCDF(IFILE_ID,'TEMP_OC'//YLVL,'Ocean Tempe '//YLVL ,IDDIM,YATT_TITLE,YATT)
00238      ! Ocean salinity
00239      YATT='psu'
00240      CALL DEF_VAR_NETCDF(IFILE_ID,'SALT_OC'//YLVL,'Ocean Salinity '//YLVL ,IDDIM,YATT_TITLE,YATT)
00241      ! Ocean U-current
00242      YATT='m/s'
00243      CALL DEF_VAR_NETCDF(IFILE_ID,'UCUR_OC'//YLVL,'Ocean U-cur '//YLVL ,IDDIM,YATT_TITLE,YATT)
00244      ! Ocean V-current
00245      YATT='m/s'
00246      CALL DEF_VAR_NETCDF(IFILE_ID,'VCUR_OC'//YLVL,'Ocean V-cur '//YLVL ,IDDIM,YATT_TITLE,YATT)
00247      ! Ocean TKE
00248      YATT='J'
00249      CALL DEF_VAR_NETCDF(IFILE_ID,'TKE_OC'//YLVL,'Ocean TKE '//YLVL ,IDDIM,YATT_TITLE,YATT)
00250      ! Ocean mixing coeff
00251      YATT='m2/s'
00252      CALL DEF_VAR_NETCDF(IFILE_ID,'KMEL_OC'//YLVL,'Ocean KMEL '//YLVL ,IDDIM,YATT_TITLE,YATT)
00253      ! Relaxation temperature
00254      YATT='K/s'
00255      CALL DEF_VAR_NETCDF(IFILE_ID,'T_OC_REL'//YLVL,'Ocean T rel'//YLVL ,IDDIM,YATT_TITLE,YATT)
00256      ! Relaxation salinity
00257      YATT='psu/s'
00258      CALL DEF_VAR_NETCDF(IFILE_ID,'S_OC_REL'//YLVL,'Ocean S rel'//YLVL ,IDDIM,YATT_TITLE,YATT)
00259      ! Relaxation U
00260      YATT='m/s2'
00261      CALL DEF_VAR_NETCDF(IFILE_ID,'U_OC_REL'//YLVL,'Ocean U rel'//YLVL ,IDDIM,YATT_TITLE,YATT)
00262      ! Relaxation V
00263      YATT='m/s2'
00264      CALL DEF_VAR_NETCDF(IFILE_ID,'V_OC_REL'//YLVL,'Ocean V rel'//YLVL ,IDDIM,YATT_TITLE,YATT)
00265   END DO  
00266 !
00267   IF (LSBL) THEN
00268     ! 6.1 Heights
00269     YATT = 'm'
00270     DO JLAYER=1,NLVL
00271       WRITE(YPAS,'(I2.2,1X)') JLAYER ; YLVL=ADJUSTL(YPAS(:LEN_TRIM(YPAS)))
00272       CALL DEF_VAR_NETCDF(IFILE_ID,'SEA_SBL_Z'//YLVL,'Height_of_canopy_Layer_'//YLVL ,IDDIM,YATT_TITLE,YATT)
00273     END DO
00274     ! 6.2 Wind
00275     YATT = 'm/s'
00276     DO JLAYER=1,NLVL
00277       WRITE(YPAS,'(I2.2,1X)') JLAYER ; YLVL=ADJUSTL(YPAS(:LEN_TRIM(YPAS)))
00278       CALL DEF_VAR_NETCDF(IFILE_ID,'SEA_SBL_U'//YLVL,'Wind_of_canopy_Layer_'//YLVL ,IDDIM,YATT_TITLE,YATT)
00279     END DO
00280     ! 6.3 Temperature
00281     YATT = 'K'
00282     DO JLAYER=1,NLVL
00283       WRITE(YPAS,'(I2.2,1X)') JLAYER ; YLVL=ADJUSTL(YPAS(:LEN_TRIM(YPAS)))
00284       CALL DEF_VAR_NETCDF(IFILE_ID,'SEA_SBL_T'//YLVL,'Temperature_of_canopy_Layer_'//YLVL ,IDDIM,YATT_TITLE,YATT)
00285     END DO
00286     ! 6.4 Temperature
00287     YATT = 'kg/m3'
00288     DO JLAYER=1,NLVL
00289       WRITE(YPAS,'(I2.2,1X)') JLAYER ; YLVL=ADJUSTL(YPAS(:LEN_TRIM(YPAS)))
00290       CALL DEF_VAR_NETCDF(IFILE_ID,'SEA_SBL_Q'//YLVL,'Humidity_of_canopy_Layer_'//YLVL ,IDDIM,YATT_TITLE,YATT)
00291     END DO
00292     ! 6.5 Turbulence
00293     YATT = 'm2/s2'
00294     DO JLAYER=1,NLVL
00295       WRITE(YPAS,'(I2.2,1X)') JLAYER ; YLVL=ADJUSTL(YPAS(:LEN_TRIM(YPAS)))
00296       CALL DEF_VAR_NETCDF(IFILE_ID,'SEA_SBL_E'//YLVL,'TKE_of_canopy_Layer_'//YLVL ,IDDIM,YATT_TITLE,YATT)
00297     END DO
00298   ENDIF
00299   !
00300   CALL OL_WRITE_COORD(YFILE,IFILE_ID,IDDIM,YATT_TITLE,YNAME_DIM,YUNIT1,YUNIT2,IDIM1,YDATE,ZX,ZY)
00301   !
00302 ENDIF ! End .NOT.LPROVAR_TO_DIAG
00303 IF (LHOOK) CALL DR_HOOK('INIT_OUTFN_SEA_N',1,ZHOOK_HANDLE)
00304 !
00305 END SUBROUTINE INIT_OUTFN_SEA_n