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