forked from altMITgcm/MITgcm
-
Notifications
You must be signed in to change notification settings - Fork 0
/
salt_plume_forcing_surf.F
80 lines (71 loc) · 2.46 KB
/
salt_plume_forcing_surf.F
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
C $Header: /u/gcmpack/MITgcm/pkg/salt_plume/salt_plume_forcing_surf.F,v 1.5 2014/05/21 10:46:03 heimbach Exp $
C $Name: $
#include "SALT_PLUME_OPTIONS.h"
CBOP
C !ROUTINE: SALT_PLUME_FORCING_SURF
C !INTERFACE:
SUBROUTINE SALT_PLUME_FORCING_SURF(
I bi, bj, iMin, iMax, jMin, jMax,
I myTime,myIter,myThid )
C !DESCRIPTION: \bv
C *==========================================================*
C | S/R SALT_PLUME_FORCING_SURF
C | o saltPlume is the amount of salt rejected by ice while freezing;
C | it is here subtracted from surfaceForcingS and will be redistributed
C | to multiple vertical levels later on as per Duffy et al. (GRL 1999)
C *==========================================================*
C \ev
C !USES:
IMPLICIT NONE
C == Global variables ==
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PARAMS.h"
#include "GRID.h"
#include "FFIELDS.h"
#include "DYNVARS.h"
#include "SALT_PLUME.h"
C !INPUT PARAMETERS:
C bi,bj :: tile indices
C myTime :: model time
C myIter :: time-step number
C myThid :: thread number
INTEGER bi, bj, iMin, iMax, jMin, jMax
_RL myTime
INTEGER myIter
INTEGER myThid
CEOP
#ifdef ALLOW_SALT_PLUME
C !LOCAL VARIABLES:
C i,j :: loop indices
C ks :: surface level index
INTEGER i, j, ks
IF ( usingPCoords ) THEN
ks = Nr
ELSE
ks = 1
ENDIF
DO j = jMin, jMax
DO i = iMin, iMax
#ifdef SALT_PLUME_VOLUME
SPforcS1(i,j,bi,bj)=SPbrineVolFlux(i,j,bi,bj)
& *SPbrineSconst*rhoConst
SPforcT1(i,j,bi,bj)=SPbrineVolFlux(i,j,bi,bj)
& *theta(i,j,1,bi,bj)*rhoConst
& *HeatCapacity_Cp
Cunits: surfaceForcingT [Kelvin.m/s], surfaceForcingS [psu.m/s]
C SPforcS1 has same unit as saltPlumeFlux [g/m2/s]=[g/kg kg/m2/s]
C SPforcT1: [W/m2]
surfaceForcingS(i,j,bi,bj) = surfaceForcingS(i,j,bi,bj)
& - SPforcS1(i,j,bi,bj) * mass2rUnit
surfaceForcingT(i,j,bi,bj) = surfaceForcingT(i,j,bi,bj)
& - SPforcT1(i,j,bi,bj) * mass2rUnit / HeatCapacity_Cp
#else /* SALT_PLUME_VOLUME */
surfaceForcingS(i,j,bi,bj) = surfaceForcingS(i,j,bi,bj)
& - saltPlumeFlux(i,j,bi,bj) * mass2rUnit
#endif /* SALT_PLUME_VOLUME */
ENDDO
ENDDO
#endif /* ALLOW_SALT_PLUME */
RETURN
END