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

Legend:
Removed from v.1.15  
changed lines
  Added in v.1.16

  ViewVC Help
Powered by ViewVC 1.1.22