- Timestamp:
- 2020-07-04T12:40:46+02:00 (4 years ago)
- Location:
- NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl
- Files:
-
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/cfgs/AGRIF_DEMO/EXPREF/1_namelist_cfg
r12206 r13250 353 353 &namzdf_tke ! turbulent eddy kinetic dependent vertical diffusion (ln_zdftke =T) 354 354 !----------------------------------------------------------------------- 355 rn_eice = 0 ! below sea ice: =0 ON ; =4 OFF when ice fraction > 1/4356 355 / 357 356 !!====================================================================== -
NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/OCE/C1D/step_c1d.F90
r12955 r13250 83 83 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 84 84 CALL dia_wri( kstp ) ! ocean model: outputs 85 IF( lk_diahth ) CALL dia_hth( kstp ) ! Thermocline depth (20°C)85 CALL dia_hth( kstp ) ! Thermocline depth (20 degres isotherm depth) 86 86 87 87 -
NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/OCE/DIA/diaar5.F90
r12631 r13250 76 76 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zarea_ssh , zbotpres ! 2D workspace 77 77 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zpe, z2d ! 2D workspace 78 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zrhd , z rhop, ztpot! 3D workspace78 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zrhd , ztpot ! 3D workspace 79 79 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) :: ztsn ! 4D workspace 80 80 … … 86 86 IF( l_ar5 ) THEN 87 87 ALLOCATE( zarea_ssh(jpi,jpj), zbotpres(jpi,jpj), z2d(jpi,jpj) ) 88 ALLOCATE( zrhd(jpi,jpj,jpk) , zrhop(jpi,jpj,jpk))88 ALLOCATE( zrhd(jpi,jpj,jpk) ) 89 89 ALLOCATE( ztsn(jpi,jpj,jpk,jpts) ) 90 90 zarea_ssh(:,:) = e1e2t(:,:) * sshn(:,:) … … 156 156 157 157 ! ! steric sea surface height 158 CALL eos( tsn, zrhd, zrhop, gdept_n(:,:,:) ) ! now in situ and potential density159 zrhop(:,:,jpk) = 0._wp160 CALL iom_put( 'rhop', zrhop )161 !162 158 zbotpres(:,:) = 0._wp ! no atmospheric surface pressure, levitating sea-ice 163 159 DO jk = 1, jpkm1 164 zbotpres(:,:) = zbotpres(:,:) + e3t_n(:,:,jk) * zrhd(:,:,jk)160 zbotpres(:,:) = zbotpres(:,:) + e3t_n(:,:,jk) * rhd(:,:,jk) 165 161 END DO 166 162 IF( ln_linssh ) THEN … … 169 165 DO jj = 1,jpj 170 166 iks = mikt(ji,jj) 171 zbotpres(ji,jj) = zbotpres(ji,jj) + sshn(ji,jj) * zrhd(ji,jj,iks) + riceload(ji,jj)167 zbotpres(ji,jj) = zbotpres(ji,jj) + sshn(ji,jj) * rhd(ji,jj,iks) + riceload(ji,jj) 172 168 END DO 173 169 END DO 174 170 ELSE 175 zbotpres(:,:) = zbotpres(:,:) + sshn(:,:) * zrhd(:,:,1)171 zbotpres(:,:) = zbotpres(:,:) + sshn(:,:) * rhd(:,:,1) 176 172 END IF 177 173 END IF … … 310 306 IF( l_ar5 ) THEN 311 307 DEALLOCATE( zarea_ssh , zbotpres, z2d ) 312 DEALLOCATE( zrhd , zrhop)313 DEALLOCATE( ztsn 308 DEALLOCATE( zrhd ) 309 DEALLOCATE( ztsn ) 314 310 ENDIF 315 311 ! … … 392 388 IF( iom_use( 'voltot' ) .OR. iom_use( 'sshtot' ) .OR. iom_use( 'sshdyn' ) .OR. & 393 389 & iom_use( 'masstot' ) .OR. iom_use( 'temptot' ) .OR. iom_use( 'saltot' ) .OR. & 394 & iom_use( 'botpres' ) .OR. iom_use( 'sshthster' ) .OR. iom_use( 'sshsteric' ) ) L_ar5 = .TRUE. 390 & iom_use( 'botpres' ) .OR. iom_use( 'sshthster' ) .OR. iom_use( 'sshsteric' ) .OR. & 391 & iom_use( 'rhop' ) ) L_ar5 = .TRUE. 395 392 396 393 IF( l_ar5 ) THEN -
NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/OCE/DIA/diawri.F90
r12494 r13250 167 167 CALL iom_put( "sbs", z2d ) ! bottom salinity 168 168 ENDIF 169 170 CALL iom_put( "rhop", rhop(:,:,:) ) ! 3D potential density (sigma0) 169 171 170 172 IF ( iom_use("taubot") ) THEN ! bottom stress -
NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/OCE/DOM/istate.F90
r10499 r13250 24 24 USE dom_oce ! ocean space and time domain 25 25 USE daymod ! calendar 26 USE divhor ! horizontal divergence (div_hor routine)27 26 USE dtatsd ! data temperature and salinity (dta_tsd routine) 28 27 USE dtauvd ! data: U & V current (dta_uvd routine) … … 123 122 un (:,:,:) = ub (:,:,:) 124 123 vn (:,:,:) = vb (:,:,:) 125 hdivn(:,:,jpk) = 0._wp ! bottom divergence set one for 0 to zero at jpk level126 CALL div_hor( 0 ) ! compute interior hdivn value127 !!gm hdivn(:,:,:) = 0._wp128 124 129 125 !!gm POTENTIAL BUG : -
NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/OCE/DYN/dynhpg.F90
r11536 r13250 1027 1027 DO jj = 1, jpj 1028 1028 DO ji = 1, jpi 1029 jk = mbkt(ji,jj) +11030 IF( jk <= 0) THEN ; zrhh(ji,jj, : ) = 0._wp1031 ELSEIF( jk == 1) THEN ; zrhh(ji,jj,jk+1:jpk) = rhd(ji,jj,jk)1029 jk = mbkt(ji,jj) 1030 IF( jk <= 1 ) THEN ; zrhh(ji,jj, : ) = 0._wp 1031 ELSEIF( jk == 2 ) THEN ; zrhh(ji,jj,jk+1:jpk) = rhd(ji,jj,jk) 1032 1032 ELSEIF( jk < jpkm1 ) THEN 1033 1033 DO jkk = jk+1, jpk 1034 1034 zrhh(ji,jj,jkk) = interp1(gde3w_n(ji,jj,jkk ), gde3w_n(ji,jj,jkk-1), & 1035 & gde3w_n(ji,jj,jkk-2), rhd (ji,jj,jkk-1), rhd(ji,jj,jkk-2))1035 & gde3w_n(ji,jj,jkk-2), zrhh (ji,jj,jkk-1), zrhh(ji,jj,jkk-2)) 1036 1036 END DO 1037 1037 ENDIF -
NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/OCE/ICB/icbrst.F90
r11536 r13250 189 189 ! 190 190 INTEGER :: jn ! dummy loop index 191 INTEGER :: idg ! number of digits 191 192 INTEGER :: ix_dim, iy_dim, ik_dim, in_dim 192 193 CHARACTER(len=256) :: cl_path 193 194 CHARACTER(len=256) :: cl_filename 195 CHARACTER(len=8 ) :: cl_kt 196 CHARACTER(LEN=12 ) :: clfmt ! writing format 194 197 TYPE(iceberg), POINTER :: this 195 198 TYPE(point) , POINTER :: pt … … 206 209 cl_path = TRIM(cn_ocerst_outdir) 207 210 IF( cl_path(LEN_TRIM(cl_path):) /= '/' ) cl_path = TRIM(cl_path) // '/' 211 WRITE(cl_kt, '(i8.8)') kt 212 cl_filename = TRIM(cexper)//"_icebergs_"//cl_kt//"_restart" 208 213 IF( lk_mpp ) THEN 209 WRITE(cl_filename,'(A,"_icebergs_",I8.8,"_restart_",I4.4,".nc")') TRIM(cexper), kt, narea-1 214 idg = MAX( INT(LOG10(REAL(MAX(1,jpnij-1),wp))) + 1, 4 ) ! how many digits to we need to write? min=4, max=9 215 WRITE(clfmt, "('(a,a,i', i1, '.', i1, ',a)')") idg, idg ! '(a,a,ix.x,a)' 216 WRITE(cl_filename, clfmt) TRIM(cl_filename), '_', narea-1, '.nc' 210 217 ELSE 211 WRITE(cl_filename,'( A,"_icebergs_",I8.8,"_restart.nc")') TRIM(cexper), kt218 WRITE(cl_filename,'(a,a)') TRIM(cl_filename), '.nc' 212 219 ENDIF 213 220 IF ( lwp .AND. nn_verbose_level >= 0) WRITE(numout,'(2a)') 'icebergs, write_restart: creating ', & -
NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/OCE/ICB/icbtrj.F90
r10068 r13250 62 62 ! 63 63 INTEGER :: iret, iyear, imonth, iday 64 INTEGER :: idg ! number of digits 64 65 REAL(wp) :: zfjulday, zsec 65 66 CHARACTER(len=80) :: cl_filename 66 CHARACTER(LEN=20) :: cldate_ini, cldate_end 67 CHARACTER(LEN=8 ) :: cldate_ini, cldate_end 68 CHARACTER(LEN=12) :: clfmt ! writing format 67 69 TYPE(iceberg), POINTER :: this 68 70 TYPE(point) , POINTER :: pt … … 80 82 81 83 ! define trajectory output name 82 IF ( lk_mpp ) THEN ; WRITE(cl_filename,'("trajectory_icebergs_",A,"-",A,"_",I4.4,".nc")') & 83 & TRIM(ADJUSTL(cldate_ini)), TRIM(ADJUSTL(cldate_end)), narea-1 84 ELSE ; WRITE(cl_filename,'("trajectory_icebergs_",A,"-",A ,".nc")') & 85 & TRIM(ADJUSTL(cldate_ini)), TRIM(ADJUSTL(cldate_end)) 84 cl_filename = 'trajectory_icebergs_'//cldate_ini//'-'//cldate_end 85 IF ( lk_mpp ) THEN 86 idg = MAX( INT(LOG10(REAL(MAX(1,jpnij-1),wp))) + 1, 4 ) ! how many digits to we need to write? min=4, max=9 87 WRITE(clfmt, "('(a,a,i', i1, '.', i1, ',a)')") idg, idg ! '(a,a,ix.x,a)' 88 WRITE(cl_filename, clfmt) TRIM(cl_filename), '_', narea-1, '.nc' 89 ELSE 90 WRITE(cl_filename,'(a,a)') TRIM(cl_filename), '.nc' 86 91 ENDIF 87 92 IF( lwp .AND. nn_verbose_level >= 0 ) WRITE(numout,'(2a)') 'icebergs, icb_trj_init: creating ',TRIM(cl_filename) -
NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/OCE/IOM/iom_def.F90
r10425 r13250 33 33 INTEGER, PARAMETER, PUBLIC :: jpmax_vars = 1200 !: maximum number of variables in one file 34 34 INTEGER, PARAMETER, PUBLIC :: jpmax_dims = 4 !: maximum number of dimensions for one variable 35 INTEGER, PARAMETER, PUBLIC :: jpmax_digits = 5!: maximum number of digits for the cpu number in the file name35 INTEGER, PARAMETER, PUBLIC :: jpmax_digits = 9 !: maximum number of digits for the cpu number in the file name 36 36 37 37 -
NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/OCE/IOM/iom_nf90.F90
r11536 r13250 60 60 CHARACTER(LEN=256) :: clinfo ! info character 61 61 CHARACTER(LEN=256) :: cltmp ! temporary character 62 CHARACTER(LEN=12 ) :: clfmt ! writing format 63 INTEGER :: idg ! number of digits 62 64 INTEGER :: iln ! lengths of character 63 65 INTEGER :: istop ! temporary storage of nstop … … 69 71 INTEGER :: ihdf5 ! local variable for retrieval of value for NF90_HDF5 70 72 LOGICAL :: llclobber ! local definition of ln_clobber 71 INTEGER :: ilevels 73 INTEGER :: ilevels ! vertical levels 72 74 !--------------------------------------------------------------------- 73 75 ! … … 104 106 IF( ldwrt ) THEN !* the file should be open in write mode so we create it... 105 107 IF( jpnij > 1 ) THEN 106 WRITE(cltmp,'(a,a,i4.4,a)') cdname(1:iln-1), '_', narea-1, '.nc' 108 idg = MAX( INT(LOG10(REAL(MAX(1,jpnij-1),wp))) + 1, 4 ) ! how many digits to we need to write? min=4, max=9 109 WRITE(clfmt, "('(a,a,i', i1, '.', i1, ',a)')") idg, idg ! '(a,a,ix.x,a)' 110 WRITE(cltmp,clfmt) cdname(1:iln-1), '_', narea-1, '.nc' 107 111 cdname = TRIM(cltmp) 108 112 ENDIF -
NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/OCE/LBC/lib_mpp.F90
r13014 r13250 1190 1190 ! 1191 1191 CHARACTER(len=80) :: clfile 1192 CHARACTER(LEN=10) :: clfmt ! writing format 1192 1193 INTEGER :: iost 1194 INTEGER :: idg ! number of digits 1193 1195 !!---------------------------------------------------------------------- 1194 1196 ! … … 1197 1199 clfile = TRIM(cdfile) 1198 1200 IF( PRESENT( karea ) ) THEN 1199 IF( karea > 1 ) WRITE(clfile, "(a,'_',i4.4)") TRIM(clfile), karea-1 1201 IF( karea > 1 ) THEN 1202 ! Warning: jpnij is maybe not already defined when calling ctl_opn -> use mppsize instead of jpnij 1203 idg = MAX( INT(LOG10(REAL(MAX(1,mppsize-1),wp))) + 1, 4 ) ! how many digits to we need to write? min=4, max=9 1204 WRITE(clfmt, "('(a,a,i', i1, '.', i1, ')')") idg, idg ! '(a,a,ix.x)' 1205 WRITE(clfile, clfmt) TRIM(clfile), '_', karea-1 1206 ENDIF 1200 1207 ENDIF 1201 1208 #if defined key_agrif -
NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/OCE/SBC/sbccpl.F90
r13004 r13250 1855 1855 ENDDO 1856 1856 ELSE 1857 qns_tot(:,:) =qns_tot(:,:) + picefr(:,:) * frcv(jpr_qnsice)%z3(:,:,1)1857 zqns_tot(:,:) = zqns_tot(:,:) + picefr(:,:) * frcv(jpr_qnsice)%z3(:,:,1) 1858 1858 DO jl = 1, jpl 1859 zqns_tot(:,: ) = zqns_tot(:,:) + picefr(:,:) * frcv(jpr_qnsice)%z3(:,:,1)1860 1859 zqns_ice(:,:,jl) = frcv(jpr_qnsice)%z3(:,:,1) 1861 1860 END DO … … 1999 1998 END DO 2000 1999 ELSE 2001 qsr_tot(:,: ) =qsr_tot(:,:) + picefr(:,:) * frcv(jpr_qsrice)%z3(:,:,1)2000 zqsr_tot(:,:) = zqsr_tot(:,:) + picefr(:,:) * frcv(jpr_qsrice)%z3(:,:,1) 2002 2001 DO jl = 1, jpl 2003 zqsr_tot(:,: ) = zqsr_tot(:,:) + picefr(:,:) * frcv(jpr_qsrice)%z3(:,:,1)2004 2002 zqsr_ice(:,:,jl) = frcv(jpr_qsrice)%z3(:,:,1) 2005 2003 END DO -
NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/OCE/TRD/trdtra.F90
r10425 r13250 81 81 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in), OPTIONAL :: ptra ! now tracer variable 82 82 ! 83 INTEGER :: jk ! loop indices 83 INTEGER :: jk ! loop indices 84 INTEGER :: i01 ! 0 or 1 84 85 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ztrds ! 3D workspace 85 86 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zwt, zws, ztrdt ! 3D workspace … … 89 90 IF( trd_tra_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'trd_tra : unable to allocate arrays' ) 90 91 ENDIF 91 92 ! 93 i01 = COUNT( (/ PRESENT(pun) .OR. ( ktrd /= jptra_xad .AND. ktrd /= jptra_yad .AND. ktrd /= jptra_zad ) /) ) 94 ! 92 95 IF( ctype == 'TRA' .AND. ktra == jp_tem ) THEN !== Temperature trend ==! 93 96 ! 94 SELECT CASE( ktrd )97 SELECT CASE( ktrd*i01 ) 95 98 ! ! advection: transform the advective flux into a trend 96 99 CASE( jptra_xad ) ; CALL trd_tra_adv( ptrd, pun, ptra, 'X', trdtx ) … … 111 114 IF( ctype == 'TRA' .AND. ktra == jp_sal ) THEN !== Salinity trends ==! 112 115 ! 113 SELECT CASE( ktrd )116 SELECT CASE( ktrd*i01 ) 114 117 ! ! advection: transform the advective flux into a trend 115 118 ! ! and send T & S trends to trd_tra_mng … … 162 165 IF( ctype == 'TRC' ) THEN !== passive tracer trend ==! 163 166 ! 164 SELECT CASE( ktrd )167 SELECT CASE( ktrd*i01 ) 165 168 ! ! advection: transform the advective flux into a masked trend 166 169 CASE( jptra_xad ) ; CALL trd_tra_adv( ptrd , pun , ptra, 'X', ztrds ) -
NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/OCE/stpctl.F90
r13014 r13250 66 66 REAL(wp), DIMENSION(9) :: zmax, zmaxlocal 67 67 LOGICAL :: ll_wrtstp, ll_colruns, ll_wrtruns 68 LOGICAL, DIMENSION(jpi,jpj,jpk) :: llmsk 68 69 CHARACTER(len=20) :: clname 69 70 !!---------------------------------------------------------------------- … … 111 112 ! 112 113 ! !== test of extrema ==! 114 ! 115 ! define zmax default value. needed for land processors 116 IF( ll_colruns ) THEN ! default value: must not be kept when calling mpp_max -> must be as small as possible 117 zmax(:) = -HUGE(1._wp) 118 ELSE ! default value: must not give true for any of the tests bellow (-> avoid manipulating HUGE...) 119 zmax(:) = 0._wp 120 zmax(3) = -1._wp ! avoid salinity minimum at 0. 121 ENDIF 122 ! 113 123 IF( ll_wd ) THEN 114 124 zmax(1) = MAXVAL( ABS( sshn(:,:) + ssh_ref*tmask(:,:,1) ) ) ! ssh max … … 117 127 ENDIF 118 128 zmax(2) = MAXVAL( ABS( un(:,:,:) ) ) ! velocity max (zonal only) 119 zmax(3) = MAXVAL( -tsn(:,:,:,jp_sal) , mask = tmask(:,:,:) == 1._wp ) ! minus salinity max 120 zmax(4) = MAXVAL( tsn(:,:,:,jp_sal) , mask = tmask(:,:,:) == 1._wp ) ! salinity max 121 IF( ll_colruns ) THEN ! following variables are used only in the netcdf file 122 zmax(5) = MAXVAL( -tsn(:,:,:,jp_tem) , mask = tmask(:,:,:) == 1._wp ) ! minus temperature max 123 zmax(6) = MAXVAL( tsn(:,:,:,jp_tem) , mask = tmask(:,:,:) == 1._wp ) ! temperature max 124 IF( ln_zad_Aimp ) THEN 125 zmax(8) = MAXVAL( ABS( wi(:,:,:) ) , mask = wmask(:,:,:) == 1._wp ) ! implicit vertical vel. max 126 zmax(9) = MAXVAL( Cu_adv(:,:,:) , mask = tmask(:,:,:) == 1._wp ) ! partitioning coeff. max 127 ELSE 128 zmax(8:9) = 0._wp 129 ENDIF 130 ELSE 131 zmax(5:9) = 0._wp 129 llmsk(:,:,:) = tmask(:,:,:) == 1._wp 130 IF( COUNT( llmsk(:,:,:) ) > 0 ) THEN ! avoid huge values sent back for land processors... 131 zmax(3) = MAXVAL( -tsn(:,:,:,jp_sal) , mask = llmsk ) ! minus salinity max 132 zmax(4) = MAXVAL( tsn(:,:,:,jp_sal) , mask = llmsk ) ! salinity max 133 IF( ll_colruns .OR. jpnij == 1 ) THEN ! following variables are used only in the netcdf file 134 zmax(5) = MAXVAL( -tsn(:,:,:,jp_tem) , mask = llmsk ) ! minus temperature max 135 zmax(6) = MAXVAL( tsn(:,:,:,jp_tem) , mask = llmsk ) ! temperature max 136 IF( ln_zad_Aimp ) THEN 137 zmax(9) = MAXVAL( Cu_adv(:,:,:) , mask = llmsk ) ! partitioning coeff. max 138 llmsk(:,:,:) = wmask(:,:,:) == 1._wp 139 IF( COUNT( llmsk(:,:,:) ) > 0 ) THEN ! avoid huge values sent back for land processors... 140 zmax(8) = MAXVAL( ABS( wi(:,:,:) ) , mask = wmask(:,:,:) == 1._wp ) ! implicit vertical vel. max 141 ENDIF 142 ENDIF 143 ENDIF 132 144 ENDIF 133 145 zmax(7) = REAL( nstop , wp ) ! stop indicator … … 200 212 ! 201 213 IF( ll_colruns .or. jpnij == 1 ) THEN ! all processes synchronized -> use lwp to print in opened ocean.output files 202 IF(lwp) CALL ctl_stop( ctmp1, ' ', ctmp2, ctmp3, ctmp4, ctmp5, ' ', ctmp6 ) 214 IF(lwp) THEN ; CALL ctl_stop( ctmp1, ' ', ctmp2, ctmp3, ctmp4, ctmp5, ' ', ctmp6 ) 215 ELSE ; nstop = MAX(1, nstop) ! make sure nstop > 0 (automatically done when calling ctl_stop) 216 ENDIF 203 217 ELSE ! only mpi subdomains with errors are here -> STOP now 204 218 CALL ctl_stop( 'STOP', ctmp1, ' ', ctmp2, ctmp3, ctmp4, ctmp5, ' ', ctmp6 ) 205 219 ENDIF 206 220 ! 207 IF( nstop == 0 ) nstop = 1 208 ngrdstop = Agrif_Fixed() 209 ! 221 ENDIF 222 ! 223 IF( nstop > 0 ) THEN ! an error was detected and we did not abort yet... 224 ngrdstop = Agrif_Fixed() ! store which grid got this error 225 IF( .NOT. ll_colruns .AND. jpnij > 1 ) CALL ctl_stop( 'STOP' ) ! we must abort here to avoid MPI deadlock 210 226 ENDIF 211 227 ! -
NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/tests/CANAL/MY_SRC/stpctl.F90
r13014 r13250 66 66 REAL(wp), DIMENSION(9) :: zmax, zmaxlocal 67 67 LOGICAL :: ll_wrtstp, ll_colruns, ll_wrtruns 68 LOGICAL, DIMENSION(jpi,jpj,jpk) :: llmsk 68 69 CHARACTER(len=20) :: clname 69 70 !!---------------------------------------------------------------------- … … 111 112 ! 112 113 ! !== test of extrema ==! 114 ! 115 ! define zmax default value. needed for land processors 116 IF( ll_colruns ) THEN ! default value: must not be kept when calling mpp_max -> must be as small as possible 117 zmax(:) = -HUGE(1._wp) 118 ELSE ! default value: must not give true for any of the tests bellow (-> avoid manipulating HUGE...) 119 zmax(:) = 0._wp 120 zmax(3) = -1._wp ! avoid salinity minimum at 0. 121 ENDIF 122 ! 113 123 IF( ll_wd ) THEN 114 124 zmax(1) = MAXVAL( ABS( sshn(:,:) + ssh_ref*tmask(:,:,1) ) ) ! ssh max … … 117 127 ENDIF 118 128 zmax(2) = MAXVAL( ABS( un(:,:,:) ) ) ! velocity max (zonal only) 119 zmax(3) = MAXVAL( -tsn(:,:,:,jp_sal) , mask = tmask(:,:,:) == 1._wp ) ! minus salinity max 120 zmax(4) = MAXVAL( tsn(:,:,:,jp_sal) , mask = tmask(:,:,:) == 1._wp ) ! salinity max 121 IF( ll_colruns ) THEN ! following variables are used only in the netcdf file 122 zmax(5) = MAXVAL( -tsn(:,:,:,jp_tem) , mask = tmask(:,:,:) == 1._wp ) ! minus temperature max 123 zmax(6) = MAXVAL( tsn(:,:,:,jp_tem) , mask = tmask(:,:,:) == 1._wp ) ! temperature max 124 IF( ln_zad_Aimp ) THEN 125 zmax(8) = MAXVAL( ABS( wi(:,:,:) ) , mask = wmask(:,:,:) == 1._wp ) ! implicit vertical vel. max 126 zmax(9) = MAXVAL( Cu_adv(:,:,:) , mask = tmask(:,:,:) == 1._wp ) ! partitioning coeff. max 127 ELSE 128 zmax(8:9) = 0._wp 129 ENDIF 130 ELSE 131 zmax(5:9) = 0._wp 129 llmsk(:,:,:) = tmask(:,:,:) == 1._wp 130 IF( COUNT( llmsk(:,:,:) ) > 0 ) THEN ! avoid huge values sent back for land processors... 131 zmax(3) = MAXVAL( -tsn(:,:,:,jp_sal) , mask = llmsk ) ! minus salinity max 132 zmax(4) = MAXVAL( tsn(:,:,:,jp_sal) , mask = llmsk ) ! salinity max 133 IF( ll_colruns .OR. jpnij == 1 ) THEN ! following variables are used only in the netcdf file 134 zmax(5) = MAXVAL( -tsn(:,:,:,jp_tem) , mask = llmsk ) ! minus temperature max 135 zmax(6) = MAXVAL( tsn(:,:,:,jp_tem) , mask = llmsk ) ! temperature max 136 IF( ln_zad_Aimp ) THEN 137 zmax(9) = MAXVAL( Cu_adv(:,:,:) , mask = llmsk ) ! partitioning coeff. max 138 llmsk(:,:,:) = wmask(:,:,:) == 1._wp 139 IF( COUNT( llmsk(:,:,:) ) > 0 ) THEN ! avoid huge values sent back for land processors... 140 zmax(8) = MAXVAL( ABS( wi(:,:,:) ) , mask = wmask(:,:,:) == 1._wp ) ! implicit vertical vel. max 141 ENDIF 142 ENDIF 143 ENDIF 132 144 ENDIF 133 145 zmax(7) = REAL( nstop , wp ) ! stop indicator … … 200 212 ! 201 213 IF( ll_colruns .or. jpnij == 1 ) THEN ! all processes synchronized -> use lwp to print in opened ocean.output files 202 IF(lwp) CALL ctl_stop( ctmp1, ' ', ctmp2, ctmp3, ctmp4, ctmp5, ' ', ctmp6 ) 214 IF(lwp) THEN ; CALL ctl_stop( ctmp1, ' ', ctmp2, ctmp3, ctmp4, ctmp5, ' ', ctmp6 ) 215 ELSE ; nstop = MAX(1, nstop) ! make sure nstop > 0 (automatically done when calling ctl_stop) 216 ENDIF 203 217 ELSE ! only mpi subdomains with errors are here -> STOP now 204 218 CALL ctl_stop( 'STOP', ctmp1, ' ', ctmp2, ctmp3, ctmp4, ctmp5, ' ', ctmp6 ) 205 219 ENDIF 206 220 ! 207 IF( nstop == 0 ) nstop = 1 208 ngrdstop = Agrif_Fixed() 209 ! 221 ENDIF 222 ! 223 IF( nstop > 0 ) THEN ! an error was detected and we did not abort yet... 224 ngrdstop = Agrif_Fixed() ! store which grid got this error 225 IF( .NOT. ll_colruns .AND. jpnij > 1 ) CALL ctl_stop( 'STOP' ) ! we must abort here to avoid MPI deadlock 210 226 ENDIF 211 227 !
Note: See TracChangeset
for help on using the changeset viewer.