/[MITgcm]/MITgcm/pkg/aim_v23/aim_do_co2.F
ViewVC logotype

Annotation of /MITgcm/pkg/aim_v23/aim_do_co2.F

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


Revision 1.6 - (hide annotations) (download)
Mon Sep 28 16:09:36 2009 UTC (14 years, 9 months ago) by dfer
Branch: MAIN
CVS Tags: checkpoint62, checkpoint62c, checkpoint62b, checkpoint62a, checkpoint61w, checkpoint61z, checkpoint61x, checkpoint61y
Changes since 1.5: +2 -1 lines
Fix initialization of pCO2

1 dfer 1.6 C $Header: /u/gcmpack/MITgcm/pkg/aim_v23/aim_do_co2.F,v 1.5 2009/06/26 17:52:18 jmc Exp $
2 dfer 1.1 C $Name: $
3    
4     #include "AIM_OPTIONS.h"
5    
6     CStartOfInterface
7 dfer 1.4 SUBROUTINE AIM_DO_CO2( myTime, myIter, myThid)
8 dfer 1.1 C *==========================================================*
9     C | S/R AIM_DO_CO2 |
10     C | o CO2 budget of the atmosphere |
11     C *==========================================================*
12    
13     IMPLICIT NONE
14    
15     C == Global data ==
16     C-- size for MITgcm & Physics package :
17     #include "AIM_SIZE.h"
18    
19     #include "EEPARAMS.h"
20     #include "PARAMS.h"
21     #include "GRID.h"
22     #include "SURFACE.h"
23    
24     #include "AIM2DYN.h"
25     #include "AIM_CO2.h"
26    
27 dfer 1.4 C-- Coupled to the Ocean :
28     #ifdef COMPONENT_MODULE
29     #include "CPL_PARAMS.h"
30     #include "ATMCPL.h"
31     #endif
32    
33 dfer 1.1 C == Routine arguments ==
34     C myTime - Current time of simulation ( s )
35     C myIter - Current iteration number in simulation
36     C myThid - Number of this instance of the routine
37 dfer 1.4 INTEGER myIter, myThid
38 dfer 1.1 _RL myTime
39     CEndOfInterface
40    
41     #ifdef ALLOW_AIM
42     #ifdef ALLOW_AIM_CO2
43 dfer 1.4 INTEGER ILNBLNK, IFNBLNK, MDS_RECLEN
44     EXTERNAL ILNBLNK, IFNBLNK, MDS_RECLEN
45    
46 dfer 1.1 C == Local variables ==
47 dfer 1.4 C bi,bj - Tile index
48     C i,j - loop counters
49     INTEGER bi, bj, i, j
50     INTEGER iUnit, length_of_rec
51     _RL total_flux, atpco2_check
52     Real*8 tmpco2(2)
53     _RL flxCO2tile(nSx,nSy)
54 dfer 1.1 LOGICAL permCheckPoint
55     LOGICAL DIFFERENT_MULTIPLE
56     EXTERNAL DIFFERENT_MULTIPLE
57     CHARACTER*(MAX_LEN_FNAM) fn, msgBuf
58     INTEGER ilo,ihi
59    
60    
61 dfer 1.4 #ifdef COMPONENT_MODULE
62     IF ( useImportFlxCO2 ) THEN
63     DO bj=myByLo(myThid),myByHi(myThid)
64     DO bi=myBxLo(myThid),myBxHi(myThid)
65     DO j=1,sNy
66     DO i=1,sNx
67     aimflxCo2(i,j,bi,bj) = flxCO2ocn(i,j,bi,bj)
68     ENDDO
69 dfer 1.1 ENDDO
70     ENDDO
71 dfer 1.4 ENDDO
72     ENDIF
73     #endif /* COMPONENT_MODULE */
74    
75     IF ( Aim_CO2_Flag .EQ. 1 .AND. myTime .EQ. starttime ) THEN
76     _BEGIN_MASTER(myThid)
77     atm_pCO2 = atmpCO2init
78     _END_MASTER(myThid)
79     _BARRIER
80 dfer 1.1
81     ELSEIF ( Aim_CO2_Flag .EQ. 2 ) THEN
82    
83     C- First compute global mole flux at air-sea interface
84 dfer 1.4 DO bj=myByLo(myThid),myByHi(myThid)
85     DO bi=myBxLo(myThid),myBxHi(myThid)
86     flxCO2tile(bi,bj) = 0. _d 0
87     DO j=1,sNy
88     DO i=1,sNx
89     flxCO2tile(bi,bj)=flxCO2tile(bi,bj) + aimflxCo2(i,j,bi,bj)
90     & * rA(i,j,bi,bj) * deltaT
91     ENDDO
92     ENDDO
93 dfer 1.1 ENDDO
94     ENDDO
95 dfer 1.4 CALL GLOBAL_SUM_TILE_RL(flxCO2tile,total_flux,myThid)
96 dfer 1.1
97 dfer 1.4 _BARRIER
98     _BEGIN_MASTER(myThid)
99 dfer 1.1 IF ( startTime.EQ.baseTime .AND. nIter0.EQ.0 ) THEN
100 dfer 1.4 C- If first iteration, use atmpCO2init as initial condition
101     atm_pCO2 = atmpCO2init
102 dfer 1.6 Atm_CO2_Moles = atm_pCO2 * total_atmos_moles
103 dfer 1.1
104     ELSEIF ( myTime .EQ. starttime ) THEN
105     C- If restart, read moles number from pickup
106     WRITE(fn,'(A,I10.10)') 'pickup_aimCo2.',nIter0
107 dfer 1.4 ilo = IFNBLNK(fn)
108     ihi = ILNBLNK(fn)
109 dfer 1.1 CALL MDSFINDUNIT( iUnit, myThid )
110 dfer 1.4 length_of_rec = MDS_RECLEN( precFloat64, 2, myThid )
111 dfer 1.1 OPEN(UNIT=iUnit,FILE=fn(ilo:ihi),STATUS='old',
112 dfer 1.4 & FORM='UNFORMATTED',ACCESS='DIRECT',RECL=length_of_rec)
113 dfer 1.1 READ(iUnit,rec=1) tmpco2
114     CLOSE(iUnit)
115     #ifdef _BYTESWAPIO
116     CALL MDS_BYTESWAPR8( 2, tmpco2 )
117     #endif
118    
119     Atm_CO2_Moles = tmpco2(1)
120     atpco2_check = tmpco2(2)
121 dfer 1.4 atm_pCO2 = Atm_CO2_Moles / total_atmos_moles
122 dfer 1.1
123     iUnit = standardMessageUnit
124     WRITE(msgBuf,'(A)') ' '
125     CALL PRINT_MESSAGE(msgBuf,iUnit,SQUEEZE_RIGHT,myThid)
126     WRITE(msgBuf,'(A)') '// ==================================='
127     CALL PRINT_MESSAGE(msgBuf,iUnit,SQUEEZE_RIGHT,myThid)
128     WRITE(msgBuf,'(2A)') '// AIM_DO_CO2: Read pickup ',fn(ilo:ihi)
129     CALL PRINT_MESSAGE(msgBuf,iUnit,SQUEEZE_RIGHT,myThid)
130    
131 jmc 1.3 CALL WRITE_0D_RL( atpco2_check, INDEX_NONE, 'atpco2_check =',
132 dfer 1.4 & ' /* pCo2 from pickup file */')
133     CALL WRITE_0D_RL( atm_pCO2, INDEX_NONE, 'atm_pCO2 =',
134     & ' /* pCo2 from Atm_CO2_Moles */')
135 dfer 1.1
136     c ELSE
137     c WRITE(msgBuf,'(A)') 'AIM_DO_CO2: How did you end up here?'
138     c CALL PRINT_ERROR( msgBuf , myThid)
139     c STOP 'ABNORMAL END: S/R AIM_DO_CO2'
140     ENDIF
141    
142     C- Calculate new atmos pCO2
143     Atm_CO2_Moles = Atm_CO2_Moles - total_flux
144 dfer 1.4 atm_pCO2 = Atm_CO2_Moles / total_atmos_moles
145 dfer 1.1
146     C- Write out if time for a new pickup
147     permCheckPoint = .FALSE.
148     permCheckPoint =
149     & DIFFERENT_MULTIPLE(pChkptFreq,myTime+deltaTClock,deltaTClock)
150     & .AND. (myTime .NE. starttime)
151     IF (permCheckPoint) THEN
152     DO i = 1,MAX_LEN_FNAM
153 dfer 1.4 fn(i:i) = ' '
154 dfer 1.1 ENDDO
155     WRITE(fn,'(A,I10.10)') 'pickup_aimCo2.',myIter+1
156     C- write values to new pickup
157     CALL MDSFINDUNIT( iUnit, myThid )
158 dfer 1.4 length_of_rec = MDS_RECLEN( precFloat64, 2, myThid )
159 jmc 1.5 OPEN(UNIT=iUnit,FILE=fn,STATUS='unknown',
160 dfer 1.4 & FORM='UNFORMATTED',ACCESS='DIRECT',RECL=length_of_rec)
161 dfer 1.1 tmpco2(1)= Atm_CO2_Moles
162 dfer 1.4 tmpco2(2)= atm_pCO2
163 dfer 1.1 WRITE(iUnit,rec=1) tmpco2
164     CLOSE(iUnit)
165    
166     ENDIF
167 dfer 1.4 _END_MASTER(myThid)
168     _BARRIER
169 dfer 1.1
170     C--- end of Aim_CO2_Flag IF.
171     ENDIF
172    
173     #endif /* ALLOW_AIM_CO2 */
174     #endif /* ALLOW_AIM */
175    
176     RETURN
177     END

  ViewVC Help
Powered by ViewVC 1.1.22