SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
write_diag_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_diag_surf_atm_n (YSC, &
7  hprogram,hwrite)
8 ! #################################################################################
9 !
10 !!**** *WRITE_DIAG_SURF_ATM_n * - Chooses the surface schemes for diagnostics writing
11 !!
12 !! PURPOSE
13 !! -------
14 !
15 !!** METHOD
16 !! ------
17 !!
18 !! REFERENCE
19 !! ---------
20 !!
21 !!
22 !! AUTHOR
23 !! ------
24 !! V. Masson
25 !!
26 !! MODIFICATIONS
27 !! -------------
28 !! Original 01/2004
29 !!------------------------------------------------------------------
30 !
31 !
32 USE modd_surfex_n, ONLY : surfex_t
33 !
34 USE modd_surf_conf, ONLY : cprogname
35 !
36 !
37 USE modd_surf_par, ONLY : xundef
38 !
39 USE modi_init_io_surf_n
41 USE modi_end_io_surf_n
42 !
43 USE modi_write_diag_nature_n
44 USE modi_write_diag_sea_n
45 USE modi_write_diag_inland_water_n
46 USE modi_write_diag_town_n
47 !
48 USE modi_write_diag_seb_surf_atm_n
49 !
50 USE modi_write_diag_ch_aggr_n
51 USE modi_write_diag_ch_snap_n
52 !
53 USE yomhook ,ONLY : lhook, dr_hook
54 USE parkind1 ,ONLY : jprb
55 !
56 IMPLICIT NONE
57 !
58 !* 0.1 declarations of arguments
59 !
60 TYPE(surfex_t), INTENT(INOUT) :: ysc
61 !
62  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! program calling surf. schemes
63  CHARACTER(LEN=3), INTENT(IN) :: hwrite ! 'PGD' : only physiographic fields are written
64 ! ! 'ALL' : all fields are written
65 !
66 !
67 !* 0.2 declarations of local variables
68 !
69  CHARACTER(LEN=100) :: ycomment
70 INTEGER :: iresp
71 REAL(KIND=JPRB) :: zhook_handle
72 !-------------------------------------------------------------------------------------
73 !
74 IF (lhook) CALL dr_hook('WRITE_DIAG_SURF_ATM_N',0,zhook_handle)
75  cprogname = hprogram
76 !
77 IF (ysc%U%NDIM_SEA >0) CALL write_diag_sea_n(ysc%DTCO, ysc%DGU, ysc%U, ysc%SM, &
78  hprogram,hwrite)
79 IF (ysc%U%NDIM_WATER >0) CALL write_diag_inland_water_n(ysc%DTCO, ysc%DGU, ysc%U, &
80  ysc%WM, ysc%FM, &
81  hprogram,hwrite)
82 IF (ysc%U%NDIM_NATURE >0) CALL write_diag_nature_n(ysc%DTCO, ysc%DGU, ysc%U, ysc%IM, ysc%DST, &
83  hprogram,hwrite)
84 IF (ysc%U%NDIM_TOWN >0) CALL write_diag_town_n(ysc%DTCO, ysc%DGU, ysc%U, ysc%TM, ysc%GDM, ysc%GRM, &
85  hprogram,hwrite)
86 !
87 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
88 ! Writing
89 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
90 !
91 !
92 IF (ysc%DGU%XDIAG_TSTEP==xundef .OR. &
93  abs(nint(ysc%U%TTIME%TIME/ysc%DGU%XDIAG_TSTEP)*ysc%DGU%XDIAG_TSTEP-ysc%U%TTIME%TIME)<1.e-3 ) THEN
94  !
95  IF (ysc%DGU%LFRAC) THEN
96  CALL init_io_surf_n(ysc%DTCO, ysc%DGU, ysc%U, &
97  hprogram,'FULL ','SURF ','WRITE')
98  ycomment = '(-)'
99  CALL write_surf(ysc%DGU, ysc%U, &
100  hprogram,'FRAC_SEA ',ysc%U%XSEA, iresp,hcomment=ycomment)
101  CALL write_surf(ysc%DGU, ysc%U, &
102  hprogram,'FRAC_NATURE',ysc%U%XNATURE,iresp,hcomment=ycomment)
103  CALL write_surf(ysc%DGU, ysc%U, &
104  hprogram,'FRAC_WATER ',ysc%U%XWATER, iresp,hcomment=ycomment)
105  CALL write_surf(ysc%DGU, ysc%U, &
106  hprogram,'FRAC_TOWN ',ysc%U%XTOWN, iresp,hcomment=ycomment)
107  CALL end_io_surf_n(hprogram)
108  END IF
109  !
110  IF (hwrite/='PGD'.AND.ysc%DGU%LDIAG_GRID) &
111  CALL write_diag_seb_surf_atm_n(ysc%DTCO, ysc%DGU, ysc%U, ysc%UG, &
112  hprogram)
113  !
114  IF (ysc%CHU%LCH_EMIS .AND. ysc%SV%NBEQ>0 .AND. ysc%CHU%LCH_SURF_EMIS) THEN
115  IF (ysc%CHU%CCH_EMIS=='AGGR') THEN
116  CALL write_diag_ch_aggr_n(ysc%DTCO, ysc%DGU, ysc%U, ysc%CHE, &
117  hprogram)
118  ELSE IF (ysc%CHU%CCH_EMIS=='SNAP') THEN
119  CALL write_diag_ch_snap_n(ysc%DTCO, ysc%DGU, ysc%U, ysc%CHN, &
120  hprogram)
121  END IF
122  END IF
123  !
124 END IF
125 IF (lhook) CALL dr_hook('WRITE_DIAG_SURF_ATM_N',1,zhook_handle)
126 !
127 !--------------------------------------------------------------------------------------
128 !
129 END SUBROUTINE write_diag_surf_atm_n
subroutine init_io_surf_n(DTCO, DGU, U, HPROGRAM, HMASK, HSCHEME, HACTION)
subroutine write_diag_ch_snap_n(DTCO, DGU, U, CHN, HPROGRAM)
subroutine write_diag_nature_n(DTCO, DGU, U, IM, DST, HPROGRAM, HWRITE)
subroutine write_diag_seb_surf_atm_n(DTCO, DGU, U, UG, HPROGRAM)
subroutine write_diag_surf_atm_n(YSC, HPROGRAM, HWRITE)
subroutine write_diag_sea_n(DTCO, DGU, U, SM, HPROGRAM, HWRITE)
subroutine end_io_surf_n(HPROGRAM)
Definition: end_io_surfn.F90:6
subroutine write_diag_inland_water_n(DTCO, DGU, U, WM, FM, HPROGRAM, HWRITE)
subroutine write_diag_town_n(DTCO, DGU, U, TM, GDM, GRM, HPROGRAM, HWRITE)
subroutine write_diag_ch_aggr_n(DTCO, DGU, U, CHE, HPROGRAM)