Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
MODULE sbccpl
!!======================================================================
!! *** MODULE sbccpl ***
!! Surface Boundary Condition : momentum, heat and freshwater fluxes in coupled mode
!!======================================================================
!! History : 2.0 ! 2007-06 (R. Redler, N. Keenlyside, W. Park) Original code split into flxmod & taumod
!! 3.0 ! 2008-02 (G. Madec, C Talandier) surface module
!! 3.1 ! 2009_02 (G. Madec, S. Masson, E. Maisonave, A. Caubel) generic coupled interface
!! 3.4 ! 2011_11 (C. Harris) more flexibility + multi-category fields
!! 4.2 ! 2020-12 (G. Madec, E. Clementi) wave coupling updates
!!----------------------------------------------------------------------
!!----------------------------------------------------------------------
!! namsbc_cpl : coupled formulation namlist
!! sbc_cpl_init : initialisation of the coupled exchanges
!! sbc_cpl_rcv : receive fields from the atmosphere over the ocean (ocean only)
!! receive stress from the atmosphere over the ocean (ocean-ice case)
!! sbc_cpl_ice_tau : receive stress from the atmosphere over ice
!! sbc_cpl_ice_flx : receive fluxes from the atmosphere over ice
!! sbc_cpl_snd : send fields to the atmosphere
!!----------------------------------------------------------------------
USE dom_oce ! ocean space and time domain
USE sbc_oce ! Surface boundary condition: ocean fields
USE trc_oce ! share SMS/Ocean variables
USE sbc_ice ! Surface boundary condition: ice fields
USE sbcapr ! Stochastic param. : ???
USE sbcdcy ! surface boundary condition: diurnal cycle
USE sbcwave ! surface boundary condition: waves
USE phycst ! physical constants
USE isf_oce , ONLY : l_isfoasis, fwfisf_oasis ! ice shelf boundary condition
#if defined key_si3
USE ice ! ice variables
#endif
USE cpl_oasis3 ! OASIS3 coupling
USE geo2ocean !
USE oce , ONLY : ts, uu, vv, ssh, fraqsr_1lev
USE ocealb !
USE eosbn2 !
USE sbcrnf , ONLY : l_rnfcpl
#if defined key_cice
USE ice_domain_size, only: ncat
#endif
#if defined key_si3
USE icevar ! for CALL ice_var_snwblow
#endif
!
USE in_out_manager ! I/O manager
USE iom ! NetCDF library
USE lib_mpp ! distribued memory computing library
USE lbclnk ! ocean lateral boundary conditions (or mpp link)
#if defined key_oasis3
USE mod_oasis, ONLY : OASIS_Sent, OASIS_ToRest, OASIS_SentOut, OASIS_ToRestOut
#endif

