SURFEX v8.1
General documentation of Surfex
init_io_surf_oln.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 ! #########
6  SUBROUTINE init_io_surf_ol_n (DTCO, U, HPROGRAM,HMASK,HSCHEME,HACTION,HNAME)
7 ! ######################
8 !
9 !!**** *INIT_IO_SURF_OL* Keep in memory the netcdf ID of the output files
10 !!
11 !! PURPOSE
12 !! -------
13 !
14 !!
15 !!** IMPLICIT ARGUMENTS
16 !! ------------------
17 !! None
18 !!
19 !! REFERENCE
20 !! ---------
21 !!
22 !! AUTHOR
23 !! ------
24 !! F. Habets *Meteo France*
25 !!
26 !! MODIFICATIONS
27 !! -------------
28 !! modified 05/04 by P. LeMoigne *Meteo France*
29 !! modified 06/10 by S. Faroux *Meteo France*
30 !!=================================================================
31 !
32 !* 0. DECLARATIONS
33 ! ------------
34 !
36 USE modd_surf_atm_n, ONLY : surf_atm_t
37 !
40 !
41 USE modd_surfex_mpi, ONLY : nrank, npio
42 !
44 !
45 USE modi_get_luout
47 USE modi_get_dim_full_n
48 USE modi_get_size_full_n
49 USE modi_get_type_dim_n
50 USE modi_init_io_surf_mask_n
52 !
53 USE modd_surfex_mpi, ONLY : wlog_mpi
54 !
55 USE netcdf
56 !
57 USE yomhook ,ONLY : lhook, dr_hook
58 USE parkind1 ,ONLY : jprb
59 !
60 IMPLICIT NONE
61 !
62 !
63 TYPE(data_cover_t), INTENT(INOUT) :: DTCO
64 TYPE(surf_atm_t), INTENT(INOUT) :: U
65 !
66  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM
67  CHARACTER(LEN=6), INTENT(IN) :: HMASK
68  CHARACTER(LEN=6), INTENT(IN) :: HSCHEME
69  CHARACTER(LEN=5), INTENT(IN) :: HACTION
70  CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: HNAME
71 !
72  CHARACTER(LEN=12), DIMENSION(1) :: YSELECT
73 REAL :: ZDEN
74 INTEGER :: IRESP ! IRESP : return-code if a problem appears
75  CHARACTER(LEN=100):: YCOMMENT ! Comment string
76 INTEGER :: ILU, IRET, IL, IFULL, JFILE
77 INTEGER :: ILUOUT
78 REAL(KIND=JPRB) :: ZHOOK_HANDLE
79 !------------------------------------------------------------------------------
80 IF (lhook) CALL dr_hook('INIT_IO_SURF_OL_N',0,zhook_handle)
81 !
82 lmask = .true.
83 !
84 yselect(1) = " "
85 !
86  CALL get_luout(hprogram,iluout)
87 !
88 IF (haction=='READ') THEN
89  CALL read_surf('OFFLIN','DIM_FULL',ifull,iret)
90 ELSE
91  CALL get_dim_full_n(u%NDIM_FULL, ifull)
92 ENDIF
93 !
94 ! size by MPI task. NINDEX is supposed to be initialized at this step.
95  CALL get_size_full_n('OFFLIN',ifull,u%NSIZE_FULL,ilu)
96 !
97 il = ilu
98  CALL get_type_dim_n(dtco, u, hmask,il)
99  CALL init_io_surf_mask_n(dtco, u, hmask, il, iluout, ilu, nmask)
100 !
101 IF (haction=='READ' .AND. lhook) CALL dr_hook('INIT_IO_SURF_OL_N',1,zhook_handle)
102 IF (haction=='READ') RETURN
103 !
104 nid_nc = 0
105 DO jfile = 1,SIZE(xnetcdf_filename_out)
106  IF (trim(hname)==trim(xnetcdf_filename_out(jfile))) THEN
107  nid_nc = xnetcdf_fileid_out(jfile)
108  IF (ldef) iret = nf90_redef(nid_nc)
109  EXIT
110  ENDIF
111 ENDDO
112 !
113 IF (nrank==npio) THEN
114  !
115  ycomment=''
116  !
117  IF (xtstep_output == floor(xtstep_output/86400.)*86400) THEN
118  zden = 86400.
119  ELSEIF (xtstep_output == floor(xtstep_output/3600.)*3600) THEN
120  zden = 3600.
121  ELSEIF (xtstep_output == floor(xtstep_output/60.)*60) THEN
122  zden = 60.
123  ELSE
124  zden = 1.
125  ENDIF
126  !
127  IF (.NOT.ltime_written.AND..NOT.ldef) THEN
128  CALL write_surf(yselect,hprogram,'time',xtstep_output/zden*xstartw,iresp,hcomment=ycomment)
129  ltime_written=.true.
130  ENDIF
131  !
132 ENDIF
133 !
134 !------------------------------------------------------------------------------
135 IF (lhook) CALL dr_hook('INIT_IO_SURF_OL_N',1,zhook_handle)
136 !------------------------------------------------------------------------------
137 !
138 END SUBROUTINE init_io_surf_ol_n
subroutine get_type_dim_n(DTCO, U, HTYPE, KDIM)
subroutine get_dim_full_n(KDIM_FULL_IN, KDIM_FULL_OUT)
integer, dimension(:), pointer nmask
character(len=200), dimension(25) xnetcdf_filename_out
subroutine get_size_full_n(HPROGRAM, KDIM_FULL, KSIZE_FULL_IN, KSIZE
integer, parameter jprb
Definition: parkind1.F90:32
subroutine init_io_surf_ol_n(DTCO, U, HPROGRAM, HMASK, HSCHEME, HACT
subroutine get_luout(HPROGRAM, KLUOUT)
Definition: get_luout.F90:7
logical lhook
Definition: yomhook.F90:15
integer, dimension(25) xnetcdf_fileid_out
subroutine init_io_surf_mask_n(DTCO, U, HMASK, KSIZE, KLUOUT, KFULL, KMASK)
subroutine wlog_mpi(HLOG, PLOG, KLOG, KLOG2, OLOG)