File indexing completed on 2022-02-22 06:09:32 UTC
view on githubraw file Latest commit 16cc32c7 on 2022-02-21 18:12:34 UTC
813a6901ae Dani*0001 #include "STREAMICE_OPTIONS.h"
16cc32c739 Mart*0002 #ifdef ALLOW_AUTODIFF
0003 # include "AUTODIFF_OPTIONS.h"
0004 #endif
813a6901ae Dani*0005
0006
0007
0008
0fbff46b46 dngo*0009 SUBROUTINE STREAMICE_GET_VEL_RESID_ERR ( err_max,
0010 #ifdef ALLOW_AUTODIFF_TAMC
0011 I ikey_nl,
0012 #endif
0013 I myThid )
813a6901ae Dani*0014
0015
0016
0017
0018
0019
0020 IMPLICIT NONE
0021
0022
0023 #include "SIZE.h"
0024 #include "EEPARAMS.h"
0025 #include "PARAMS.h"
0026 #include "STREAMICE.h"
0027 #include "STREAMICE_CG.h"
0028
0029
0030 _RL err_max
0fbff46b46 dngo*0031 #ifdef ALLOW_AUTODIFF_TAMC
0032 INTEGER ikey_nl
0033 #endif
0034 INTEGER myThid
1705d3e404 Jean*0035
813a6901ae Dani*0036 #ifdef ALLOW_STREAMICE
0037
0fbff46b46 dngo*0038 INTEGER i, j, bi, bj
1705d3e404 Jean*0039
0040 _RL err_tempu, err_tempv
bbd6229661 Dani*0041 _RL err_sum
0042 _RL err_sum_tile (nSx,nSy)
813a6901ae Dani*0043
0044 err_max = 0. _d 0
bbd6229661 Dani*0045 err_sum = 0. _d 0
0046
0047 DO bj = myByLo(myThid), myByHi(myThid)
0048 DO bi = myBxLo(myThid), myBxHi(myThid)
0fbff46b46 dngo*0049 err_sum_tile(bi,bj) = 0. _d 0
bbd6229661 Dani*0050 ENDDO
0051 ENDDO
813a6901ae Dani*0052
0053 DO bj = myByLo(myThid), myByHi(myThid)
0054 DO bi = myBxLo(myThid), myBxHi(myThid)
0055 DO j=1,sNy
1705d3e404 Jean*0056 DO i=1,sNx
813a6901ae Dani*0057 Au_SI (i,j,bi,bj) = 0. _d 0
0058 Av_SI (i,j,bi,bj) = 0. _d 0
0059 ubd_SI (i,j,bi,bj) = 0. _d 0
1705d3e404 Jean*0060 vbd_SI (i,j,bi,bj) = 0. _d 0
813a6901ae Dani*0061 ENDDO
0062 ENDDO
0063 ENDDO
0064 ENDDO
0065
0066 CALL STREAMICE_CG_BOUND_VALS( myThid,
0067 O ubd_SI,
0068 O vbd_SI)
0069
0070 CALL STREAMICE_CG_ACTION( myThid,
0071 O Au_SI,
0072 O Av_SI,
0073 I U_streamice,
0074 I V_streamice,
0075 I 0, sNx+1, 0, sNy+1 )
0076
0fbff46b46 dngo*0077 IF (streamice_err_norm .LT. 1.0) then
bbd6229661 Dani*0078
813a6901ae Dani*0079 DO bj = myByLo(myThid), myByHi(myThid)
0080 DO bi = myBxLo(myThid), myBxHi(myThid)
0081 DO j=1,sNy
0082 DO i=1,sNx
0fbff46b46 dngo*0083 #ifdef ALLOW_AUTODIFF_TAMC
0084
0085 #endif
813a6901ae Dani*0086 err_tempu = 0. _d 0
0087 err_tempv = 0. _d 0
0088 IF (STREAMICE_umask(i,j,bi,bj).eq.1) THEN
0089 err_tempu =
0090 & ABS (Au_SI(i,j,bi,bj)+0*ubd_SI(i,j,bi,bj) -
0091 & taudx_SI(i,j,bi,bj))
0092 ENDIF
0093 IF (STREAMICE_vmask(i,j,bi,bj).eq.1) THEN
0094 err_tempv = MAX( err_tempu,
0095 & ABS (Av_SI(i,j,bi,bj)+0*vbd_SI(i,j,bi,bj) -
0096 & taudy_SI(i,j,bi,bj)))
0097 ENDIF
0098 IF (err_tempv .ge. err_max) THEN
0099 err_max = err_tempv
0100 ENDIF
0101 ENDDO
0102 ENDDO
0103 ENDDO
0104 ENDDO
0105
0106 CALL GLOBAL_MAX_R8 (err_max, myThid)
0107
bbd6229661 Dani*0108 ELSE
0109
0110 DO bj = myByLo(myThid), myByHi(myThid)
0111 DO bi = myBxLo(myThid), myBxHi(myThid)
0112 DO j=1,sNy
0113 DO i=1,sNx
0114
0115 IF (STREAMICE_umask(i,j,bi,bj).eq.1) THEN
0fbff46b46 dngo*0116 err_sum_tile(bi,bj) = err_sum_tile(bi,bj) +
bbd6229661 Dani*0117 & (ABS (Au_SI(i,j,bi,bj)+0*ubd_SI(i,j,bi,bj) -
0118 & taudx_SI(i,j,bi,bj))) ** streamice_err_norm
0119 ENDIF
0120 IF (STREAMICE_vmask(i,j,bi,bj).eq.1) THEN
0fbff46b46 dngo*0121 err_sum_tile(bi,bj) = err_sum_tile(bi,bj) +
bbd6229661 Dani*0122 & (ABS (Av_SI(i,j,bi,bj)+0*vbd_SI(i,j,bi,bj) -
0123 & taudy_SI(i,j,bi,bj))) ** streamice_err_norm
0124 ENDIF
0fbff46b46 dngo*0125
bbd6229661 Dani*0126 ENDDO
0127 ENDDO
0128 ENDDO
0129 ENDDO
0130
0131 CALL GLOBAL_SUM_TILE_RL( err_sum_tile, err_sum, myThid )
0132
0133 err_max = err_sum ** (1./streamice_err_norm)
0134
0135 ENDIF
0136
813a6901ae Dani*0137 #endif
0138 RETURN
0139 END