- Timestamp:
- 2020-11-27T17:26:33+01:00 (4 years ago)
- Location:
- NEMO/branches/2020/tickets_icb_1900
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/tickets_icb_1900
- Property svn:externals
-
NEMO/branches/2020/tickets_icb_1900/tests/STATION_ASF/MY_SRC/nemogcm.F90
r13011 r13899 30 30 USE step_c1d ! Time stepping loop for the 1D configuration 31 31 ! 32 USE prtctl ! Print control 32 33 USE in_out_manager ! I/O manager 33 34 USE lib_mpp ! distributed memory computing … … 131 132 INTEGER :: ios, ilocal_comm ! local integers 132 133 !! 133 NAMELIST/namctl/ sn_cfctl, nn_print, nn_ictls, nn_ictle, & 134 & nn_isplt , nn_jsplt, nn_jctls, nn_jctle, & 135 & ln_timing, ln_diacfl 134 NAMELIST/namctl/ sn_cfctl, ln_timing, ln_diacfl, & 135 & nn_isplt, nn_jsplt, nn_ictls, nn_ictle, nn_jctls, nn_jctle 136 136 NAMELIST/namcfg/ ln_read_cfg, cn_domcfg, ln_closea, ln_write_cfg, cn_domcfg_out, ln_use_jattr 137 137 !!---------------------------------------------------------------------- … … 232 232 ! 233 233 IF( ln_read_cfg ) THEN ! Read sizes in domain configuration file 234 CALL domain_cfg ( cn_cfg, nn_cfg, jpiglo, jpjglo, jpkglo, jperio )234 CALL domain_cfg ( cn_cfg, nn_cfg, Ni0glo, Nj0glo, jpkglo, jperio ) 235 235 ELSE ! user-defined namelist 236 CALL usr_def_nam( cn_cfg, nn_cfg, jpiglo, jpjglo, jpkglo, jperio )236 CALL usr_def_nam( cn_cfg, nn_cfg, Ni0glo, Nj0glo, jpkglo, jperio ) 237 237 ENDIF 238 238 ! … … 306 306 WRITE(numout,*) ' sn_cfctl%procincr = ', sn_cfctl%procincr 307 307 WRITE(numout,*) ' sn_cfctl%ptimincr = ', sn_cfctl%ptimincr 308 WRITE(numout,*) ' level of print nn_print = ', nn_print309 WRITE(numout,*) ' Start i indice for SUM control nn_ictls = ', nn_ictls310 WRITE(numout,*) ' End i indice for SUM control nn_ictle = ', nn_ictle311 WRITE(numout,*) ' Start j indice for SUM control nn_jctls = ', nn_jctls312 WRITE(numout,*) ' End j indice for SUM control nn_jctle = ', nn_jctle313 WRITE(numout,*) ' number of proc. following i nn_isplt = ', nn_isplt314 WRITE(numout,*) ' number of proc. following j nn_jsplt = ', nn_jsplt315 308 WRITE(numout,*) ' timing by routine ln_timing = ', ln_timing 316 309 WRITE(numout,*) ' CFL diagnostics ln_diacfl = ', ln_diacfl 317 310 ENDIF 318 311 ! 319 nprint = nn_print ! convert DOCTOR namelist names into OLD names 320 nictls = nn_ictls 321 nictle = nn_ictle 322 njctls = nn_jctls 323 njctle = nn_jctle 324 isplt = nn_isplt 325 jsplt = nn_jsplt 326 312 IF( .NOT.ln_read_cfg ) ln_closea = .false. ! dealing possible only with a domcfg file 327 313 IF(lwp) THEN ! control print 328 314 WRITE(numout,*) … … 335 321 WRITE(numout,*) ' use file attribute if exists as i/p j-start ln_use_jattr = ', ln_use_jattr 336 322 ENDIF 337 IF( .NOT.ln_read_cfg ) ln_closea = .false. ! dealing possible only with a domcfg file338 !339 ! ! Parameter control340 !341 IF( sn_cfctl%l_prtctl .OR. sn_cfctl%l_prttrc ) THEN ! sub-domain area indices for the control prints342 IF( lk_mpp .AND. jpnij > 1 ) THEN343 isplt = jpni ; jsplt = jpnj ; ijsplt = jpni*jpnj ! the domain is forced to the real split domain344 ELSE345 IF( isplt == 1 .AND. jsplt == 1 ) THEN346 CALL ctl_warn( ' - isplt & jsplt are equal to 1', &347 & ' - the print control will be done over the whole domain' )348 ENDIF349 ijsplt = isplt * jsplt ! total number of processors ijsplt350 ENDIF351 IF(lwp) WRITE(numout,*)' - The total number of processors over which the'352 IF(lwp) WRITE(numout,*)' print control will be done is ijsplt : ', ijsplt353 !354 ! ! indices used for the SUM control355 IF( nictls+nictle+njctls+njctle == 0 ) THEN ! print control done over the default area356 lsp_area = .FALSE.357 ELSE ! print control done over a specific area358 lsp_area = .TRUE.359 IF( nictls < 1 .OR. nictls > jpiglo ) THEN360 CALL ctl_warn( ' - nictls must be 1<=nictls>=jpiglo, it is forced to 1' )361 nictls = 1362 ENDIF363 IF( nictle < 1 .OR. nictle > jpiglo ) THEN364 CALL ctl_warn( ' - nictle must be 1<=nictle>=jpiglo, it is forced to jpiglo' )365 nictle = jpiglo366 ENDIF367 IF( njctls < 1 .OR. njctls > jpjglo ) THEN368 CALL ctl_warn( ' - njctls must be 1<=njctls>=jpjglo, it is forced to 1' )369 njctls = 1370 ENDIF371 IF( njctle < 1 .OR. njctle > jpjglo ) THEN372 CALL ctl_warn( ' - njctle must be 1<=njctle>=jpjglo, it is forced to jpjglo' )373 njctle = jpjglo374 ENDIF375 ENDIF376 ENDIF377 323 ! 378 324 IF( 1._wp /= SIGN(1._wp,-0._wp) ) CALL ctl_stop( 'nemo_ctl: The intrinsec SIGN function follows f2003 standard.', & -
NEMO/branches/2020/tickets_icb_1900/tests/STATION_ASF/MY_SRC/stpctl.F90
r13136 r13899 47 47 !! 48 48 !! ** Method : - Save the time step in numstp 49 !! - Print it each 50 time steps50 49 !! - Stop the run IF problem encountered by setting nstop > 0 51 50 !! Problems checked: wind stress module max larger than 5 N/m^2 … … 66 65 REAL(wp) :: zzz ! local real 67 66 REAL(wp), DIMENSION(4) :: zmax, zmaxlocal 68 LOGICAL :: ll_wrtstp, ll_colruns, ll_wrtruns 67 LOGICAL :: ll_wrtstp, ll_colruns, ll_wrtruns, ll_0oce 69 68 LOGICAL, DIMENSION(jpi,jpj) :: llmsk 70 69 CHARACTER(len=20) :: clname … … 110 109 ! !== test of local extrema ==! 111 110 ! !== done by all processes at every time step ==! 112 llmsk(:,:) = tmask(:,:,1) == 1._wp 113 IF( COUNT( llmsk(:,:) ) > 0 ) THEN ! avoid huge values sent back for land processors... 114 zmax(1) = MAXVAL( taum(:,:) , mask = llmsk ) ! max wind stress module 115 zmax(2) = MAXVAL( ABS( qns(:,:) ) , mask = llmsk ) ! max non-solar heat flux 116 zmax(3) = MAXVAL( ABS( emp(:,:) ) , mask = llmsk ) ! max E-P 117 ELSE 118 IF( ll_colruns ) THEN ! default value: must not be kept when calling mpp_max -> must be as small as possible 119 zmax(1:3) = -HUGE(1._wp) 120 ELSE ! default value: must not give true for any of the tests bellow (-> avoid manipulating HUGE...) 121 zmax(1:3) = 0._wp 122 ENDIF 123 ENDIF 124 zmax(4) = REAL( nstop, wp ) ! stop indicator 111 ! 112 llmsk( 1:Nis1,:) = .FALSE. ! exclude halos from the checked region 113 llmsk(Nie1: jpi,:) = .FALSE. 114 llmsk(:, 1:Njs1) = .FALSE. 115 llmsk(:,Nje1: jpj) = .FALSE. 116 ! 117 llmsk(Nis0:Nie0,Njs0:Nje0) = tmask(Nis0:Nie0,Njs0:Nje0,1) == 1._wp ! test only the inner domain 118 ! 119 ll_0oce = .NOT. ANY( llmsk(:,:) ) ! no ocean point in the inner domain? 120 ! 121 zmax(1) = MAXVAL( taum(:,:) , mask = llmsk ) ! max wind stress module 122 zmax(2) = MAXVAL( ABS( qns(:,:) ), mask = llmsk ) ! max non-solar heat flux 123 zmax(3) = MAXVAL( ABS( emp(:,:) ), mask = llmsk ) ! max E-P 124 zmax(4) = REAL( nstop, wp ) ! stop indicator 125 ! 125 126 ! !== get global extrema ==! 126 127 ! !== done by all processes if writting run.stat ==! … … 129 130 CALL mpp_max( "stpctl", zmax ) ! max over the global domain 130 131 nstop = NINT( zmax(4) ) ! update nstop indicator (now sheared among all local domains) 131 ENDIF 132 ELSE 133 ! if no ocean point: MAXVAL returns -HUGE => we must overwrite this value to avoid error handling bellow. 134 IF( ll_0oce ) zmax(1:3) = 0._wp ! default "valid" values... 135 ENDIF 136 ! !== error handling ==! 132 137 ! !== write "run.stat" files ==! 133 138 ! !== done only by 1st subdomain at writting timestep ==! 134 139 IF( ll_wrtruns ) THEN 135 140 WRITE(numrun,9500) kt, zmax(1), zmax(2), zmax(3) 136 istatus = NF90_PUT_VAR( nrunid, nvarid(1), (/ zmax(1)/), (/kt/), (/1/) )137 istatus = NF90_PUT_VAR( nrunid, nvarid(2), (/ zmax(2)/), (/kt/), (/1/) )138 istatus = NF90_PUT_VAR( nrunid, nvarid(3), (/ zmax(3)/), (/kt/), (/1/) )141 DO ji = 1, 3 142 istatus = NF90_PUT_VAR( nrunid, nvarid(ji), (/zmax(ji)/), (/kt/), (/1/) ) 143 END DO 139 144 IF( kt == nitend ) istatus = NF90_CLOSE(nrunid) 140 145 END IF … … 153 158 IF( lwm .AND. kt /= nitend ) istatus = NF90_CLOSE(nrunid) 154 159 ! get global loc on the min/max 155 CALL mpp_maxloc( 'stpctl', taum(:,:) , tmask(:,:,1), zzz, iloc(1:2,1) ) ! mpp_maxloc ok if mask = F156 CALL mpp_maxloc( 'stpctl',ABS( qns(:,:) ), tmask(:,:,1), zzz, iloc(1:2,2) )157 CALL mpp_minloc( 'stpctl',ABS( emp(:,:) ), tmask(:,:,1), zzz, iloc(1:2,3) )160 CALL mpp_maxloc( 'stpctl', taum(:,:) , llmsk, zzz, iloc(1:2,1) ) ! mpp_maxloc ok if mask = F 161 CALL mpp_maxloc( 'stpctl',ABS( qns(:,:) ), llmsk, zzz, iloc(1:2,2) ) 162 CALL mpp_minloc( 'stpctl',ABS( emp(:,:) ), llmsk, zzz, iloc(1:2,3) ) 158 163 ! find which subdomain has the max. 159 164 iareamin(:) = jpnij+1 ; iareamax(:) = 0 ; iareasum(:) = 0 … … 168 173 ELSE ! find local min and max locations: 169 174 ! if we are here, this means that the subdomain contains some oce points -> no need to test the mask used in maxloc 170 iloc(1:2,1) = MAXLOC( taum(:,:) , mask = llmsk ) + (/ nimpp - 1, njmpp - 1/) 171 iloc(1:2,2) = MAXLOC( ABS( qns(:,:) ), mask = llmsk ) + (/ nimpp - 1, njmpp - 1/) 172 iloc(1:2,3) = MINLOC( ABS( emp(:,:) ), mask = llmsk ) + (/ nimpp - 1, njmpp - 1/) 175 iloc(1:2,1) = MAXLOC( taum(:,:) , mask = llmsk ) 176 iloc(1:2,2) = MAXLOC( ABS( qns(:,:) ), mask = llmsk ) 177 iloc(1:2,3) = MINLOC( ABS( emp(:,:) ), mask = llmsk ) 178 DO ji = 1, 3 ! local domain indices ==> global domain indices, excluding halos 179 iloc(1:2,ji) = (/ mig0(iloc(1,ji)), mjg0(iloc(2,ji)) /) 180 END DO 173 181 iareamin(:) = narea ; iareamax(:) = narea ; iareasum(:) = 1 ! this is local information 174 182 ENDIF -
NEMO/branches/2020/tickets_icb_1900/tests/STATION_ASF/MY_SRC/usrdef_hgr.F90
r12629 r13899 14 14 !! usr_def_hgr : initialize the horizontal mesh 15 15 !!---------------------------------------------------------------------- 16 USE dom_oce , ONLY: nimpp, njmpp ! ocean space and time domain17 16 USE c1d , ONLY: rn_lon1d, rn_lat1d ! ocean lon/lat define by namelist 18 17 USE par_oce ! ocean space and time domain -
NEMO/branches/2020/tickets_icb_1900/tests/STATION_ASF/MY_SRC/usrdef_nam.F90
r12629 r13899 15 15 !! usr_def_hgr : initialize the horizontal mesh 16 16 !!---------------------------------------------------------------------- 17 USE dom_oce , ONLY: nimpp, njmpp ! ocean space and time domain18 !!! USE dom_oce , ONLY: ln_zco, ln_zps, ln_sco ! flag of type of coordinate19 17 USE par_oce ! ocean space and time domain 20 18 USE phycst ! physical constants
Note: See TracChangeset
for help on using the changeset viewer.