/[MITgcm]/MITgcm/pkg/atm_ocn_coupler/cpl_send_ocn_fields.F
ViewVC logotype

Contents of /MITgcm/pkg/atm_ocn_coupler/cpl_send_ocn_fields.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.7 - (show annotations) (download)
Wed Jan 6 00:32:11 2016 UTC (8 years, 4 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65s, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, HEAD
Changes since 1.6: +89 -21 lines
- add argument msgUnit and iter number to CPL_SEND/RECV_ATM/OCN_FIELDS
  routines (useful for debug).
- only export/import optionally exchanged fields (RunOff, seaice, Salt-Plume
   flux, DIC fields) if corresponding switch is ON.
- add option to export RunOff to OCN (to use for DIC river input)
- add 2-way thSIce vars exchange to allow to use seaice dynamics in OCN

1 C $Header: /u/gcmpack/MITgcm/pkg/atm_ocn_coupler/cpl_send_ocn_fields.F,v 1.6 2015/11/12 00:43:35 jmc Exp $
2 C $Name: $
3
4 #include "CPP_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: CPL_SEND_OCN_FIELDS
8 C !INTERFACE:
9 SUBROUTINE CPL_SEND_OCN_FIELDS( msgUnit, iter )
10
11 C !DESCRIPTION: \bv
12 C *==========================================================*
13 C | SUBROUTINE CPL_SEND_OCN_FIELDS
14 C | o Routine for sending surface flux to ocean component
15 C *==========================================================*
16 C | This version talks to the MITgcm general circulation
17 C | model.
18 C *==========================================================*
19 C \ev
20
21 C !USES:
22 IMPLICIT NONE
23
24 C == Global variables ==
25 #include "CPL_PARAMS.h"
26 #include "ATMSIZE.h"
27 #include "ATMVARS.h"
28 #include "OCNSIZE.h"
29 #include "OCNVARS.h"
30 #include "OCNIDS.h"
31
32 C !INPUT/OUTPUT PARAMETERS:
33 C msgUnit :: log-file I/O unit
34 C iter :: current iteration number
35 INTEGER msgUnit, iter
36
37 C !LOCAL VARIABLES:
38 _RL tmpFld(Nx_ocn,Ny_ocn)
39 CEOP
40
41 C-- Map Sea Level atmos. pressure onto ocean grid
42 CALL ATM_TO_OCN_MAPXYR8(
43 I Nx_atm, Ny_atm, atmSLPr_atm, Nx_ocn, Ny_ocn,
44 O atmSLPr_ocn )
45 C Send Sea Level atmos. pressure to ocean component
46 CALL COUPSEND_R8TILES( ocnCompName, ocnSLPrName,
47 I Nx_ocn, Ny_ocn, atmSLPr_ocn )
48
49 C-- Map heatflux onto ocean grid
50 CALL ATM_TO_OCN_MAPXYR8(
51 I Nx_atm, Ny_atm, HeatFlux_atm, Nx_ocn, Ny_ocn,
52 O HeatFlux_ocn )
53 IF ( cpl_exchange_RunOff.GE.2 ) THEN
54 C Map Energy flux carried by RunOff onto ocean grid and substract it
55 C from previous (direct) FWFlux => total Heat-Flux = Qnet - EnRunOff
56 CALL ATM_TO_OCN_MAPRUNOFF(
57 I ROEnFx_atm,
58 O tmpFld,
59 U HeatFlux_ocn )
60 ENDIF
61 C Send (net) heatflux. to ocean component
62 CALL COUPSEND_R8TILES( ocnCompName, ocnHeatFluxName,
63 I Nx_ocn, Ny_ocn, HeatFlux_ocn )
64
65 C-- Map net shortwave radiation onto ocean grid
66 CALL ATM_TO_OCN_MAPXYR8(
67 I Nx_atm, Ny_atm, qShortWave_atm, Nx_ocn, Ny_ocn,
68 O qShortWave_ocn )
69 C Send net shortwave radiation to ocean component
70 CALL COUPSEND_R8TILES( ocnCompName, ocnQshortWaveName,
71 I Nx_ocn, Ny_ocn, qShortWave_ocn )
72
73 C-- Map Zonal momentum flux onto ocean grid
74 CALL ATM_TO_OCN_MAPXYR8(
75 I Nx_atm, Ny_atm, TauX_atm, Nx_ocn, Ny_ocn,
76 O TauX_ocn )
77 C Send Zonal momentum flux to ocean component
78 CALL COUPSEND_R8TILES( ocnCompName, ocnTauXName,
79 I Nx_ocn, Ny_ocn, TauX_ocn )
80
81 C-- Map Meridional momentum flux onto ocean grid
82 CALL ATM_TO_OCN_MAPXYR8(
83 I Nx_atm, Ny_atm, TauY_atm, Nx_ocn, Ny_ocn,
84 O TauY_ocn )
85 C Send Meridional momentum flux to ocean component
86 CALL COUPSEND_R8TILES( ocnCompName, ocnTauYName,
87 I Nx_ocn, Ny_ocn, TauY_ocn )
88
89 C-- Map atmos. fresh water flux onto ocean grid : Evap - Precip
90 CALL ATM_TO_OCN_MAPXYR8(
91 I Nx_atm, Ny_atm, EvMPr_atm, Nx_ocn, Ny_ocn,
92 O FWFlux_ocn )
93 IF ( cpl_exchange_RunOff.GE.2 ) THEN
94 C Map atmos. runOff from land onto ocean grid and substract it
95 C from previous (direct) FWFlux => total FWFlux = E-P-R
96 CALL ATM_TO_OCN_MAPRUNOFF(
97 I RunOff_atm,
98 O RunOff_ocn,
99 U FWFlux_ocn )
100 ENDIF
101 C Send E-P-R to ocean component
102 CALL COUPSEND_R8TILES( ocnCompName, ocnFWFluxName,
103 I Nx_ocn, Ny_ocn, FWFlux_ocn )
104
105 IF ( MOD(cpl_exchange1W_sIce,2).EQ.1 ) THEN
106 C-- Map salt flux from sea-ice compon. onto ocean grid
107 CALL ATM_TO_OCN_MAPXYR8(
108 I Nx_atm, Ny_atm, SaltFlx_atm, Nx_ocn, Ny_ocn,
109 O SaltFlx_ocn )
110 C Send salt flux to ocean component
111 CALL COUPSEND_R8TILES( ocnCompName, ocnSaltFxName,
112 I Nx_ocn, Ny_ocn, SaltFlx_ocn )
113
114 C-- Map sea-ice mass onto ocean grid
115 CALL ATM_TO_OCN_MAPXYR8(
116 I Nx_atm, Ny_atm, sIceMass_atm, Nx_ocn, Ny_ocn,
117 O sIceMass_ocn )
118 C Send sea-ice mass to ocean component
119 CALL COUPSEND_R8TILES( ocnCompName, ocnSIceMassName,
120 I Nx_ocn, Ny_ocn, sIceMass_ocn )
121 ENDIF
122
123 IF ( MOD(cpl_exchange_SaltPl,2).EQ.1 ) THEN
124 C-- Map Salt-Plume flux onto ocean grid
125 CALL ATM_TO_OCN_MAPXYR8(
126 I Nx_atm, Ny_atm, saltPlmFlx_atm, Nx_ocn, Ny_ocn,
127 O saltPlmFlx_ocn )
128 C Send Salt-Plume flux to ocean component
129 CALL COUPSEND_R8TILES( ocnCompName, ocnSaltPlmFlxName,
130 I Nx_ocn, Ny_ocn, saltPlmFlx_ocn )
131 ENDIF
132
133 IF ( MOD(cpl_exchange_RunOff,2).EQ.1 ) THEN
134 C Send Run-Off flux to ocean component
135 CALL COUPSEND_R8TILES( ocnCompName, ocnRunOffName,
136 I Nx_ocn, Ny_ocn, RunOff_ocn )
137 ENDIF
138
139 IF ( MOD(cpl_exchange_DIC,2).EQ.1 ) THEN
140 C-- Map atmos CO2 onto ocean grid
141 CALL ATM_TO_OCN_MAPXYR8(
142 I Nx_atm, Ny_atm, aCO2_atm, Nx_ocn, Ny_ocn,
143 O aCO2_ocn )
144 C Send atmos CO2 to ocean component
145 CALL COUPSEND_R8TILES( ocnCompName, ocnAirCO2Name,
146 I Nx_ocn, Ny_ocn, aCO2_ocn )
147
148 C-- Map surface wind speed onto ocean grid
149 CALL ATM_TO_OCN_MAPXYR8(
150 I Nx_atm, Ny_atm, wSpeed_atm, Nx_ocn, Ny_ocn,
151 O wSpeed_ocn )
152 C Send surface windspeed to ocean component
153 CALL COUPSEND_R8TILES( ocnCompName, ocnWindSpdName,
154 I Nx_ocn, Ny_ocn, wSpeed_ocn )
155 ENDIF
156
157 IF ( ( MOD(cpl_exchange1W_sIce,2).EQ.1
158 & .AND.MOD(cpl_exchange_DIC,2).EQ.1 )
159 & .OR. MOD(cpl_exchange2W_sIce,2).EQ.1 ) THEN
160 C-- Map seaice fraction from atmos. compon. onto ocean grid
161 IF ( ( cpl_exchange1W_sIce.GE.2
162 & .AND.cpl_exchange_DIC.GE.2 )
163 & .OR. cpl_exchange2W_sIce.GE.2 ) THEN
164 CALL ATM_TO_OCN_MAPXYR8(
165 I Nx_atm, Ny_atm, SIceFrac_atm, Nx_ocn, Ny_ocn,
166 O SIceFrac_ocn )
167 ENDIF
168 C Send sea-ice fraction to ocean component
169 CALL COUPSEND_R8TILES( ocnCompName, ocnSIceFracName,
170 I Nx_ocn, Ny_ocn, SIceFrac_ocn )
171 ENDIF
172
173 IF ( cpl_exchange2W_sIce.EQ.3 ) THEN
174 C-- Map other pkg/thsice fields onto ocean grid:
175 C Map seaice thickness
176 CALL ATM_TO_OCN_MAPXYR8(
177 I Nx_atm, Ny_atm, sIceThick_atm, Nx_ocn, Ny_ocn,
178 O sIceThick_ocn )
179 C Map snow thickness
180 CALL ATM_TO_OCN_MAPXYR8(
181 I Nx_atm, Ny_atm, sIceSnowH_atm, Nx_ocn, Ny_ocn,
182 O sIceSnowH_ocn )
183 C Map seaice enthalpy (layer 1)
184 CALL ATM_TO_OCN_MAPXYR8(
185 I Nx_atm, Ny_atm, sIceQ1_atm, Nx_ocn, Ny_ocn,
186 O sIceQ1_ocn )
187 C Map seaice enthalpy (layer 2)
188 CALL ATM_TO_OCN_MAPXYR8(
189 I Nx_atm, Ny_atm, sIceQ2_atm, Nx_ocn, Ny_ocn,
190 O sIceQ2_ocn )
191 ENDIF
192 IF ( MOD(cpl_exchange2W_sIce,2).EQ.1 ) THEN
193 C-- Map other pkg/thsice fields to ocean component:
194 C Send seaice thickness
195 CALL COUPSEND_R8TILES( ocnCompName, ocnSIceThickName,
196 I Nx_ocn, Ny_ocn, sIceThick_ocn )
197 C Send snow thickness
198 CALL COUPSEND_R8TILES( ocnCompName, ocnSIceSnowName,
199 I Nx_ocn, Ny_ocn, sIceSnowH_ocn )
200 C Send seaice enthalpy (layer 1)
201 CALL COUPSEND_R8TILES( ocnCompName, ocnSIceQ1Name,
202 I Nx_ocn, Ny_ocn, sIceQ1_ocn )
203 C Send seaice enthalpy (layer 2)
204 CALL COUPSEND_R8TILES( ocnCompName, ocnSIceQ2Name,
205 I Nx_ocn, Ny_ocn, sIceQ2_ocn )
206 ENDIF
207
208 RETURN
209 END

  ViewVC Help
Powered by ViewVC 1.1.22