File indexing completed on 2022-07-07 05:09:16 UTC
view on githubraw file Latest commit 94a8024b on 2022-07-06 19:35:20 UTC
8f7d13d0c9 Jean*0001 #include "ECCO_OPTIONS.h"
27f56e97bb Gael*0002 #ifdef ALLOW_SEAICE
0003 # include "SEAICE_OPTIONS.h"
0004 #endif
9aeddbf372 Gael*0005 #ifdef ALLOW_EXF
0006 # include "EXF_OPTIONS.h"
0007 #endif
0008 #ifdef ALLOW_CTRL
0009 # include "CTRL_OPTIONS.h"
0010 #endif
37a2578dc5 Gael*0011 #ifdef ALLOW_GMREDI
0012 # include "GMREDI_OPTIONS.h"
0013 #endif
8c157ed454 Patr*0014
0015 subroutine cost_gencost_customize( mythid )
8f7d13d0c9 Jean*0016
8c157ed454 Patr*0017
e7d9258ace Gael*0018
8c157ed454 Patr*0019
0020
0021 implicit none
0022
0023
0024
0025 #include "EEPARAMS.h"
0026 #include "SIZE.h"
27f56e97bb Gael*0027 #include "GRID.h"
8c157ed454 Patr*0028 #include "PARAMS.h"
0029 #include "DYNVARS.h"
0030 #include "FFIELDS.h"
f09238ab8f Gael*0031 #ifdef ALLOW_ECCO
13d362b8c1 Ou W*0032 # include "ECCO_SIZE.h"
0033 # include "ECCO.h"
f09238ab8f Gael*0034 #endif
27f56e97bb Gael*0035 #ifdef ALLOW_SEAICE
0036 # include "SEAICE_SIZE.h"
0037 # include "SEAICE.h"
0038 #endif
f09238ab8f Gael*0039 #ifdef ALLOW_EXF
0040 # include "EXF_FIELDS.h"
0041 #endif
9aeddbf372 Gael*0042 #ifdef ALLOW_CTRL
0043 # include "CTRL_FIELDS.h"
0044 #endif
94a8024bbe Jean*0045 #ifdef ALLOW_GMREDI
0046 # include "GMREDI.h"
0047 #endif
81e05fa829 Gael*0048 #ifdef ALLOW_PTRACERS
0049 # include "PTRACERS_SIZE.h"
0050 # include "PTRACERS_FIELDS.h"
0051 #endif
8c157ed454 Patr*0052
0053
0054
0055 integer mythid
0056
0057 #ifdef ALLOW_GENCOST_CONTRIBUTION
0058
0059
0060 integer bi,bj
27f56e97bb Gael*0061 integer i,j,k
5cce2b5d76 Gael*0062 #ifdef ALLOW_GENCOST3D
0063 integer k2,kk
81e05fa829 Gael*0064 integer itr
5cce2b5d76 Gael*0065 #endif
13d362b8c1 Ou W*0066 integer kLev
5efdcaef73 Gael*0067 #ifdef ALLOW_EXF
0068 _RL uBarC, vBarC
9aeddbf372 Gael*0069 _RL zontau (1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
0070 _RL mertau (1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
0071 _RL zonwind (1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
0072 _RL merwind (1-olx:snx+olx,1-oly:sny+oly,nsx,nsy)
5efdcaef73 Gael*0073 #endif
8c157ed454 Patr*0074 integer itlo,ithi
0075 integer jtlo,jthi
0076 integer jmin,jmax
0077 integer imin,imax
0078
0079
0080
69f8f4c84c Patr*0081 jtlo = mybylo(mythid)
0082 jthi = mybyhi(mythid)
0083 itlo = mybxlo(mythid)
0084 ithi = mybxhi(mythid)
0085 jmin = 1
0086 jmax = sny
0087 imin = 1
0088 imax = snx
0089
5efdcaef73 Gael*0090 #ifdef ALLOW_EXF
0091
0092 do bj = jtlo,jthi
0093 do bi = itlo,ithi
0094 do j = jmin,jmax
0095 do i = imin,imax
0096 uBarC = 0.5 _d 0
0097 & *(ustress(i,j,bi,bj)+ustress(i+1,j,bi,bj))
0098 vBarC = 0.5 _d 0
0099 & *(vstress(i,j,bi,bj)+vstress(i,j+1,bi,bj))
9aeddbf372 Gael*0100 zontau(i,j,bi,bj) = angleCosC(i,j,bi,bj)*uBarC
5efdcaef73 Gael*0101 & -angleSinC(i,j,bi,bj)*vBarC
9aeddbf372 Gael*0102 mertau(i,j,bi,bj) = angleSinC(i,j,bi,bj)*uBarC
5efdcaef73 Gael*0103 & +angleCosC(i,j,bi,bj)*vBarC
0104 enddo
0105 enddo
0106 enddo
0107 enddo
0108
9aeddbf372 Gael*0109
0110
0111
5efdcaef73 Gael*0112
9aeddbf372 Gael*0113 CALL ROTATE_UV2EN_RL(uwind,vwind,zonwind,merwind,
0114 & .TRUE.,.FALSE.,.TRUE.,1,myThid)
0115 #endif
5efdcaef73 Gael*0116
f09238ab8f Gael*0117 do k=1,NGENCOST
81e05fa829 Gael*0118 itr=gencost_itracer(k)
13d362b8c1 Ou W*0119 kLev = MAX( 1, MIN( Nr, gencost_kLev_select(k) ) )
8c157ed454 Patr*0120 do bj = jtlo,jthi
0121 do bi = itlo,ithi
0122 do j = jmin,jmax
0123 do i = imin,imax
f09238ab8f Gael*0124
13d362b8c1 Ou W*0125 if (gencost_barfile(k)(1:5).EQ.'m_eta' .and.
0126 & gencost_barfile(k)(1:9).NE.'m_eta_dyn') then
0127 gencost_modfld(i,j,bi,bj,k) =
556841ad42 Gael*0128 & m_eta(i,j,bi,bj)*maskC(i,j,1,bi,bj)
bdae1843b8 Gael*0129 elseif (gencost_barfile(k)(1:9).EQ.'m_boxmean') then
13d362b8c1 Ou W*0130 gencost_modfld(i,j,bi,bj,k) =
bdae1843b8 Gael*0131 & gencost_storefld(i,j,bi,bj,k)
447bdc4b79 Gael*0132 elseif (gencost_barfile(k)(1:9).EQ.'m_horflux') then
13d362b8c1 Ou W*0133 gencost_modfld(i,j,bi,bj,k) =
447bdc4b79 Gael*0134 & gencost_storefld(i,j,bi,bj,k)
985662a3b3 Gael*0135 elseif (gencost_barfile(k)(1:5).EQ.'m_sst') then
13d362b8c1 Ou W*0136 gencost_modfld(i,j,bi,bj,k) =
f09238ab8f Gael*0137 & THETA(i,j,1,bi,bj)*maskC(i,j,1,bi,bj)
985662a3b3 Gael*0138 elseif (gencost_barfile(k)(1:5).EQ.'m_sss') then
13d362b8c1 Ou W*0139 gencost_modfld(i,j,bi,bj,k) =
f09238ab8f Gael*0140 & SALT(i,j,1,bi,bj)*maskC(i,j,1,bi,bj)
13d362b8c1 Ou W*0141 elseif (gencost_barfile(k)(1:11).EQ.'m_drifterUE') then
0142 gencost_modfld(i,j,bi,bj,k) =
0143 & m_UE(i,j,kLev,bi,bj)*maskC(i,j,kLev,bi,bj)
0144 elseif (gencost_barfile(k)(1:11).EQ.'m_drifterVN') then
0145 gencost_modfld(i,j,bi,bj,k) =
0146 & m_VN(i,j,kLev,bi,bj)*maskC(i,j,kLev,bi,bj)
0147 elseif (gencost_barfile(k)(1:4).EQ.'m_bp' .and.
0148 & gencost_barfile(k)(1:12).NE.'m_bp_nopabar') then
0149 gencost_modfld(i,j,bi,bj,k) =
0150 & m_bp(i,j,bi,bj)*maskC(i,j,1,bi,bj)
0151 #ifdef ATMOSPHERIC_LOADING
0152 #ifdef ALLOW_IB_CORR
0153 elseif (gencost_barfile(k)(1:9).EQ.'m_eta_dyn') then
0154 gencost_modfld(i,j,bi,bj,k) =
0155 & m_eta_dyn(i,j,bi,bj)*maskC(i,j,1,bi,bj)
0156 elseif (gencost_barfile(k)(1:12).EQ.'m_bp_nopabar') then
0157 gencost_modfld(i,j,bi,bj,k) =
0158 & m_bp_nopabar(i,j,bi,bj)*maskC(i,j,1,bi,bj)
0159 #endif
6b2230d510 Ou W*0160 #endif
9aeddbf372 Gael*0161 #ifdef ALLOW_GEOTHERMAL_FLUX
0162 elseif (gencost_barfile(k)(1:16).EQ.'m_geothermalflux') then
0163 gencost_modfld(i,j,bi,bj,k) =
0164 & geothermalFlux(i,j,bi,bj)*maskC(i,j,1,bi,bj)
0165 #endif
0166 #ifdef ALLOW_EXF
0167 elseif (gencost_barfile(k)(1:9).EQ.'m_ustress') then
13d362b8c1 Ou W*0168 gencost_modfld(i,j,bi,bj,k) =
9aeddbf372 Gael*0169 & zontau(i,j,bi,bj)*maskC(i,j,1,bi,bj)
0170 elseif (gencost_barfile(k)(1:9).EQ.'m_vstress') then
13d362b8c1 Ou W*0171 gencost_modfld(i,j,bi,bj,k) =
9aeddbf372 Gael*0172 & mertau(i,j,bi,bj)*maskC(i,j,1,bi,bj)
c2222c60b2 An T*0173 elseif (gencost_barfile(k)(1:7).EQ.'m_uwind') then
9aeddbf372 Gael*0174 gencost_modfld(i,j,bi,bj,k) =
0175 & zonwind(i,j,bi,bj)*maskC(i,j,1,bi,bj)
c2222c60b2 An T*0176 elseif (gencost_barfile(k)(1:7).EQ.'m_vwind') then
9aeddbf372 Gael*0177 gencost_modfld(i,j,bi,bj,k) =
0178 & merwind(i,j,bi,bj)*maskC(i,j,1,bi,bj)
b939965590 Gael*0179 #ifdef ALLOW_ATM_TEMP
9aeddbf372 Gael*0180 elseif (gencost_barfile(k)(1:7).EQ.'m_atemp') then
0181 gencost_modfld(i,j,bi,bj,k) =
0182 & atemp(i,j,bi,bj)*maskC(i,j,1,bi,bj)
0183 elseif (gencost_barfile(k)(1:5).EQ.'m_aqh') then
0184 gencost_modfld(i,j,bi,bj,k) =
0185 & aqh(i,j,bi,bj)*maskC(i,j,1,bi,bj)
0186 elseif (gencost_barfile(k)(1:8).EQ.'m_precip') then
0187 gencost_modfld(i,j,bi,bj,k) =
0188 & precip(i,j,bi,bj)*maskC(i,j,1,bi,bj)
b939965590 Gael*0189 #endif
0190 #ifdef ALLOW_DOWNWARD_RADIATION
9aeddbf372 Gael*0191 elseif (gencost_barfile(k)(1:8).EQ.'m_swdown') then
0192 gencost_modfld(i,j,bi,bj,k) =
0193 & swdown(i,j,bi,bj)*maskC(i,j,1,bi,bj)
0194 elseif (gencost_barfile(k)(1:8).EQ.'m_lwdown') then
0195 gencost_modfld(i,j,bi,bj,k) =
0196 & lwdown(i,j,bi,bj)*maskC(i,j,1,bi,bj)
b939965590 Gael*0197 #endif
9aeddbf372 Gael*0198 elseif (gencost_barfile(k)(1:8).EQ.'m_wspeed') then
0199 gencost_modfld(i,j,bi,bj,k) =
0200 & wspeed(i,j,bi,bj)*maskC(i,j,1,bi,bj)
94a8024bbe Jean*0201 #endif /* ALLOW_EXF */
9aeddbf372 Gael*0202 #ifdef ALLOW_CTRL
0203 #ifdef ALLOW_BOTTOMDRAG_CONTROL
c2222c60b2 An T*0204 elseif (gencost_barfile(k)(1:12).EQ.'m_bottomdrag') then
9aeddbf372 Gael*0205 gencost_modfld(i,j,bi,bj,k) =
0206 & bottomDragFld(i,j,bi,bj)*maskC(i,j,1,bi,bj)
0207 #endif
0208 #endif
f09238ab8f Gael*0209 #ifdef ALLOW_SEAICE
9aeddbf372 Gael*0210 elseif ( (gencost_name(k).EQ.'siv4-conc').OR.
f172f192aa Gael*0211 & (gencost_barfile(k)(1:8).EQ.'m_siarea') ) then
13d362b8c1 Ou W*0212 gencost_modfld(i,j,bi,bj,k) =
0213 & area(i,j,bi,bj)*maskC(i,j,1,bi,bj)
f09238ab8f Gael*0214 elseif (gencost_name(k).EQ.'siv4-deconc') then
13d362b8c1 Ou W*0215 gencost_modfld(i,j,bi,bj,k) =
f09238ab8f Gael*0216 & theta(i,j,1,bi,bj)*maskC(i,j,1,bi,bj)
9aeddbf372 Gael*0217 elseif ( (gencost_name(k).EQ.'siv4-exconc').OR.
13d362b8c1 Ou W*0218 & (gencost_barfile(k)(1:8).EQ.'m_siheff') ) then
0219 gencost_modfld(i,j,bi,bj,k) =
f09238ab8f Gael*0220 & heff(i,j,bi,bj)*maskC(i,j,1,bi,bj)
f172f192aa Gael*0221 elseif (gencost_barfile(k)(1:9).EQ.'m_sihsnow') then
9aeddbf372 Gael*0222 gencost_modfld(i,j,bi,bj,k) =
0223 & hsnow(i,j,bi,bj)*maskC(i,j,1,bi,bj)
f09238ab8f Gael*0224 #endif
5cce2b5d76 Gael*0225 #ifdef ALLOW_GENCOST3D
985662a3b3 Gael*0226 elseif (gencost_barfile(k)(1:7).EQ.'m_theta') then
5cce2b5d76 Gael*0227 kk=gencost_pointer3d(k)
0228 do k2=1,nr
0229 gencost_mod3d(i,j,k2,bi,bj,kk) =
0230 & theta(i,j,k2,bi,bj)*maskC(i,j,k2,bi,bj)
0231 enddo
985662a3b3 Gael*0232 elseif (gencost_barfile(k)(1:6).EQ.'m_salt') then
5cce2b5d76 Gael*0233 kk=gencost_pointer3d(k)
0234 do k2=1,nr
0235 gencost_mod3d(i,j,k2,bi,bj,kk) =
0236 & salt(i,j,k2,bi,bj)*maskC(i,j,k2,bi,bj)
0237 enddo
81e05fa829 Gael*0238 #ifdef ALLOW_PTRACERS
0239 elseif (gencost_barfile(k)(1:9).EQ.'m_ptracer') then
0240 kk=gencost_pointer3d(k)
0241 do k2=1,nr
0242 gencost_mod3d(i,j,k2,bi,bj,kk) =
0243 & pTracer(i,j,k2,bi,bj,itr)*maskC(i,j,k2,bi,bj)
0244 enddo
0245 #endif
c2222c60b2 An T*0246 elseif (gencost_barfile(k)(1:4).EQ.'m_UE') then
556841ad42 Gael*0247 kk=gencost_pointer3d(k)
0248 do k2=1,nr
0249 gencost_mod3d(i,j,k2,bi,bj,kk) =
0250 & m_UE(i,j,k2,bi,bj)*maskC(i,j,k2,bi,bj)
0251 enddo
c2222c60b2 An T*0252 elseif (gencost_barfile(k)(1:4).EQ.'m_VN') then
556841ad42 Gael*0253 kk=gencost_pointer3d(k)
0254 do k2=1,nr
0255 gencost_mod3d(i,j,k2,bi,bj,kk) =
0256 & m_VN(i,j,k2,bi,bj)*maskC(i,j,k2,bi,bj)
0257 enddo
0761692d75 An T*0258 elseif (gencost_barfile(k)(1:7).EQ.'m_trVol') then
0259 kk=gencost_pointer3d(k)
0260 do k2=1,nr
fce41e6d01 An T*0261 gencost_mod3d(i,j,k2,bi,bj,kk) = trVol(i,j,k2,bi,bj)
0761692d75 An T*0262 enddo
0263 elseif (gencost_barfile(k)(1:8).EQ.'m_trHeat') then
0264 kk=gencost_pointer3d(k)
0265 do k2=1,nr
fce41e6d01 An T*0266 gencost_mod3d(i,j,k2,bi,bj,kk) = trHeat(i,j,k2,bi,bj)
0761692d75 An T*0267 enddo
0268 elseif (gencost_barfile(k)(1:8).EQ.'m_trSalt') then
0269 kk=gencost_pointer3d(k)
0270 do k2=1,nr
ba67a799b1 An T*0271 gencost_mod3d(i,j,k2,bi,bj,kk) = trSalt(i,j,k2,bi,bj)
0761692d75 An T*0272 enddo
9aeddbf372 Gael*0273 #if (defined (ALLOW_3D_DIFFKR) || defined (ALLOW_DIFFKR_CONTROL))
0274 elseif (gencost_barfile(k)(1:8).EQ.'m_diffkr') then
0275 kk=gencost_pointer3d(k)
0276 do k2=1,nr
0277 gencost_mod3d(i,j,k2,bi,bj,kk) =
0278 & diffkr(i,j,k2,bi,bj)*maskC(i,j,k2,bi,bj)
0279 enddo
0280 #endif
0281 #ifdef ALLOW_CTRL
94a8024bbe Jean*0282 #if ( defined ALLOW_KAPGM_CONTROL && defined GM_READ_K3D_GM )
9aeddbf372 Gael*0283 elseif (gencost_barfile(k)(1:7).EQ.'m_kapgm') then
0284 kk=gencost_pointer3d(k)
0285 do k2=1,nr
0286 gencost_mod3d(i,j,k2,bi,bj,kk) =
94a8024bbe Jean*0287 & GM_inpK3dGM(i,j,k2,bi,bj)*maskC(i,j,k2,bi,bj)
9aeddbf372 Gael*0288 enddo
0289 #endif
94a8024bbe Jean*0290 #if ( defined ALLOW_KAPREDI_CONTROL && defined GM_READ_K3D_REDI )
9aeddbf372 Gael*0291 elseif (gencost_barfile(k)(1:9).EQ.'m_kapredi') then
0292 kk=gencost_pointer3d(k)
0293 do k2=1,nr
0294 gencost_mod3d(i,j,k2,bi,bj,kk) =
94a8024bbe Jean*0295 & GM_inpK3dRedi(i,j,k2,bi,bj)*maskC(i,j,k2,bi,bj)
9aeddbf372 Gael*0296 enddo
0297 #endif
0298 #endif
94a8024bbe Jean*0299 #endif /* ALLOW_GENCOST3D */
5cce2b5d76 Gael*0300 endif
27f56e97bb Gael*0301
8c157ed454 Patr*0302 enddo
0303 enddo
0304 enddo
0305 enddo
f09238ab8f Gael*0306 enddo
8c157ed454 Patr*0307
0308 #endif /* ALLOW_GENCOST_CONTRIBUTION */
0309
13d362b8c1 Ou W*0310 RETURN
0311 END