Guillaume Samson
committed
USE sbc_phy, ONLY : pp_cldf, rpref
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
IMPLICIT NONE
PRIVATE
PUBLIC sbc_cpl_init ! routine called by sbcmod.F90
PUBLIC sbc_cpl_rcv ! routine called by icestp.F90
PUBLIC sbc_cpl_snd ! routine called by step.F90
PUBLIC sbc_cpl_ice_tau ! routine called by icestp.F90
PUBLIC sbc_cpl_ice_flx ! routine called by icestp.F90
PUBLIC sbc_cpl_alloc ! routine called in sbcice_cice.F90
INTEGER, PARAMETER :: jpr_otx1 = 1 ! 3 atmosphere-ocean stress components on grid 1
INTEGER, PARAMETER :: jpr_oty1 = 2 !
INTEGER, PARAMETER :: jpr_otz1 = 3 !
INTEGER, PARAMETER :: jpr_otx2 = 4 ! 3 atmosphere-ocean stress components on grid 2
INTEGER, PARAMETER :: jpr_oty2 = 5 !
INTEGER, PARAMETER :: jpr_otz2 = 6 !
INTEGER, PARAMETER :: jpr_itx1 = 7 ! 3 atmosphere-ice stress components on grid 1
INTEGER, PARAMETER :: jpr_ity1 = 8 !
INTEGER, PARAMETER :: jpr_itz1 = 9 !
INTEGER, PARAMETER :: jpr_itx2 = 10 ! 3 atmosphere-ice stress components on grid 2
INTEGER, PARAMETER :: jpr_ity2 = 11 !
INTEGER, PARAMETER :: jpr_itz2 = 12 !
INTEGER, PARAMETER :: jpr_qsroce = 13 ! Qsr above the ocean
INTEGER, PARAMETER :: jpr_qsrice = 14 ! Qsr above the ice
INTEGER, PARAMETER :: jpr_qsrmix = 15
INTEGER, PARAMETER :: jpr_qnsoce = 16 ! Qns above the ocean
INTEGER, PARAMETER :: jpr_qnsice = 17 ! Qns above the ice
INTEGER, PARAMETER :: jpr_qnsmix = 18
INTEGER, PARAMETER :: jpr_rain = 19 ! total liquid precipitation (rain)
INTEGER, PARAMETER :: jpr_snow = 20 ! solid precipitation over the ocean (snow)
INTEGER, PARAMETER :: jpr_tevp = 21 ! total evaporation
INTEGER, PARAMETER :: jpr_ievp = 22 ! solid evaporation (sublimation)
INTEGER, PARAMETER :: jpr_sbpr = 23 ! sublimation - liquid precipitation - solid precipitation
INTEGER, PARAMETER :: jpr_semp = 24 ! solid freshwater budget (sublimation - snow)
INTEGER, PARAMETER :: jpr_oemp = 25 ! ocean freshwater budget (evap - precip)
INTEGER, PARAMETER :: jpr_w10m = 26 ! 10m wind
INTEGER, PARAMETER :: jpr_dqnsdt = 27 ! d(Q non solar)/d(temperature)
INTEGER, PARAMETER :: jpr_rnf = 28 ! runoffs
INTEGER, PARAMETER :: jpr_cal = 29 ! calving
INTEGER, PARAMETER :: jpr_taum = 30 ! wind stress module
INTEGER, PARAMETER :: jpr_co2 = 31
INTEGER, PARAMETER :: jpr_topm = 32 ! topmeltn
INTEGER, PARAMETER :: jpr_botm = 33 ! botmeltn
INTEGER, PARAMETER :: jpr_sflx = 34 ! salt flux
INTEGER, PARAMETER :: jpr_toce = 35 ! ocean temperature
INTEGER, PARAMETER :: jpr_soce = 36 ! ocean salinity
INTEGER, PARAMETER :: jpr_ocx1 = 37 ! ocean current on grid 1
INTEGER, PARAMETER :: jpr_ocy1 = 38 !
INTEGER, PARAMETER :: jpr_ssh = 39 ! sea surface height
INTEGER, PARAMETER :: jpr_fice = 40 ! ice fraction
INTEGER, PARAMETER :: jpr_e3t1st = 41 ! first T level thickness
INTEGER, PARAMETER :: jpr_fraqsr = 42 ! fraction of solar net radiation absorbed in the first ocean level
INTEGER, PARAMETER :: jpr_mslp = 43 ! mean sea level pressure
!** surface wave coupling **
INTEGER, PARAMETER :: jpr_hsig = 44 ! Hsig
INTEGER, PARAMETER :: jpr_phioc = 45 ! Wave=>ocean energy flux
INTEGER, PARAMETER :: jpr_sdrftx = 46 ! Stokes drift on grid 1
INTEGER, PARAMETER :: jpr_sdrfty = 47 ! Stokes drift on grid 2
INTEGER, PARAMETER :: jpr_wper = 48 ! Mean wave period
INTEGER, PARAMETER :: jpr_wnum = 49 ! Mean wavenumber
INTEGER, PARAMETER :: jpr_wstrf = 50 ! Stress fraction adsorbed by waves
INTEGER, PARAMETER :: jpr_wdrag = 51 ! Neutral surface drag coefficient
INTEGER, PARAMETER :: jpr_charn = 52 ! Chranock coefficient
INTEGER, PARAMETER :: jpr_twox = 53 ! wave to ocean momentum flux
INTEGER, PARAMETER :: jpr_twoy = 54 ! wave to ocean momentum flux
INTEGER, PARAMETER :: jpr_tawx = 55 ! net wave-supported stress
INTEGER, PARAMETER :: jpr_tawy = 56 ! net wave-supported stress
INTEGER, PARAMETER :: jpr_bhd = 57 ! Bernoulli head. waves' induced surface pressure
INTEGER, PARAMETER :: jpr_tusd = 58 ! zonal stokes transport
INTEGER, PARAMETER :: jpr_tvsd = 59 ! meridional stokes tranmport
INTEGER, PARAMETER :: jpr_isf = 60
INTEGER, PARAMETER :: jpr_icb = 61
INTEGER, PARAMETER :: jpr_ts_ice = 62 ! Sea ice surface temp
!!INTEGER, PARAMETER :: jpr_qtrice = 63 ! Transmitted solar thru sea-ice
INTEGER, PARAMETER :: jprcv = 62 ! total number of fields received
INTEGER, PARAMETER :: jps_fice = 1 ! ice fraction sent to the atmosphere
INTEGER, PARAMETER :: jps_toce = 2 ! ocean temperature
INTEGER, PARAMETER :: jps_tice = 3 ! ice temperature
INTEGER, PARAMETER :: jps_tmix = 4 ! mixed temperature (ocean+ice)
INTEGER, PARAMETER :: jps_albice = 5 ! ice albedo
INTEGER, PARAMETER :: jps_albmix = 6 ! mixed albedo
INTEGER, PARAMETER :: jps_hice = 7 ! ice thickness
INTEGER, PARAMETER :: jps_hsnw = 8 ! snow thickness
INTEGER, PARAMETER :: jps_ocx1 = 9 ! ocean current on grid 1
INTEGER, PARAMETER :: jps_ocy1 = 10 !
INTEGER, PARAMETER :: jps_ocz1 = 11 !
INTEGER, PARAMETER :: jps_ivx1 = 12 ! ice current on grid 1
INTEGER, PARAMETER :: jps_ivy1 = 13 !
INTEGER, PARAMETER :: jps_ivz1 = 14 !
INTEGER, PARAMETER :: jps_co2 = 15
INTEGER, PARAMETER :: jps_soce = 16 ! ocean salinity
INTEGER, PARAMETER :: jps_ssh = 17 ! sea surface height
INTEGER, PARAMETER :: jps_qsroce = 18 ! Qsr above the ocean
INTEGER, PARAMETER :: jps_qnsoce = 19 ! Qns above the ocean
INTEGER, PARAMETER :: jps_oemp = 20 ! ocean freshwater budget (evap - precip)
INTEGER, PARAMETER :: jps_sflx = 21 ! salt flux
INTEGER, PARAMETER :: jps_otx1 = 22 ! 2 atmosphere-ocean stress components on grid 1
INTEGER, PARAMETER :: jps_oty1 = 23 !
INTEGER, PARAMETER :: jps_rnf = 24 ! runoffs
INTEGER, PARAMETER :: jps_taum = 25 ! wind stress module
INTEGER, PARAMETER :: jps_fice2 = 26 ! ice fraction sent to OCE (by SAS when doing SAS-OCE coupling)
INTEGER, PARAMETER :: jps_e3t1st = 27 ! first level depth (vvl)
INTEGER, PARAMETER :: jps_fraqsr = 28 ! fraction of solar net radiation absorbed in the first ocean level
INTEGER, PARAMETER :: jps_ficet = 29 ! total ice fraction
INTEGER, PARAMETER :: jps_ocxw = 30 ! currents on grid 1
INTEGER, PARAMETER :: jps_ocyw = 31 ! currents on grid 2
INTEGER, PARAMETER :: jps_wlev = 32 ! water level
INTEGER, PARAMETER :: jps_fice1 = 33 ! first-order ice concentration (for semi-implicit coupling of atmos-ice fluxes)
INTEGER, PARAMETER :: jps_a_p = 34 ! meltpond area fraction
INTEGER, PARAMETER :: jps_ht_p = 35 ! meltpond thickness
INTEGER, PARAMETER :: jps_kice = 36 ! sea ice effective conductivity
INTEGER, PARAMETER :: jps_sstfrz = 37 ! sea surface freezing temperature
INTEGER, PARAMETER :: jps_ttilyr = 38 ! sea ice top layer temp
INTEGER, PARAMETER :: jpsnd = 38 ! total number of fields sent
#if ! defined key_oasis3
! Dummy variables to enable compilation when oasis3 is not being used
INTEGER :: OASIS_Sent = -1
INTEGER :: OASIS_SentOut = -1
INTEGER :: OASIS_ToRest = -1
INTEGER :: OASIS_ToRestOut = -1
#endif
! !!** namelist namsbc_cpl **
TYPE :: FLD_C !
CHARACTER(len = 32) :: cldes ! desciption of the coupling strategy
CHARACTER(len = 32) :: clcat ! multiple ice categories strategy
CHARACTER(len = 32) :: clvref ! reference of vector ('spherical' or 'cartesian')
CHARACTER(len = 32) :: clvor ! orientation of vector fields ('eastward-northward' or 'local grid')
CHARACTER(len = 32) :: clvgrd ! grids on which is located the vector fields
END TYPE FLD_C
! ! Send to the atmosphere
TYPE(FLD_C) :: sn_snd_temp , sn_snd_alb , sn_snd_thick, sn_snd_crt , sn_snd_co2, &
& sn_snd_thick1, sn_snd_cond, sn_snd_mpnd , sn_snd_sstfrz, sn_snd_ttilyr
! ! Received from the atmosphere
TYPE(FLD_C) :: sn_rcv_w10m, sn_rcv_taumod, sn_rcv_tau, sn_rcv_dqnsdt, sn_rcv_qsr, &
& sn_rcv_qns , sn_rcv_emp , sn_rcv_rnf, sn_rcv_ts_ice
TYPE(FLD_C) :: sn_rcv_cal, sn_rcv_iceflx, sn_rcv_co2, sn_rcv_mslp, sn_rcv_icb, sn_rcv_isf
! ! Send to waves
TYPE(FLD_C) :: sn_snd_ifrac, sn_snd_crtw, sn_snd_wlev
Loading
Loading full blame...