SURFEX v8.1
General documentation of Surfex
write_surf_atmn.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 write_surf_atm_n (YSC, HPROGRAM,HWRITE,OLAND_USE)
7 ! ####################################
8 !
9 !!**** *WRITE_SURF_ATM_n* - routine to write surface variables
10 !! in their respective files or in file
11 !!
12 !! PURPOSE
13 !! -------
14 !!
15 !!** METHOD
16 !! ------
17 !!
18 !! EXTERNAL
19 !! --------
20 !!
21 !!
22 !! IMPLICIT ARGUMENTS
23 !! ------------------
24 !!
25 !! REFERENCE
26 !! ---------
27 !!
28 !!
29 !! AUTHOR
30 !! ------
31 !! V. Masson *Meteo France*
32 !!
33 !! MODIFICATIONS
34 !! -------------
35 !! Original 01/2003
36 !! Modified 06/2007, P.LeMoigne: do not write pgd fields in
37 !! historical files
38 !! Modified 03/2009, B.Decharme: keys for arrange cover
39 !! Modified 04/2009, B.Decharme: write precipitation forcing into the restart file for ARPEGE/ALADIN run
40 ! Modified 06/2009, B.Decharme: flag to desactivate writing of horizontal grid
41 ! Modified 08/2009, B.Decharme: BUDGETC for all tiles
42 ! Modified 07/2011, B.Decharme: delete write pgd fields
43 ! Modified 07/2011, B.Decharme: land_use key for writing semi-prognostic variables
44 ! Modified 05/2012, B.Decharme: supress LPROVAR_TO_DIAG to write prognostic fields if user want
45 ! Modified 05/2013, B.Decharme: WRITESURF_PRECIP becomes WRITESURF_CPL_GCM
46 !-------------------------------------------------------------------------------
47 !
48 !* 0. DECLARATIONS
49 ! ------------
50 !
51 USE modd_surfex_mpi, ONLY : nrank
52 !
53 USE modd_surfex_n, ONLY : surfex_t
54 !
56 !
57 USE modd_surf_conf, ONLY : cprogname
58 USE modd_surf_par, ONLY : nversion, nbugfix
60 !
61 USE modi_init_io_surf_n
63 USE modi_write_sea_n
64 USE modi_write_inland_water_n
65 USE modi_write_nature_n
66 USE modi_write_town_n
67 USE modi_end_io_surf_n
68 USE modi_write_grid
69 !
70 USE modi_writesurf_atm_conf_n
71 USE modi_writesurf_sso_canopy_n
72 USE modi_writesurf_cpl_gcm_n
73 !
74 USE yomhook ,ONLY : lhook, dr_hook
75 USE parkind1 ,ONLY : jprb
76 !
77 IMPLICIT NONE
78 !
79 !* 0.1 Declarations of arguments
80 ! -------------------------
81 !
82 !
83 TYPE(surfex_t), INTENT(INOUT) :: YSC
84 !
85  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes
86  CHARACTER(LEN=3), INTENT(IN) :: HWRITE ! 'PREP' : does not write SBL XUNDEF fields
87 ! ! 'ALL' : all fields are written
88 LOGICAL, INTENT(IN) :: OLAND_USE !
89 !
90 !* 0.2 Declarations of local variables
91 ! -------------------------------
92 !
93  CHARACTER(LEN=100) :: YCOMMENT
94 INTEGER :: IRESP
95 LOGICAL :: LSAVE_SELECT
96 REAL(KIND=JPRB) :: ZHOOK_HANDLE
97 !-------------------------------------------------------------------------------
98 !
99 IF (lhook) CALL dr_hook('WRITE_SURF_ATM_N',0,zhook_handle)
100 CPROGNAME = HPROGRAM
101 !
102 !* 1. Configuration and cover fields:
103 ! ------------------------------
104 !
105 ! Initialisation for IO
106 !
107  CALL init_io_surf_n(ysc%DTCO, ysc%U, hprogram,'FULL ','SURF ','WRITE')
108 !
109 lsave_select=ysc%DUO%LSELECT
110 ysc%DUO%LSELECT =.false.
111 !
112 ycomment='(-)'
113  CALL write_surf(ysc%DUO%CSELECT, hprogram,'VERSION',nversion,iresp,ycomment)
114  CALL write_surf(ysc%DUO%CSELECT, hprogram,'BUG ',nbugfix ,iresp,ycomment)
115  CALL write_surf(ysc%DUO%CSELECT, hprogram,'STORAGETYPE',hwrite,iresp,ycomment)
116  CALL write_surf(ysc%DUO%CSELECT, hprogram,'DIM_FULL ',ysc%U%NDIM_FULL,iresp,hcomment=ycomment)
117  CALL write_surf(ysc%DUO%CSELECT, hprogram,'WRITE_EXT ',lwrite_extern,iresp,hcomment=ycomment)
118 !
119  CALL write_surf(ysc%DUO%CSELECT, hprogram,'SPLIT_PATCH',lsplit_patch,iresp,hcomment=ycomment)
120 !
121 ycomment='s'
122  CALL write_surf(ysc%DUO%CSELECT, hprogram,'DTCUR',ysc%U%TTIME,iresp,ycomment)
123 !
124 ysc%DUO%LSELECT=lsave_select
125 !
126  CALL write_grid(ysc%DUO%CSELECT, hprogram,ysc%UG%G%CGRID,ysc%UG%G%XGRID_PAR,&
127  ysc%UG%G%XLAT,ysc%UG%G%XLON,ysc%UG%G%XMESH_SIZE,iresp)
128 !
129  CALL writesurf_atm_conf_n(ysc%CHU, ysc%DUO, ysc%USS, hprogram)
130 !
131 IF (hwrite/='PRE') CALL writesurf_sso_canopy_n(ysc%DUO%CSELECT, ysc%SB, hprogram,&
132  (ysc%USS%CROUGH=='BE04' .AND. .NOT. lnowrite_canopy))
133 !
134  CALL writesurf_cpl_gcm_n(ysc%DUO%CSELECT, ysc%U, hprogram)
135 !
136 ycomment='flag for accumulated variables'
137  CALL write_surf(ysc%DUO%CSELECT, hprogram,'BUDC',ysc%DUO%LSURF_BUDGETC,iresp,hcomment=ycomment)
138 !
139 IF (ysc%DUO%LSURF_BUDGETC) THEN
140  ycomment='time of beginning of accumulation'
141  CALL write_surf(ysc%DUO%CSELECT, hprogram,'TBUDC',ysc%DUO%TIME_BUDGETC,iresp,hcomment=ycomment)
142 END IF
143 !
144 ! End of IO
145 !
146  CALL end_io_surf_n(hprogram)
147 !
148 !* 3. Sea
149 ! ---
150 !
151 IF (ysc%U%NDIM_SEA>0) CALL write_sea_n(ysc%DTCO,ysc%DUO%CSELECT,ysc%U,ysc%SM,hprogram,hwrite)
152 !
153 !
154 !* 4. Inland water
155 ! ------------
156 !
157 IF (ysc%U%NDIM_WATER>0) CALL write_inland_water_n(ysc%DTCO, ysc%DUO%CSELECT, ysc%U, &
158  ysc%WM, ysc%FM, hprogram,hwrite)
159 !
160 !
161 !* 5. Vegetation scheme
162 ! -----------------
163 !
164 IF (ysc%U%NDIM_NATURE>0) CALL write_nature_n(ysc%DTCO, ysc%DUO%CSELECT, ysc%DUO%LSNOWDIMNC, &
165  ysc%U, ysc%IM, ysc%NDST, hprogram,hwrite,oland_use)
166 !
167 !
168 !* 6. Urban scheme
169 ! ------------
170 !
171 IF (ysc%U%NDIM_TOWN>0) CALL write_town_n(ysc%DTCO, ysc%DUO%CSELECT, ysc%DUO%LSNOWDIMNC, &
172  ysc%U, ysc%TM, ysc%GDM, ysc%GRM, hprogram,hwrite)
173 !
174 IF (lhook) CALL dr_hook('WRITE_SURF_ATM_N',1,zhook_handle)
175 !
176 !-------------------------------------------------------------------------------
177 !
178 END SUBROUTINE write_surf_atm_n
subroutine write_sea_n(DTCO, HSELECT, U, SM, HPROGRAM, HWRITE)
Definition: write_sean.F90:7
subroutine write_nature_n(DTCO, HSELECT, OSNOWDIMNC, U, IM, NDST,
subroutine writesurf_atm_conf_n(CHU, DGO, USS, HPROGRAM)
subroutine writesurf_cpl_gcm_n(HSELECT, U, HPROGRAM)
integer, parameter jprb
Definition: parkind1.F90:32
character(len=6) cprogname
subroutine write_town_n(DTCO, HSELECT, OSNOWDIMNC, U, TM, GDM, GR
Definition: write_townn.F90:7
subroutine end_io_surf_n(HPROGRAM)
Definition: end_io_surfn.F90:7
subroutine write_grid(HSELECT, HPROGRAM, HGRID, PGRID_PAR, PLAT, PLON,
Definition: write_grid.F90:7
subroutine write_surf_atm_n(YSC, HPROGRAM, HWRITE, OLAND_USE)
logical lhook
Definition: yomhook.F90:15
subroutine init_io_surf_n(DTCO, U, HPROGRAM, HMASK, HSCHEME, HACTION
subroutine write_inland_water_n(DTCO, HSELECT, U, WM, FM, HPROGRA
subroutine writesurf_sso_canopy_n(HSELECT, SB, HPROGRAM, OWRITE)