File indexing completed on 2025-10-27 12:20:55 UTC
view on githubraw file Latest commit c3be0435 on 2025-09-18 18:40:16 UTC
847dcb9bdb Jean*0001 #include "PTRACERS_OPTIONS.h"
0002
0003
0004
0005
0006
0007 SUBROUTINE PTRACERS_FORCING_SURF(
3f4989e08f Jean*0008 I relaxForcingS,
847dcb9bdb Jean*0009 I bi, bj, iMin, iMax, jMin, jMax,
0010 I myTime,myIter,myThid )
0011
0012
0013
0014
0015
0016
0017
0018 IMPLICIT NONE
0019 #include "SIZE.h"
0020 #include "EEPARAMS.h"
0021 #include "PARAMS.h"
dc109c52c8 Jean*0022 #include "GRID.h"
0023 #include "SURFACE.h"
3f4989e08f Jean*0024 #include "DYNVARS.h"
847dcb9bdb Jean*0025 #include "FFIELDS.h"
dc109c52c8 Jean*0026 #include "PTRACERS_SIZE.h"
79eb851a84 Jean*0027 #include "PTRACERS_PARAMS.h"
698b6992ee Jean*0028 #include "PTRACERS_START.h"
79eb851a84 Jean*0029 #include "PTRACERS_FIELDS.h"
847dcb9bdb Jean*0030
0031
3f4989e08f Jean*0032
847dcb9bdb Jean*0033
0034
0035
0036
3f4989e08f Jean*0037 _RL relaxForcingS(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
847dcb9bdb Jean*0038 INTEGER bi, bj, iMin, iMax, jMin, jMax
0039 _RL myTime
0040 INTEGER myIter
0041 INTEGER myThid
0042
0043 #ifdef ALLOW_PTRACERS
0044
0045
0046
dc109c52c8 Jean*0047
0048
0049 INTEGER i, j
0050 INTEGER iTrc, ks
3f4989e08f Jean*0051 _RL add2EmP(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0052 _RL epsil, cutoff, tmpVar
847dcb9bdb Jean*0053
0054
dc109c52c8 Jean*0055 IF ( usingPCoords ) THEN
0056 ks = Nr
0057 ELSE
0058 ks = 1
0059 ENDIF
0060
847dcb9bdb Jean*0061
dc109c52c8 Jean*0062 DO iTrc=1,PTRACERS_numInUse
698b6992ee Jean*0063
847dcb9bdb Jean*0064 DO j = jMin, jMax
0065 DO i = iMin, iMax
698b6992ee Jean*0066 surfaceForcingPTr(i,j,bi,bj,iTrc) = 0. _d 0
0067 & + surfaceForcingS(i,j,bi,bj)
847dcb9bdb Jean*0068 ENDDO
0069 ENDDO
698b6992ee Jean*0070
dc109c52c8 Jean*0071 ENDDO
0072
3f4989e08f Jean*0073
0074 IF ( PTRACERS_addSrelax2EmP ) THEN
0075
0076
0077
0078 epsil = 1. _d -10
0079 cutoff = 0.1 _d 0 *drF(ks)/PTRACERS_dTLev(ks)
0080 IF ( ( (nonlinFreeSurf.GT.0 .OR. usingPCoords)
0081 & .AND. useRealFreshWaterFlux )
0082 & .OR.convertFW2Salt .EQ. -1. ) THEN
0083 DO j = jMin, jMax
0084 DO i = iMin, iMax
0085 tmpVar = MAX( salt(i,j,ks,bi,bj), epsil )
0086 add2EmP(i,j) = relaxForcingS(i,j)/tmpVar
0087 add2EmP(i,j) = rUnit2mass
0088 & *MAX( -cutoff, MIN( add2EmP(i,j), cutoff ) )
0089 ENDDO
0090 ENDDO
0091 ELSE
0092 DO j = jMin, jMax
0093 DO i = iMin, iMax
0094 add2EmP(i,j) = relaxForcingS(i,j)/convertFW2Salt
0095 add2EmP(i,j) = rUnit2mass
0096 & *MAX( -cutoff, MIN( add2EmP(i,j), cutoff ) )
0097 ENDDO
0098 ENDDO
0099 ENDIF
0100 #ifdef ALLOW_DIAGNOSTICS
0101 IF ( useDiagnostics ) THEN
0102 CALL DIAGNOSTICS_FILL(add2EmP,'Add2EmP ',0,1,2,bi,bj,myThid)
0103 ENDIF
0104 #endif /* ALLOW_DIAGNOSTICS */
0105 ELSE
0106 DO j = jMin, jMax
0107 DO i = iMin, iMax
0108 add2EmP(i,j) = 0. _d 0
0109 ENDDO
0110 ENDDO
0111 ENDIF
0112
0113
dc109c52c8 Jean*0114 IF ( (nonlinFreeSurf.GT.0 .OR. usingPCoords)
0115 & .AND. useRealFreshWaterFlux ) THEN
0116
0117 DO iTrc=1,PTRACERS_numInUse
0118
0119
0120
0121
0122
698b6992ee Jean*0123 IF ( PTRACERS_StepFwd(iTrc) .AND.
0124 & PTRACERS_EvPrRn(iTrc).NE.UNSET_RL ) THEN
dc109c52c8 Jean*0125 DO j = jMin, jMax
0126 DO i = iMin, iMax
79eb851a84 Jean*0127 surfaceForcingPTr(i,j,bi,bj,iTrc) =
0128 & surfaceForcingPTr(i,j,bi,bj,iTrc)
3f4989e08f Jean*0129 & + ( PmEpR(i,j,bi,bj) - add2EmP(i,j) )
dc109c52c8 Jean*0130 & *( PTRACERS_EvPrRn(iTrc) - pTracer(i,j,ks,bi,bj,iTrc) )
62fd6ae4e5 Jean*0131 & *mass2rUnit
dc109c52c8 Jean*0132 ENDDO
0133 ENDDO
0134 ENDIF
0135
847dcb9bdb Jean*0136 ENDDO
79eb851a84 Jean*0137
0138
0139 ELSE
847dcb9bdb Jean*0140
79eb851a84 Jean*0141
0142
0143
0144 IF (convertFW2Salt .EQ. -1.) THEN
0145
0146
0147 DO iTrc=1,PTRACERS_numInUse
0148
698b6992ee Jean*0149 IF ( PTRACERS_StepFwd(iTrc) .AND.
0150 & PTRACERS_EvPrRn(iTrc).NE.UNSET_RL ) THEN
79eb851a84 Jean*0151
0152
0153 DO j = jMin, jMax
0154 DO i = iMin, iMax
0155 surfaceForcingPTr(i,j,bi,bj,iTrc) =
0156 & surfaceForcingPTr(i,j,bi,bj,iTrc)
3f4989e08f Jean*0157 & + ( EmPmR(i,j,bi,bj) + add2EmP(i,j) )
79eb851a84 Jean*0158 & *( pTracer(i,j,ks,bi,bj,iTrc) - PTRACERS_EvPrRn(iTrc) )
0159 & *mass2rUnit
0160 ENDDO
0161 ENDDO
0162 ENDIF
0163
0164 ENDDO
0165
0166 ELSE
0167
0168
0169 DO iTrc=1,PTRACERS_numInUse
0170
698b6992ee Jean*0171 IF ( PTRACERS_StepFwd(iTrc) .AND.
0172 & PTRACERS_EvPrRn(iTrc).NE.UNSET_RL ) THEN
79eb851a84 Jean*0173
0174
0175 DO j = jMin, jMax
0176 DO i = iMin, iMax
0177 surfaceForcingPTr(i,j,bi,bj,iTrc) =
0178 & surfaceForcingPTr(i,j,bi,bj,iTrc)
3f4989e08f Jean*0179 & + ( EmPmR(i,j,bi,bj) + add2EmP(i,j) )
79eb851a84 Jean*0180 & *( PTRACERS_ref(ks,iTrc) - PTRACERS_EvPrRn(iTrc) )
0181 & *mass2rUnit
0182 ENDDO
0183 ENDDO
0184 ENDIF
0185
0186 ENDDO
0187
0188
0189 ENDIF
0190
0191 ENDIF
0192
0193
0194
847dcb9bdb Jean*0195 #endif /* ALLOW_PTRACERS */
0196
0197 RETURN
0198 END