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

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

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

revision 1.20 by jmc, Sat Sep 11 21:24:52 2010 UTC revision 1.23 by jmc, Mon Apr 4 21:29:00 2016 UTC
# Line 93  C--   Interface r-distances undefined: Line 93  C--   Interface r-distances undefined:
93  C     assume Interface at middle between 2 Center  C     assume Interface at middle between 2 Center
94         drF(1) = delRc(1)         drF(1) = delRc(1)
95         DO k=2,Nr         DO k=2,Nr
96           drF(k-1) = 0.5 _d 0 *delRc(k) + drF(k-1)  c        drF(k-1) = 0.5 _d 0 *delRc(k) + drF(k-1)
97    c        drF( k ) = 0.5 _d 0 *delRc(k)
98    C- note: change the order to prevent some compilers to produce wrong code
99    C        when trying to optimise this loop :
100           drF( k ) = 0.5 _d 0 *delRc(k)           drF( k ) = 0.5 _d 0 *delRc(k)
101             drF(k-1) = 0.5 _d 0 *delRc(k) + drF(k-1)
102         ENDDO         ENDDO
103         drF(Nr) = delRc(Nr+1) + drF(Nr)         drF(Nr) = delRc(Nr+1) + drF(Nr)
104        ENDIF        ENDIF
105    
106        IF (setCenterDr) THEN        IF (setCenterDr) THEN
107  C--   Cell Center r-distances are defined:  C--   Cell Center r-distances are defined:
108         DO k=1,Nr         DO k=1,Nr+1
109           drC(k) = delRc(k)           drC(k) = delRc(k)
110         ENDDO         ENDDO
111  C-    Check that all thickness are > 0 :  C-    Check that all thickness are > 0 :
# Line 123  C     assume Center at middle between 2 Line 127  C     assume Center at middle between 2
127         DO k=2,Nr         DO k=2,Nr
128           drC(k) = 0.5 _d 0 *(delR(k-1)+delR(k))           drC(k) = 0.5 _d 0 *(delR(k-1)+delR(k))
129         ENDDO         ENDDO
130           drC(Nr+1) = 0.5 _d 0 *delR(Nr)
131        ENDIF        ENDIF
132    
133  C---  Set r-position of  interFace (rF) and cell-Center (rC):  C---  Set r-position of  interFace (rF) and cell-Center (rC):
134        rF(1)    = Ro_SeaLevel  C --  Use top_Pres or seaLev_Z to set vertical axis position:
135        DO k=1,Nr  C OCN in Z: top_Pres(Ref) (= rhoConst*PhiRef(1)), seaLev_Z (=rF(1), @ the top)
136         rF(k+1) = rF(k)  + rkSign*drF(k)  C ATM in Z: top_Pres(Ref) (= rhoConst*PhiRef(1)), seaLev_Z (=rF(Nr+1), @ bottom)
137        ENDDO  C OCN in P: top_Pres (=rF(Nr+1)), seaLev_Z (<-> PhiRef(Nr+1)/g, @ the top)
138        rC(1)   = rF(1)   + rkSign*drC(1)  C ATM in P: top_Pres (=rF(Nr+1)), seaLev_Z (<-> PhiRef(1)/g, @ the bottom)
139        DO k=2,Nr        IF ( rF(1).EQ.UNSET_RS .AND.
140          rC(k) = rC(k-1) + rkSign*drC(k)       &     usingZCoords.AND.fluidIsWater ) THEN
141        ENDDO          rF(1) = seaLev_Z
142          ENDIF
143          IF ( rF(1).NE.UNSET_RS ) THEN
144            DO k=1,Nr
145              rF(k+1) = rF(k) + rkSign*drF(k)
146            ENDDO
147            rC(1)   = rF(1)   + rkSign*drC(1)
148            DO k=2,Nr
149              rC(k) = rC(k-1) + rkSign*drC(k)
150            ENDDO
151    c       IF ( usingPCoords ) THEN
152    c         top_Pres = rF(Nr+1)
153    c       ELSEIF ( fluidIsWater ) THEN
154    c         seaLev_Z = rF(1)
155    c       ELSE
156    c         seaLev_Z = rF(Nr+1)
157    c       ENDIF
158          ELSE
159            IF ( usingPCoords ) THEN
160              rF(Nr+1) = top_Pres
161            ELSE
162              rF(Nr+1) = seaLev_Z
163            ENDIF
164            DO k=Nr,1,-1
165              rF(k) = rF(k+1) - rkSign*drF(k)
166            ENDDO
167            rC(Nr) = rF(Nr+1) - rkSign*drC(Nr+1)
168            DO k=Nr,2,-1
169              rC(k-1) = rC(k) - rkSign*drC(k)
170            ENDDO
171          ENDIF
172    
173  C---  Check vertical discretization :  C---  Check vertical discretization :
174        checkRatio2 = 100.        checkRatio2 = 100.
# Line 160  c       write(0,*) 'rC=',rC Line 195  c       write(0,*) 'rC=',rC
195        ENDDO        ENDDO
196    
197  C-    Calculate reciprol vertical grid spacing :  C-    Calculate reciprol vertical grid spacing :
198        DO k=1,Nr        DO k=1,Nr+1
199         recip_drC(k)   = 1. _d 0/drC(k)         recip_drC(k)   = 1. _d 0/drC(k)
200          ENDDO
201          DO k=1,Nr
202         recip_drF(k)   = 1. _d 0/drF(k)         recip_drF(k)   = 1. _d 0/drF(k)
203        ENDDO        ENDDO
204    

Legend:
Removed from v.1.20  
changed lines
  Added in v.1.23

  ViewVC Help
Powered by ViewVC 1.1.22