/[MITgcm]/MITgcm/pkg/dic/fe_chem.F
ViewVC logotype

Diff of /MITgcm/pkg/dic/fe_chem.F

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

revision 1.13 by dfer, Mon Apr 7 20:31:16 2008 UTC revision 1.17 by jmc, Wed Aug 22 00:40:56 2012 UTC
# Line 3  C $Name$ Line 3  C $Name$
3    
4  #include "DIC_OPTIONS.h"  #include "DIC_OPTIONS.h"
5    
6  CStartOfInterFace  CBOP
7    C     !ROUTINE: Fe_CHEM
8    C     !INTERFACE:
9        SUBROUTINE Fe_CHEM(        SUBROUTINE Fe_CHEM(
10       I           bi,bj,iMin,iMax,jMin,jMax,       I           bi,bj, iMin,iMax,jMin,jMax,
11       I           fe, freefe,       I           fe,
12         O           freefe,
13       I           myIter, myThid )       I           myIter, myThid )
14  C     /==========================================================\  
15  C     | SUBROUTINE Fe_chem                                       |  C     !DESCRIPTION: \bv
16  C     |                                                          |  C     *==========================================================*
17  C     | o Calculate L,FeL,Fe concentration                       |  C     | SUBROUTINE Fe_CHEM
18  C     |==========================================================|  C     | o Calculate L,FeL,Fe concentration
19    C     *==========================================================*
20    C     \ev
21    
22    C     !USES:
23        IMPLICIT NONE        IMPLICIT NONE
24    
25  C     == GLobal variables ==  C     == GLobal variables ==
26  #include "SIZE.h"  #include "SIZE.h"
 #include "DYNVARS.h"  
27  #include "EEPARAMS.h"  #include "EEPARAMS.h"
28  #include "PARAMS.h"  #include "PARAMS.h"
29  #include "GRID.h"  #include "GRID.h"
30  #include "DIC_VARS.h"  #include "DIC_VARS.h"
31    
32  C     == Routine arguments ==                  C     !INPUT/OUTPUT PARAMETERS:
33  C     bi, bj, iMin, iMax, jMin, jMax - Range of points for which calculation  C     == Routine arguments ==
34  C                                      results will be set.  C     bi, bj              :: current tile indices
35  C     myThid - Instance number for this innvocation of CALC_GT  C     iMin,iMax,jMin,jMax :: Range of points for which calculation is performed.
36        _RL  freefe(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)  C     myThid              :: my Thread Id number
37        _RL  fe(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)        INTEGER bi,bj
38        INTEGER bi,bj,iMin,iMax,jMin,jMax        INTEGER iMin,iMax,jMin,jMax
39        INTEGER myIter,myThid        _RL     fe(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
40  #ifdef AD_SAFE        _RL freefe(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
41        _RL thx, thy, theps        INTEGER myIter, myThid
42  #endif  CEOP
 CEndOfInterface  
43    
44  #ifdef ALLOW_FE  #ifdef ALLOW_FE
45    C     !LOCAL VARIABLES:
46        INTEGER I,J,K        INTEGER i,j,k
47        _RL  lig, FeL        _RL  lig, FeL
48        _RL  tmpfe        _RL  tmpfe
49    #ifdef AD_SAFE
50          _RL thx, thy, theps
51    #endif
52    
53  CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc  CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
54  CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc  C
55  CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc  C  ADAPTED FROM PAYAL
56  CC  C
57  CC ADAPTED FROM PAYAL  CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
58  CC  
59  CC        DO k=1,Nr
60  CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc         DO j=1-OLy,sNy+OLy
61  CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc          DO i=1-OLx,sNx+OLx
62  CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCc            freefe(i,j,k) = 0. _d 0
63            ENDDO
64           ENDDO
65          ENDDO
66    
67  C ligand balance in surface layer  C ligand balance in surface layer
68  C in surface layer  C in surface layer
69    
70         DO j=jmin,jmax         DO k=1,Nr
71          DO i=imin,imax          DO j=jMin,jMax
72           DO k=1,Nr           DO i=iMin,iMax
73            IF (hFacC(i,j,k,bi,bj) .GT. 0. _d 0) THEN            IF ( maskC(i,j,k,bi,bj).GT.0. ) THEN
74    
75  #ifdef DIC_NO_NEG  #ifdef DIC_NO_NEG
76                tmpfe=max(0. _d0 , fe (i,j,k,bi,bj))                tmpfe =MAX( 0. _d 0 , fe(i,j,k) )
77  #else  #else
78                tmpfe=fe (i,j,k,bi,bj)                tmpfe = fe(i,j,k)
79  #endif  #endif
80                
81  C   Ligand,FeL,Fe calculation  C   Ligand,FeL,Fe calculation
82                lig=(-ligand_stab*tmpfe +                lig=(-ligand_stab*tmpfe +
83       &              ligand_stab*ligand_tot-1. _d 0       &              ligand_stab*ligand_tot-1. _d 0
84       &             +((ligand_stab*tmpfe       &             +((ligand_stab*tmpfe
85       &                -ligand_stab*ligand_tot+1. _d 0)**2       &                -ligand_stab*ligand_tot+1. _d 0)**2
86       &               +4. _d 0*ligand_stab*ligand_tot)**0.5 _d 0       &               +4. _d 0*ligand_stab*ligand_tot)**0.5 _d 0
87       &            )/(2. _d 0*ligand_stab)       &            )/(2. _d 0*ligand_stab)
88    
89                FeL = ligand_tot-lig                FeL = ligand_tot-lig
90                if (tmpfe.eq.0. _d 0) then                IF (tmpfe.NE.0. _d 0) THEN
91                  freefe(i,j,k,bi,bj) = tmpfe -FeL                  freefe(i,j,k) = tmpfe -FeL
92                else                ELSE
93                  freefe(i,j,k,bi,bj) = 0. _d 0                  freefe(i,j,k) = 0. _d 0
94                endif                ENDIF
95  #ifdef MINFE  #ifdef MINFE
96  #ifdef AD_SAFE  #ifdef AD_SAFE
97                thx=freefe(i,j,k,bi,bj)                thx=freefe(i,j,k)
98                thy=freefemax                thy=freefemax
99                theps=1. _d -8                theps=1. _d -8
100                freefe(i,j,k,bi,bj) =                freefe(i,j,k) =
101       &                 ( 1. _d 0 - tanh((thx-thy)/theps) ) * thx/2.+       &                 ( 1. _d 0 - tanh((thx-thy)/theps) ) * thx/2.+
102       &                 ( 1. _d 0 + tanh((thx-thy)/theps) ) * thy/2.       &                 ( 1. _d 0 + tanh((thx-thy)/theps) ) * thy/2.
103    
104  #else  #else
105                freefe(i,j,k,bi,bj) = min(freefe(i,j,k,bi,bj),freefemax)                freefe(i,j,k) = MIN(freefe(i,j,k),freefemax)
106  #endif  #endif
107                fe(i,j,k,bi,bj) = FeL+freefe(i,j,k,bi,bj)                fe(i,j,k) = FeL+freefe(i,j,k)
108  #endif  #endif
109            END IF              ENDIF
110           ENDDO           ENDDO
111          ENDDO          ENDDO
112         ENDDO             ENDDO
113  c  
114  #endif  #endif /* ALLOW_FE */
115          RETURN        RETURN
116          END        END

Legend:
Removed from v.1.13  
changed lines
  Added in v.1.17

  ViewVC Help
Powered by ViewVC 1.1.22