File indexing completed on 2025-10-27 12:20:17 UTC
view on githubraw file Latest commit c3be0435 on 2025-09-18 18:40:16 UTC
c61ca13fc6 Dimi*0001 #include "PTRACERS_OPTIONS.h"
0002
0003
636477d15b Jean*0004
c61ca13fc6 Dimi*0005
0006
0007 SUBROUTINE PTRACERS_FORCING_SURF(
c2ced55abd Jean*0008 I relaxForcingS,
c61ca13fc6 Dimi*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"
e6469f285f Jean*0022 #include "GRID.h"
0023 #include "SURFACE.h"
c2ced55abd Jean*0024 #include "DYNVARS.h"
c61ca13fc6 Dimi*0025 #include "FFIELDS.h"
e6469f285f Jean*0026 #include "PTRACERS_SIZE.h"
0a278985fd Jean*0027 #include "PTRACERS_PARAMS.h"
d3a355ef62 Jean*0028 #include "PTRACERS_START.h"
0a278985fd Jean*0029 #include "PTRACERS_FIELDS.h"
c61ca13fc6 Dimi*0030
0031
c2ced55abd Jean*0032
c61ca13fc6 Dimi*0033
0034
0035
0036
c2ced55abd Jean*0037 _RL relaxForcingS(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
c61ca13fc6 Dimi*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
e6469f285f Jean*0047
0048
0049 INTEGER i, j
0050 INTEGER iTrc, ks
c2ced55abd Jean*0051 _RL add2EmP(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
0052 _RL epsil, cutoff, tmpVar
c61ca13fc6 Dimi*0053
0054
e6469f285f Jean*0055 IF ( usingPCoords ) THEN
0056 ks = Nr
0057 ELSE
0058 ks = 1
0059 ENDIF
0060
c61ca13fc6 Dimi*0061
e6469f285f Jean*0062 DO iTrc=1,PTRACERS_numInUse
d3a355ef62 Jean*0063
c61ca13fc6 Dimi*0064 DO j = jMin, jMax
86e9d4b8dc Jean*0065 DO i = iMin, iMax
d3a355ef62 Jean*0066 surfaceForcingPTr(i,j,bi,bj,iTrc) = 0. _d 0
0067
86e9d4b8dc Jean*0068 ENDDO
c61ca13fc6 Dimi*0069 ENDDO
d3a355ef62 Jean*0070
e6469f285f Jean*0071 ENDDO
0072
c2ced55abd 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
e6469f285f Jean*0114 IF ( (nonlinFreeSurf.GT.0 .OR. usingPCoords)
0115 & .AND. useRealFreshWaterFlux ) THEN
0116
0117 DO iTrc=1,PTRACERS_numInUse
0118
0119
0120
0121
0122
d3a355ef62 Jean*0123 IF ( PTRACERS_StepFwd(iTrc) .AND.
0124 & PTRACERS_EvPrRn(iTrc).NE.UNSET_RL ) THEN
e6469f285f Jean*0125 DO j = jMin, jMax
0126 DO i = iMin, iMax
0a278985fd Jean*0127 surfaceForcingPTr(i,j,bi,bj,iTrc) =
0128 & surfaceForcingPTr(i,j,bi,bj,iTrc)
c2ced55abd Jean*0129 & + ( PmEpR(i,j,bi,bj) - add2EmP(i,j) )
e6469f285f Jean*0130 & *( PTRACERS_EvPrRn(iTrc) - pTracer(i,j,ks,bi,bj,iTrc) )
3da6675e68 Jean*0131 & *mass2rUnit
e6469f285f Jean*0132 ENDDO
0133 ENDDO
0134 ENDIF
0135
c61ca13fc6 Dimi*0136 ENDDO
db62568dca Davi*0137
0138
0139 ELSE
c61ca13fc6 Dimi*0140
db62568dca Davi*0141
0142
0143
0144 IF (convertFW2Salt .EQ. -1.) THEN
0145
0146
0147 DO iTrc=1,PTRACERS_numInUse
0148
d3a355ef62 Jean*0149 IF ( PTRACERS_StepFwd(iTrc) .AND.
0150 & PTRACERS_EvPrRn(iTrc).NE.UNSET_RL ) THEN
0a278985fd Jean*0151
db62568dca Davi*0152
0153 DO j = jMin, jMax
0154 DO i = iMin, iMax
0a278985fd Jean*0155 surfaceForcingPTr(i,j,bi,bj,iTrc) =
0156 & surfaceForcingPTr(i,j,bi,bj,iTrc)
c2ced55abd Jean*0157 & + ( EmPmR(i,j,bi,bj) + add2EmP(i,j) )
0a278985fd Jean*0158 & *( pTracer(i,j,ks,bi,bj,iTrc) - PTRACERS_EvPrRn(iTrc) )
f8c4dd9cc4 Mart*0159 & *mass2rUnit
db62568dca Davi*0160 ENDDO
0161 ENDDO
0162 ENDIF
0163
0164 ENDDO
0165
0166 ELSE
0167
0168
0169 DO iTrc=1,PTRACERS_numInUse
0170
d3a355ef62 Jean*0171 IF ( PTRACERS_StepFwd(iTrc) .AND.
0172 & PTRACERS_EvPrRn(iTrc).NE.UNSET_RL ) THEN
0a278985fd Jean*0173
db62568dca Davi*0174
0175 DO j = jMin, jMax
0176 DO i = iMin, iMax
0a278985fd Jean*0177 surfaceForcingPTr(i,j,bi,bj,iTrc) =
0178 & surfaceForcingPTr(i,j,bi,bj,iTrc)
c2ced55abd Jean*0179 & + ( EmPmR(i,j,bi,bj) + add2EmP(i,j) )
0a278985fd Jean*0180 & *( PTRACERS_ref(ks,iTrc) - PTRACERS_EvPrRn(iTrc) )
db62568dca Davi*0181 & *mass2rUnit
0182 ENDDO
0183 ENDDO
0184 ENDIF
0185
0186 ENDDO
0187
0188
0189 ENDIF
0190
0191 ENDIF
0192
0193
0194
c61ca13fc6 Dimi*0195 #endif /* ALLOW_PTRACERS */
0196
0197 RETURN
0198 END