/[MITgcm]/MITgcm/pkg/streamice/streamice_get_vel_fp_err.F
ViewVC logotype

Annotation of /MITgcm/pkg/streamice/streamice_get_vel_fp_err.F

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


Revision 1.7 - (hide annotations) (download)
Fri Mar 18 19:18:29 2016 UTC (8 years, 3 months ago) by dgoldberg
Branch: MAIN
CVS Tags: checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65v, checkpoint65w, HEAD
Changes since 1.6: +51 -2 lines
allow for differing error norms in nonlinear iteration

1 dgoldberg 1.7 C $Header: /u/gcmpack/MITgcm/pkg/streamice/streamice_get_vel_fp_err.F,v 1.6 2015/03/23 14:07:16 dgoldberg Exp $
2 dgoldberg 1.1 C $Name: $
3    
4     #include "STREAMICE_OPTIONS.h"
5    
6     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7    
8     CBOP
9     SUBROUTINE STREAMICE_GET_VEL_FP_ERR ( err_max, myThid )
10     C /============================================================\
11     C | SUBROUTINE |
12     C | o |
13     C |============================================================|
14     C | |
15     C \============================================================/
16     IMPLICIT NONE
17    
18     C === Global variables ===
19     #include "SIZE.h"
20     #include "EEPARAMS.h"
21     #include "PARAMS.h"
22     #include "STREAMICE.h"
23     #include "STREAMICE_CG.h"
24 dgoldberg 1.4
25 dgoldberg 1.1
26     C !INPUT/OUTPUT ARGUMENTS
27     _RL err_max
28     INTEGER myThid
29 jmc 1.3
30 dgoldberg 1.1 #ifdef ALLOW_STREAMICE
31    
32     INTEGER conv_flag, i, j, bi, bj
33 jmc 1.3
34 dgoldberg 1.1 INTEGER ikey_nl
35 jmc 1.3 _RL err_tempu, err_tempv
36 dgoldberg 1.1 _RL max_vel, tempu, tempv, err_lastchange, cgtol
37 dgoldberg 1.7
38     _RL err_sum
39     _RL err_sum_tile (nSx,nSy)
40    
41 dgoldberg 1.1
42     err_max = 0. _d 0
43 dgoldberg 1.7 err_sum = 0. _d 0
44    
45     DO bj = myByLo(myThid), myByHi(myThid)
46     DO bi = myBxLo(myThid), myBxHi(myThid)
47     err_sum_tile(bi,bj) = 0. _d 0
48     ENDDO
49     ENDDO
50    
51     if (streamice_err_norm .lt. 1.0) then
52 dgoldberg 1.1
53     DO bj = myByLo(myThid), myByHi(myThid)
54     DO bi = myBxLo(myThid), myBxHi(myThid)
55     DO j=1,sNy
56     DO i=1,sNx
57     err_tempu = 0. _d 0
58     err_tempv = 0. _d 0
59     IF (STREAMICE_umask(i,j,bi,bj).eq.1) THEN
60     err_tempu =
61 dgoldberg 1.6 #ifdef ALLOW_STREAMICE_OAD_FP
62     & ABS (U_streamice(i,j,bi,bj)-u_new_SI(i,j,bi,bj))
63     #else
64 dgoldberg 1.1 & ABS (U_streamice(i,j,bi,bj)-u_old_SI(i,j,bi,bj))
65 dgoldberg 1.6 #endif
66 dgoldberg 1.1 ENDIF
67     IF (STREAMICE_vmask(i,j,bi,bj).eq.1) THEN
68     err_tempv = MAX( err_tempu,
69 dgoldberg 1.6 #ifdef ALLOW_STREAMICE_OAD_FP
70     & ABS (V_streamice(i,j,bi,bj)-v_new_SI(i,j,bi,bj)))
71     #else
72 dgoldberg 1.1 & ABS (V_streamice(i,j,bi,bj)-v_old_SI(i,j,bi,bj)))
73 dgoldberg 1.6 #endif
74 dgoldberg 1.1 ENDIF
75     IF (err_tempv .ge. err_max) err_max = err_tempv
76     ENDDO
77     ENDDO
78     ENDDO
79     ENDDO
80    
81 dgoldberg 1.2 CALL GLOBAL_MAX_R8 (err_max, myThid)
82 dgoldberg 1.1
83 dgoldberg 1.7 ELSE
84    
85     DO bj = myByLo(myThid), myByHi(myThid)
86     DO bi = myBxLo(myThid), myBxHi(myThid)
87     DO j=1,sNy
88     DO i=1,sNx
89     IF (STREAMICE_umask(i,j,bi,bj).eq.1) THEN
90     err_sum_tile(bi,bj) = err_sum_tile(bi,bj) +
91     #ifdef ALLOW_STREAMICE_OAD_FP
92     & (ABS(U_streamice(i,j,bi,bj)-
93     & u_new_SI(i,j,bi,bj)))**streamice_err_norm
94     #else
95     & (ABS(U_streamice(i,j,bi,bj)-
96     & u_old_SI(i,j,bi,bj)))**streamice_err_norm
97     #endif
98     ENDIF
99     IF (STREAMICE_vmask(i,j,bi,bj).eq.1) THEN
100     err_sum_tile(bi,bj) = err_sum_tile(bi,bj) +
101     #ifdef ALLOW_STREAMICE_OAD_FP
102     & (ABS(v_streamice(i,j,bi,bj)-
103     & v_new_SI(i,j,bi,bj)))**streamice_err_norm
104     #else
105     & (ABS(v_streamice(i,j,bi,bj)-
106     & v_old_SI(i,j,bi,bj)))**streamice_err_norm
107     #endif
108     ENDIF
109     ENDDO
110     ENDDO
111     ENDDO
112     ENDDO
113    
114     CALL GLOBAL_SUM_TILE_RL( err_sum_tile, err_sum, myThid )
115    
116     err_max = err_sum ** (1./streamice_err_norm)
117    
118     ENDIF
119    
120 dgoldberg 1.1 #endif
121     RETURN
122     END

  ViewVC Help
Powered by ViewVC 1.1.22