/[MITgcm]/MITgcm/model/src/external_forcing.F
ViewVC logotype

Diff of /MITgcm/model/src/external_forcing.F

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

revision 1.37 by mlosch, Tue Feb 7 11:47:48 2006 UTC revision 1.48 by dimitri, Sat Sep 22 03:11:02 2007 UTC
# Line 71  C--   Forcing term Line 71  C--   Forcing term
71       &                      myTime, myThid )       &                      myTime, myThid )
72  #endif /* ALLOW_FIZHI */  #endif /* ALLOW_FIZHI */
73    
74    #ifdef ALLOW_MYPACKAGE
75          IF ( useMYPACKAGE ) CALL MYPACKAGE_TENDENCY_APPLY_U(
76         &                      iMin,iMax, jMin,jMax, bi,bj, kLev,
77         &                      myTime, myThid )
78    #endif /* ALLOW_MYPACKAGE */
79    
80  C     Add windstress momentum impulse into the top-layer  C     Add windstress momentum impulse into the top-layer
81        IF ( kLev .EQ. kSurface ) THEN        IF ( kLev .EQ. kSurface ) THEN
82  c      DO j=1,sNy  c      DO j=1,sNy
# Line 79  C-jmc: Without CD-scheme, this is OK ; b Line 85  C-jmc: Without CD-scheme, this is OK ; b
85          DO i=1,sNx+1          DO i=1,sNx+1
86           gU(i,j,kLev,bi,bj) = gU(i,j,kLev,bi,bj)           gU(i,j,kLev,bi,bj) = gU(i,j,kLev,bi,bj)
87       &   +foFacMom*surfaceForcingU(i,j,bi,bj)       &   +foFacMom*surfaceForcingU(i,j,bi,bj)
88       &   *recip_drF(kLev)*recip_hFacW(i,j,kLev,bi,bj)       &   *recip_drF(kLev)*_recip_hFacW(i,j,kLev,bi,bj)
89          ENDDO          ENDDO
90         ENDDO         ENDDO
91        ENDIF        ENDIF
# Line 169  C--   Forcing term Line 175  C--   Forcing term
175       &                      myTime, myThid )       &                      myTime, myThid )
176  #endif /* ALLOW_FIZHI */  #endif /* ALLOW_FIZHI */
177    
178    #ifdef ALLOW_MYPACKAGE
179          IF ( useMYPACKAGE ) CALL MYPACKAGE_TENDENCY_APPLY_V(
180         &                      iMin,iMax, jMin,jMax, bi,bj, kLev,
181         &                      myTime, myThid )
182    #endif /* ALLOW_MYPACKAGE */
183    
184  C     Add windstress momentum impulse into the top-layer  C     Add windstress momentum impulse into the top-layer
185        IF ( kLev .EQ. kSurface ) THEN        IF ( kLev .EQ. kSurface ) THEN
186         DO j=1,sNy+1         DO j=1,sNy+1
# Line 177  C-jmc: Without CD-scheme, this is OK ; b Line 189  C-jmc: Without CD-scheme, this is OK ; b
189          DO i=0,sNx+1          DO i=0,sNx+1
190           gV(i,j,kLev,bi,bj) = gV(i,j,kLev,bi,bj)           gV(i,j,kLev,bi,bj) = gV(i,j,kLev,bi,bj)
191       &   +foFacMom*surfaceForcingV(i,j,bi,bj)       &   +foFacMom*surfaceForcingV(i,j,bi,bj)
192       &   *recip_drF(kLev)*recip_hFacS(i,j,kLev,bi,bj)       &   *recip_drF(kLev)*_recip_hFacS(i,j,kLev,bi,bj)
193          ENDDO          ENDDO
194         ENDDO         ENDDO
195        ENDIF        ENDIF
# Line 225  C     == Global data == Line 237  C     == Global data ==
237  #include "GRID.h"  #include "GRID.h"
238  #include "DYNVARS.h"  #include "DYNVARS.h"
239  #include "FFIELDS.h"  #include "FFIELDS.h"
240    #include "SURFACE.h"
241    
242  C     !INPUT/OUTPUT PARAMETERS:  C     !INPUT/OUTPUT PARAMETERS:
243  C     == Routine arguments ==  C     == Routine arguments ==
# Line 274  C--   Forcing term Line 287  C--   Forcing term
287       &                      myTime, myThid )       &                      myTime, myThid )
288  #endif /* ALLOW_FIZHI */  #endif /* ALLOW_FIZHI */
289    
290    #ifdef ALLOW_MYPACKAGE
291          IF ( useMYPACKAGE ) CALL MYPACKAGE_TENDENCY_APPLY_T(
292         &                      iMin,iMax, jMin,jMax, bi,bj, kLev,
293         &                      myTime, myThid )
294    #endif /* ALLOW_MYPACKAGE */
295    
296  C     Add heat in top-layer  C     Add heat in top-layer
297        IF ( kLev .EQ. kSurface ) THEN        IF ( kLev .EQ. kSurface ) THEN
298         DO j=1,sNy         DO j=1,sNy
299          DO i=1,sNx          DO i=1,sNx
300           gT(i,j,kLev,bi,bj)=gT(i,j,kLev,bi,bj)           gT(i,j,kLev,bi,bj)=gT(i,j,kLev,bi,bj)
301       &     +surfaceForcingT(i,j,bi,bj)       &     +surfaceForcingT(i,j,bi,bj)
302       &     *recip_drF(kLev)*recip_hFacC(i,j,kLev,bi,bj)       &     *recip_drF(kLev)*_recip_hFacC(i,j,kLev,bi,bj)
303          ENDDO          ENDDO
304         ENDDO         ENDDO
305        ENDIF        ENDIF
306    
307    cph#ifndef ALLOW_AUTODIFF_TAMC
308    cph I didnt put this ifndef here.
309          IF (linFSConserveTr) THEN
310           DO j=1,sNy
311            DO i=1,sNx
312              IF (kLev .EQ. ksurfC(i,j,bi,bj)) THEN
313                gT(i,j,kLev,bi,bj)=gT(i,j,kLev,bi,bj)
314         &        +TsurfCor*recip_drF(kLev)*_recip_hFacC(i,j,kLev,bi,bj)
315              ENDIF
316            ENDDO
317           ENDDO
318          ENDIF
319    cph#endif /* ndfef ALLOW_AUTODIFF_TAMC */
320    
321  #ifdef ALLOW_SHELFICE  #ifdef ALLOW_SHELFICE
322        IF ( useShelfIce )        IF ( useShelfIce )
323       &     CALL SHELFICE_FORCING_T(       &     CALL SHELFICE_FORCING_T(
# Line 298  c     IF ( usePenetratingSW ) THEN Line 331  c     IF ( usePenetratingSW ) THEN
331         swfracb(1)=abs(rF(klev))         swfracb(1)=abs(rF(klev))
332         swfracb(2)=abs(rF(klev+1))         swfracb(2)=abs(rF(klev+1))
333         CALL SWFRAC(         CALL SWFRAC(
334       I     two,minusone,       I             two, minusone,
335       I     myTime,myThid,       U             swfracb,
336       U     swfracb)       I             myTime, 1, myThid )
337         kp1 = klev+1         kp1 = klev+1
338         IF (klev.EQ.Nr) THEN         IF (klev.EQ.Nr) THEN
339          kp1 = klev          kp1 = klev
# Line 311  c     IF ( usePenetratingSW ) THEN Line 344  c     IF ( usePenetratingSW ) THEN
344           gT(i,j,klev,bi,bj) = gT(i,j,klev,bi,bj)           gT(i,j,klev,bi,bj) = gT(i,j,klev,bi,bj)
345       &   -Qsw(i,j,bi,bj)*(swfracb(1)*maskC(i,j,klev,bi,bj)       &   -Qsw(i,j,bi,bj)*(swfracb(1)*maskC(i,j,klev,bi,bj)
346       &                   -swfracb(2)*maskC(i,j,kp1, bi,bj))       &                   -swfracb(2)*maskC(i,j,kp1, bi,bj))
347       &    *recip_Cp*recip_rhoConst       &    *recip_Cp*mass2rUnit
348       &    *recip_drF(klev)*recip_hFacC(i,j,kLev,bi,bj)       &    *recip_drF(klev)*_recip_hFacC(i,j,kLev,bi,bj)
349          ENDDO          ENDDO
350         ENDDO         ENDDO
351  c     ENDIF  c     ENDIF
352  #endif  #endif
353    
354  #ifdef ALLOW_RBCS  #ifdef ALLOW_RBCS
355         if (useRBCS) then         IF (useRBCS) THEN
356            call RBCS_ADD_TENDENCY(bi,bj,klev, 1,            CALL RBCS_ADD_TENDENCY(bi,bj,klev, 1,
357       &                            myTime, myThid )       &                            myTime, myThid )
358         endif         ENDIF
359  #endif  #endif
360    
361  #ifdef ALLOW_OBCS  #ifdef ALLOW_OBCS
# Line 363  C     == Global data == Line 396  C     == Global data ==
396  #include "GRID.h"  #include "GRID.h"
397  #include "DYNVARS.h"  #include "DYNVARS.h"
398  #include "FFIELDS.h"  #include "FFIELDS.h"
399    #include "SURFACE.h"
400    #ifdef ALLOW_SALT_PLUME
401    #ifdef ALLOW_SEAICE
402    #include "SEAICE_PARAMS.h"
403    #endif /* ALLOW_SEAICE */
404    #endif /* ALLOW_SALT_PLUME */
405    
406  C     !INPUT/OUTPUT PARAMETERS:  C     !INPUT/OUTPUT PARAMETERS:
407  C     == Routine arguments ==  C     == Routine arguments ==
# Line 383  C     kSurface  :: index of surface laye Line 422  C     kSurface  :: index of surface laye
422        INTEGER i, j        INTEGER i, j
423        INTEGER kSurface        INTEGER kSurface
424  CEOP  CEOP
425    #ifdef ALLOW_SALT_PLUME
426          _RL saltPlume
427          integer two2
428          _RL minusone
429          parameter (two2=2,minusone=-1.)
430          _RL plumekb(two2)
431          _RL SPdepth(two2)
432          INTEGER kp1
433    #endif /* ALLOW_SALT_PLUME */
434    
435        IF ( fluidIsAir ) THEN        IF ( fluidIsAir ) THEN
436         kSurface = 0         kSurface = 0
# Line 405  C--   Forcing term Line 453  C--   Forcing term
453       &                      myTime, myThid )       &                      myTime, myThid )
454  #endif /* ALLOW_FIZHI */  #endif /* ALLOW_FIZHI */
455    
456    #ifdef ALLOW_MYPACKAGE
457          IF ( useMYPACKAGE ) CALL MYPACKAGE_TENDENCY_APPLY_S(
458         &                      iMin,iMax, jMin,jMax, bi,bj, kLev,
459         &                      myTime, myThid )
460    #endif /* ALLOW_MYPACKAGE */
461    
462  C     Add fresh-water in top-layer  C     Add fresh-water in top-layer
463        IF ( kLev .EQ. kSurface ) THEN        IF ( kLev .EQ. kSurface ) THEN
464         DO j=1,sNy         DO j=1,sNy
465          DO i=1,sNx          DO i=1,sNx
466           gS(i,j,kLev,bi,bj)=gS(i,j,kLev,bi,bj)           gS(i,j,kLev,bi,bj)=gS(i,j,kLev,bi,bj)
467       &     +surfaceForcingS(i,j,bi,bj)       &     +surfaceForcingS(i,j,bi,bj)
468       &     *recip_drF(kLev)*recip_hFacC(i,j,kLev,bi,bj)       &     *recip_drF(kLev)*_recip_hFacC(i,j,kLev,bi,bj)
469            ENDDO
470           ENDDO
471          ENDIF
472    
473    cph#ifndef ALLOW_AUTODIFF_TAMC
474    cph I didnt put this ifndef here.
475          IF (linFSConserveTr) THEN
476           DO j=1,sNy
477            DO i=1,sNx
478              IF (kLev .EQ. ksurfC(i,j,bi,bj)) THEN
479                gS(i,j,kLev,bi,bj)=gS(i,j,kLev,bi,bj)
480         &        +SsurfCor*recip_drF(kLev)*_recip_hFacC(i,j,kLev,bi,bj)
481              ENDIF
482          ENDDO          ENDDO
483         ENDDO         ENDDO
484        ENDIF        ENDIF
485    cph#endif /* ndfef ALLOW_AUTODIFF_TAMC */
486    
487  #ifdef ALLOW_SHELFICE  #ifdef ALLOW_SHELFICE
488        IF ( useShelfIce )        IF ( useShelfIce )
# Line 423  C     Add fresh-water in top-layer Line 491  C     Add fresh-water in top-layer
491       I     myTime, myThid )       I     myTime, myThid )
492  #endif /* ALLOW_SHELFICE */  #endif /* ALLOW_SHELFICE */
493    
494    #ifdef ALLOW_SALT_PLUME
495    C saltPlume is the amount of salt rejected by ice while freezing;
496    C it is here redistributed to multiple vertical levels as per
497    C Duffy et al. (GRL 1999)
498           DO j=1,sNy
499            DO i=1,sNx
500    C Penetrating saltplume fraction:
501              plumekb(1)=abs(rF(klev))
502              plumekb(2)=abs(rF(klev+1))
503              SPdepth(1)=SaltPlumeDepth(i,j,bi,bj)
504              SPdepth(2)=SaltPlumeDepth(i,j,bi,bj)
505              CALL PLUMEFRAC(
506         I                   two2,minusone,SPdepth,
507         U                   plumekb,
508         I                   myTime, 1, myThid )
509              kp1 = klev+1
510              IF (klev.EQ.Nr) THEN
511               kp1 = klev
512               plumekb(2)=0. _d 0
513              ENDIF
514              saltPlume = 0.
515    #ifdef ALLOW_SEAICE
516              IF ( saltFlux(i,j,bi,bj) .GT. 0. .AND.
517         &         salt(i,j,kSurface,bi,bj)  .GT. SEAICE_salinity ) THEN
518                saltPlume = saltPlumeFlux(i,j,bi,bj)
519              ENDIF
520    #endif /* ALLOW_SEAICE */
521              IF ( SaltPlumeDepth(i,j,bi,bj) .GT. -rF(kLev) ) THEN
522               gS(i,j,kLev,bi,bj)=gS(i,j,kLev,bi,bj)
523         &          +saltPlume*(plumekb(1)*maskC(i,j,klev,bi,bj)
524         &                     -plumekb(2)*maskC(i,j,kp1, bi,bj))
525         &          *horiVertRatio*recip_rhoConst
526         &          *recip_drF(kLev)*_recip_hFacC(i,j,kLev,bi,bj)
527              ENDIF
528            ENDDO
529           ENDDO
530    #endif /* ALLOW_SALT_PLUME */
531    
532  #ifdef ALLOW_RBCS  #ifdef ALLOW_RBCS
533         if (useRBCS) then         IF (useRBCS) THEN
534            call RBCS_ADD_TENDENCY(bi,bj,klev, 2,            CALL RBCS_ADD_TENDENCY(bi,bj,klev, 2,
535       &                            myTime, myThid )       &                            myTime, myThid )
536         endif         ENDIF
537  #endif  #endif /* ALLOW_RBCS */
538    
539  #ifdef ALLOW_OBCS  #ifdef ALLOW_OBCS
540        IF (useOBCS) THEN        IF (useOBCS) THEN
# Line 436  C     Add fresh-water in top-layer Line 542  C     Add fresh-water in top-layer
542       I           iMin,iMax, jMin,jMax, bi,bj, kLev,       I           iMin,iMax, jMin,jMax, bi,bj, kLev,
543       I           myTime, myThid )       I           myTime, myThid )
544        ENDIF        ENDIF
545  #endif  #endif /* ALLOW_OBCS */
546    
547        RETURN        RETURN
548        END        END

Legend:
Removed from v.1.37  
changed lines
  Added in v.1.48

  ViewVC Help
Powered by ViewVC 1.1.22