- Timestamp:
- 2018-06-18T11:28:23+02:00 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk/src/OCE/stpctl.F90
r9671 r9808 32 32 PUBLIC stp_ctl ! routine called by step.F90 33 33 34 INTEGER :: idrun, idtime, idssh, idu, ids , istatus34 INTEGER :: idrun, idtime, idssh, idu, ids1, ids2, istatus 35 35 !!---------------------------------------------------------------------- 36 36 !! NEMO/OCE 4.0 , NEMO Consortium (2018) … … 63 63 INTEGER :: iih, ijh ! local integers 64 64 INTEGER :: iiu, iju, iku ! - - 65 INTEGER :: iis, ijs, iks ! - - 65 INTEGER :: iis1, ijs1, iks1 ! - - 66 INTEGER :: iis2, ijs2, iks2 ! - - 66 67 REAL(wp) :: zzz ! local real 67 INTEGER , DIMENSION(3) :: ilocu, ilocs 68 INTEGER , DIMENSION(3) :: ilocu, ilocs1, ilocs2 68 69 INTEGER , DIMENSION(2) :: iloch 69 REAL(wp), DIMENSION( 4) :: zmax70 REAL(wp), DIMENSION(5) :: zmax 70 71 CHARACTER(len=20) :: clname 71 72 !!---------------------------------------------------------------------- … … 86 87 istatus = NF90_DEF_DIM( idrun, 'time', NF90_UNLIMITED, idtime ) 87 88 istatus = NF90_DEF_VAR( idrun, 'abs_ssh_max', NF90_DOUBLE, (/ idtime /), idssh ) 88 istatus = NF90_DEF_VAR( idrun, 'abs_u_max', NF90_DOUBLE, (/ idtime /), idu ) 89 istatus = NF90_DEF_VAR( idrun, 's_min', NF90_DOUBLE, (/ idtime /), ids ) 89 istatus = NF90_DEF_VAR( idrun, 'abs_u_max', NF90_DOUBLE, (/ idtime /), idu ) 90 istatus = NF90_DEF_VAR( idrun, 's_min', NF90_DOUBLE, (/ idtime /), ids1 ) 91 istatus = NF90_DEF_VAR( idrun, 's_max', NF90_DOUBLE, (/ idtime /), ids2 ) 90 92 istatus = NF90_ENDDEF(idrun) 91 93 ENDIF … … 106 108 zmax(2) = MAXVAL( ABS( un(:,:,:) ) ) ! velocity max (zonal only) 107 109 zmax(3) = MAXVAL( -tsn(:,:,:,jp_sal) , mask = tmask(:,:,:) == 1._wp ) ! minus salinity max 108 zmax(4) = REAL( nstop , wp ) ! stop indicator 110 zmax(4) = MAXVAL( tsn(:,:,:,jp_sal) , mask = tmask(:,:,:) == 1._wp ) ! salinity max 111 zmax(5) = REAL( nstop , wp ) ! stop indicator 109 112 ! 110 113 IF( lk_mpp ) THEN 111 CALL mpp_max_multiple( zmax(:), 4) ! max over the global domain114 CALL mpp_max_multiple( zmax(:), 5 ) ! max over the global domain 112 115 ! 113 nstop = INT( zmax( 4) ) ! nstop indicator sheared among all local domains116 nstop = INT( zmax(5) ) ! nstop indicator sheared among all local domains 114 117 ENDIF 115 118 ! 116 119 IF( MOD( kt, nwrite ) == 1 .AND. lwp ) THEN 117 120 WRITE(numout,*) ' ==>> time-step= ', kt, ' |ssh| max: ', zmax(1), ' |U| max: ', zmax(2), & 118 & ' S min: ' , - zmax(3) 121 & ' S min: ' , - zmax(3), ' S max: ', zmax(4) 119 122 ENDIF 120 123 ! 121 IF ( zmax(1) > 15._wp .OR. & ! too large sea surface height ( > 10 m) 122 & zmax(2) > 10._wp .OR. & ! too large velocity ( > 10 m/s) 123 & zmax(3) >= 0._wp .OR. & ! negative or zero sea surface salinity 124 IF ( zmax(1) > 15._wp .OR. & ! too large sea surface height ( > 15 m ) 125 & zmax(2) > 10._wp .OR. & ! too large velocity ( > 10 m/s) 126 & zmax(3) >= 0._wp .OR. & ! negative or zero sea surface salinity 127 & zmax(4) >= 100._wp .OR. & ! too large sea surface salinity ( > 100 ) 128 & zmax(4) < 0._wp .OR. & ! too large sea surface salinity (keep this line for sea-ice) 124 129 & ISNAN( zmax(1) + zmax(2) + zmax(3) ) ) THEN ! NaN encounter in the tests 125 130 IF( lk_mpp ) THEN 126 CALL mpp_maxloc( ABS(sshn) , ssmask(:,:) , zzz, iih, ijh ) 127 CALL mpp_maxloc( ABS(un) , umask (:,:,:), zzz, iiu, iju, iku ) 128 CALL mpp_minloc( tsn(:,:,:,jp_sal), tmask (:,:,:), zzz, iis, ijs, iks ) 131 CALL mpp_maxloc( ABS(sshn) , ssmask(:,:) , zzz, iih , ijh ) 132 CALL mpp_maxloc( ABS(un) , umask (:,:,:), zzz, iiu , iju , iku ) 133 CALL mpp_minloc( tsn(:,:,:,jp_sal), tmask (:,:,:), zzz, iis1, ijs1, iks1 ) 134 CALL mpp_maxloc( tsn(:,:,:,jp_sal), tmask (:,:,:), zzz, iis2, ijs2, iks2 ) 129 135 ELSE 130 iloch = MINLOC( ABS( sshn(:,:) ) ) 131 ilocu = MAXLOC( ABS( un (:,:,:) ) ) 132 ilocs = MINLOC( tsn(:,:,:,jp_sal) , mask = tmask(:,:,:) == 1._wp ) 133 iih = iloch(1) + nimpp - 1 ; ijh = iloch(2) + njmpp - 1 134 iiu = ilocu(1) + nimpp - 1 ; iju = ilocu(2) + njmpp - 1 ; iku = ilocu(3) 135 iis = ilocs(1) + nimpp - 1 ; ijs = ilocs(2) + njmpp - 1 ; iks = ilocu(3) 136 iloch = MINLOC( ABS( sshn(:,:) ) ) 137 ilocu = MAXLOC( ABS( un (:,:,:) ) ) 138 ilocs1 = MINLOC( tsn(:,:,:,jp_sal) , mask = tmask(:,:,:) == 1._wp ) 139 ilocs2 = MAXLOC( tsn(:,:,:,jp_sal) , mask = tmask(:,:,:) == 1._wp ) 140 iih = iloch (1) + nimpp - 1 ; ijh = iloch (2) + njmpp - 1 141 iiu = ilocu (1) + nimpp - 1 ; iju = ilocu (2) + njmpp - 1 ; iku = ilocu (3) 142 iis1 = ilocs1(1) + nimpp - 1 ; ijs1 = ilocs1(2) + njmpp - 1 ; iks1 = ilocs1(3) 143 iis2 = ilocs2(1) + nimpp - 1 ; ijs2 = ilocs2(2) + njmpp - 1 ; iks2 = ilocs2(3) 136 144 ENDIF 137 145 IF(lwp) THEN 138 146 WRITE(numout,cform_err) 139 WRITE(numout,*) ' stp_ctl: |ssh| > 10 m or |U| > 10 m/s or S <= 0 orNaN encounter in the tests'147 WRITE(numout,*) ' stp_ctl: |ssh| > 10 m or |U| > 10 m/s or S <= 0 or S >= 100 or NaN encounter in the tests' 140 148 WRITE(numout,*) ' ======= ' 141 WRITE(numout,9100) kt, zmax(1), iih, ijh 142 WRITE(numout,9200) kt, zmax(2), iiu, iju, iku 143 WRITE(numout,9300) kt, - zmax(3), iis, ijs, iks 149 WRITE(numout,9100) kt, zmax(1), iih , ijh 150 WRITE(numout,9200) kt, zmax(2), iiu , iju , iku 151 WRITE(numout,9300) kt, - zmax(3), iis1, ijs1, iks1 152 WRITE(numout,9400) kt, zmax(4), iis2, ijs2, iks2 144 153 WRITE(numout,*) 145 154 WRITE(numout,*) ' output of last computed fields in output.abort.nc file' … … 153 162 9100 FORMAT (' kt=',i8,' |ssh| max: ',1pg11.4,', at i j : ',2i5) 154 163 9200 FORMAT (' kt=',i8,' |U| max: ',1pg11.4,', at i j k: ',3i5) 155 9300 FORMAT (' kt=',i8,' S min: ',1pg11.4,', at i j : ',3i5) 164 9300 FORMAT (' kt=',i8,' S min: ',1pg11.4,', at i j k: ',3i5) 165 9400 FORMAT (' kt=',i8,' S max: ',1pg11.4,', at i j k: ',3i5) 156 166 ! 157 167 ! !== run statistics ==! ("run.stat" file) 158 IF(lwp) WRITE(numrun,9 400) kt, zmax(1), zmax(2), - zmax(3)168 IF(lwp) WRITE(numrun,9500) kt, zmax(1), zmax(2), -zmax(3), zmax(4) 159 169 IF( lwm ) THEN 160 170 istatus = NF90_PUT_VAR( idrun, idssh, (/ zmax(1)/), (/kt/), (/1/) ) 161 171 istatus = NF90_PUT_VAR( idrun, idu, (/ zmax(2)/), (/kt/), (/1/) ) 162 istatus = NF90_PUT_VAR( idrun, ids, (/-zmax(3)/), (/kt/), (/1/) ) 172 istatus = NF90_PUT_VAR( idrun, ids1, (/-zmax(3)/), (/kt/), (/1/) ) 173 istatus = NF90_PUT_VAR( idrun, ids2, (/ zmax(4)/), (/kt/), (/1/) ) 163 174 IF( MOD( kt , 100 ) == 0 ) istatus = NF90_SYNC(idrun) 164 175 IF( kt == nitend ) istatus = NF90_CLOSE(idrun) 165 176 END IF 166 177 ! 167 9 400 FORMAT(' it :', i8, ' |ssh|_max: ', D23.16, ' |U|_max: ', D23.16,' S_min: ', D23.16)178 9500 FORMAT(' it :', i8, ' |ssh|_max: ', D23.16, ' |U|_max: ', D23.16,' S_min: ', D23.16,' S_max: ', D23.16) 168 179 ! 169 180 END SUBROUTINE stp_ctl
Note: See TracChangeset
for help on using the changeset viewer.