Changeset 13168 for NEMO/branches
- Timestamp:
- 2020-06-27T19:07:43+02:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/r4.0-HEAD_r12713_clem_dan_fixcpl/src/ICE/icectl.F90
r12725 r13168 350 350 !! *** ROUTINE ice_ctl *** 351 351 !! 352 !! ** Purpose : Alerts in case of model crash352 !! ** Purpose : control checks 353 353 !!------------------------------------------------------------------- 354 354 INTEGER, INTENT(in) :: kt ! ocean time step 355 INTEGER :: ji, jj, jk, jl ! dummy loop indices 356 INTEGER :: inb_altests ! number of alert tests (max 20) 357 INTEGER :: ialert_id ! number of the current alert 358 REAL(wp) :: ztmelts ! ice layer melting point 355 INTEGER :: ja, ji, jj, jk, jl ! dummy loop indices 356 INTEGER :: ialert_id ! number of the current alert 357 REAL(wp) :: ztmelts ! ice layer melting point 359 358 CHARACTER (len=30), DIMENSION(20) :: cl_alname ! name of alert 360 359 INTEGER , DIMENSION(20) :: inb_alp ! number of alerts positive 361 360 !!------------------------------------------------------------------- 362 363 inb_altests = 10 364 inb_alp(:) = 0 365 366 ! Alert if incompatible volume and concentration 367 ialert_id = 2 ! reference number of this alert 368 cl_alname(ialert_id) = ' Incompat vol and con ' ! name of the alert 361 inb_alp(:) = 0 362 ialert_id = 0 363 364 ! Alert if very high salinity 365 ialert_id = ialert_id + 1 ! reference number of this alert 366 cl_alname(ialert_id) = ' Very high salinity ' ! name of the alert 369 367 DO jl = 1, jpl 370 368 DO jj = 1, jpj 371 369 DO ji = 1, jpi 372 IF( v_i(ji,jj,jl) /= 0._wp .AND. a_i(ji,jj,jl) == 0._wp ) THEN 373 WRITE(numout,*) ' ALERTE 2 : Incompatible volume and concentration ' 374 inb_alp(ialert_id) = inb_alp(ialert_id) + 1 370 IF( v_i(ji,jj,jl) > epsi10 ) THEN 371 IF( sv_i(ji,jj,jl) / v_i(ji,jj,jl) > rn_simax ) THEN 372 WRITE(numout,*) ' ALERTE : Very high salinity ',sv_i(ji,jj,jl)/v_i(ji,jj,jl) 373 WRITE(numout,*) ' at i,j,l = ',ji,jj,jl 374 inb_alp(ialert_id) = inb_alp(ialert_id) + 1 375 ENDIF 375 376 ENDIF 376 377 END DO … … 378 379 END DO 379 380 380 ! Alerte if very thick ice 381 ialert_id = 3 ! reference number of this alert 382 cl_alname(ialert_id) = ' Very thick ice ' ! name of the alert 383 jl = jpl 384 DO jj = 1, jpj 385 DO ji = 1, jpi 386 IF( h_i(ji,jj,jl) > 50._wp ) THEN 387 WRITE(numout,*) ' ALERTE 3 : Very thick ice' 388 !CALL ice_prt( kt, ji, jj, 2, ' ALERTE 3 : Very thick ice ' ) 389 inb_alp(ialert_id) = inb_alp(ialert_id) + 1 390 ENDIF 391 END DO 392 END DO 393 394 ! Alert if very fast ice 395 ialert_id = 4 ! reference number of this alert 396 cl_alname(ialert_id) = ' Very fast ice ' ! name of the alert 397 DO jj = 1, jpj 398 DO ji = 1, jpi 399 IF( MAX( ABS( u_ice(ji,jj) ), ABS( v_ice(ji,jj) ) ) > 2. .AND. & 400 & at_i(ji,jj) > 0._wp ) THEN 401 WRITE(numout,*) ' ALERTE 4 : Very fast ice' 402 !CALL ice_prt( kt, ji, jj, 1, ' ALERTE 4 : Very fast ice ' ) 403 inb_alp(ialert_id) = inb_alp(ialert_id) + 1 404 ENDIF 405 END DO 406 END DO 407 408 ! Alert on salt flux 409 ialert_id = 5 ! reference number of this alert 410 cl_alname(ialert_id) = ' High salt flux ' ! name of the alert 411 DO jj = 1, jpj 412 DO ji = 1, jpi 413 IF( ABS( sfx (ji,jj) ) > 1.0e-2 ) THEN ! = 1 psu/day for 1m ocean depth 414 WRITE(numout,*) ' ALERTE 5 : High salt flux' 415 !CALL ice_prt( kt, ji, jj, 3, ' ALERTE 5 : High salt flux ' ) 416 inb_alp(ialert_id) = inb_alp(ialert_id) + 1 417 ENDIF 418 END DO 419 END DO 420 421 ! Alert if there is ice on continents 422 ialert_id = 6 ! reference number of this alert 423 cl_alname(ialert_id) = ' Ice on continents ' ! name of the alert 424 DO jj = 1, jpj 425 DO ji = 1, jpi 426 IF( tmask(ji,jj,1) <= 0._wp .AND. at_i(ji,jj) > 0._wp ) THEN 427 WRITE(numout,*) ' ALERTE 6 : Ice on continents' 428 !CALL ice_prt( kt, ji, jj, 1, ' ALERTE 6 : Ice on continents ' ) 429 inb_alp(ialert_id) = inb_alp(ialert_id) + 1 430 ENDIF 431 END DO 432 END DO 433 434 ! 435 ! ! Alert if very fresh ice 436 ialert_id = 7 ! reference number of this alert 437 cl_alname(ialert_id) = ' Very fresh ice ' ! name of the alert 381 ! Alert if very low salinity 382 ialert_id = ialert_id + 1 ! reference number of this alert 383 cl_alname(ialert_id) = ' Very low salinity ' ! name of the alert 438 384 DO jl = 1, jpl 439 385 DO jj = 1, jpj 440 386 DO ji = 1, jpi 441 IF( s_i(ji,jj,jl) < 0.1 .AND. a_i(ji,jj,jl) > 0._wp ) THEN 442 WRITE(numout,*) ' ALERTE 7 : Very fresh ice' 443 ! CALL ice_prt(kt,ji,jj,1, ' ALERTE 7 : Very fresh ice ' ) 444 inb_alp(ialert_id) = inb_alp(ialert_id) + 1 387 IF( v_i(ji,jj,jl) > epsi10 ) THEN 388 IF( sv_i(ji,jj,jl) / v_i(ji,jj,jl) < rn_simin ) THEN 389 WRITE(numout,*) ' ALERTE : Very low salinity ',sv_i(ji,jj,jl),v_i(ji,jj,jl) 390 WRITE(numout,*) ' at i,j,l = ',ji,jj,jl 391 inb_alp(ialert_id) = inb_alp(ialert_id) + 1 392 ENDIF 445 393 ENDIF 446 394 END DO 447 395 END DO 448 396 END DO 449 ! 450 ! Alert if qns very big 451 ialert_id = 8 ! reference number of this alert 452 cl_alname(ialert_id) = ' fnsolar very big ' ! name of the alert 453 DO jj = 1, jpj 454 DO ji = 1, jpi 455 IF( ABS( qns(ji,jj) ) > 1500._wp .AND. at_i(ji,jj) > 0._wp ) THEN 456 ! 457 WRITE(numout,*) ' ALERTE 8 : Very high non-solar heat flux' 458 !CALL ice_prt( kt, ji, jj, 2, ' ') 459 inb_alp(ialert_id) = inb_alp(ialert_id) + 1 460 ! 461 ENDIF 462 END DO 463 END DO 464 !+++++ 465 466 ! ! Alert if too old ice 467 ialert_id = 9 ! reference number of this alert 468 cl_alname(ialert_id) = ' Very old ice ' ! name of the alert 469 DO jl = 1, jpl 470 DO jj = 1, jpj 471 DO ji = 1, jpi 472 IF ( ( ( ABS( o_i(ji,jj,jl) ) > rdt_ice ) .OR. & 473 ( ABS( o_i(ji,jj,jl) ) < 0._wp) ) .AND. & 474 ( a_i(ji,jj,jl) > 0._wp ) ) THEN 475 WRITE(numout,*) ' ALERTE 9 : Wrong ice age' 476 !CALL ice_prt( kt, ji, jj, 1, ' ALERTE 9 : Wrong ice age ') 477 inb_alp(ialert_id) = inb_alp(ialert_id) + 1 478 ENDIF 479 END DO 480 END DO 481 END DO 482 483 ! Alert if very warm ice 484 ialert_id = 10 ! reference number of this alert 485 cl_alname(ialert_id) = ' Very warm ice ' ! name of the alert 486 inb_alp(ialert_id) = 0 397 398 ! Alert if very cold ice 399 ialert_id = ialert_id + 1 ! reference number of this alert 400 cl_alname(ialert_id) = ' Very cold ice ' ! name of the alert 487 401 DO jl = 1, jpl 488 402 DO jk = 1, nlay_i … … 490 404 DO ji = 1, jpi 491 405 ztmelts = -rTmlt * sz_i(ji,jj,jk,jl) + rt0 492 IF( t_i(ji,jj,jk,jl) > ztmelts .AND. v_i(ji,jj,jl) > 1.e-10 &493 & .AND. a_i(ji,jj,jl) > 0._wp ) THEN494 WRITE(numout,*) ' ALERTE 10 : Very warm ice'406 IF( t_i(ji,jj,jk,jl) < -50.+rt0 .AND. v_i(ji,jj,jl) > epsi10 ) THEN 407 WRITE(numout,*) ' ALERTE : Very cold ice ',(t_i(ji,jj,jk,jl)-rt0) 408 WRITE(numout,*) ' at i,j,k,l = ',ji,jj,jk,jl 495 409 inb_alp(ialert_id) = inb_alp(ialert_id) + 1 496 410 ENDIF … … 499 413 END DO 500 414 END DO 415 416 ! Alert if very warm ice 417 ialert_id = ialert_id + 1 ! reference number of this alert 418 cl_alname(ialert_id) = ' Very warm ice ' ! name of the alert 419 DO jl = 1, jpl 420 DO jk = 1, nlay_i 421 DO jj = 1, jpj 422 DO ji = 1, jpi 423 ztmelts = -rTmlt * sz_i(ji,jj,jk,jl) + rt0 424 IF( t_i(ji,jj,jk,jl) > ztmelts .AND. v_i(ji,jj,jl) > epsi10 ) THEN 425 WRITE(numout,*) ' ALERTE : Very warm ice',(t_i(ji,jj,jk,jl)-rt0) 426 WRITE(numout,*) ' at i,j,k,l = ',ji,jj,jk,jl 427 inb_alp(ialert_id) = inb_alp(ialert_id) + 1 428 ENDIF 429 END DO 430 END DO 431 END DO 432 END DO 433 434 ! Alerte if very thick ice 435 ialert_id = ialert_id + 1 ! reference number of this alert 436 cl_alname(ialert_id) = ' Very thick ice ' ! name of the alert 437 jl = jpl 438 DO jj = 1, jpj 439 DO ji = 1, jpi 440 IF( h_i(ji,jj,jl) > 50._wp ) THEN 441 WRITE(numout,*) ' ALERTE : Very thick ice ',h_i(ji,jj,jl) 442 WRITE(numout,*) ' at i,j,l = ',ji,jj,jl 443 inb_alp(ialert_id) = inb_alp(ialert_id) + 1 444 ENDIF 445 END DO 446 END DO 447 448 ! Alerte if very thin ice 449 ialert_id = ialert_id + 1 ! reference number of this alert 450 cl_alname(ialert_id) = ' Very thin ice ' ! name of the alert 451 jl = 1 452 DO jj = 1, jpj 453 DO ji = 1, jpi 454 IF( h_i(ji,jj,jl) < rn_himin ) THEN 455 WRITE(numout,*) ' ALERTE : Very thin ice ',h_i(ji,jj,jl) 456 WRITE(numout,*) ' at i,j,l = ',ji,jj,jl 457 inb_alp(ialert_id) = inb_alp(ialert_id) + 1 458 ENDIF 459 END DO 460 END DO 461 462 ! Alert if very fast ice 463 ialert_id = ialert_id + 1 ! reference number of this alert 464 cl_alname(ialert_id) = ' Very fast ice ' ! name of the alert 465 DO jj = 1, jpj 466 DO ji = 1, jpi 467 IF( MAX( ABS( u_ice(ji,jj) ), ABS( v_ice(ji,jj) ) ) > 2. ) THEN 468 WRITE(numout,*) ' ALERTE : Very fast ice ',MAX( ABS( u_ice(ji,jj) ), ABS( v_ice(ji,jj) ) ) 469 WRITE(numout,*) ' at i,j = ',ji,jj 470 inb_alp(ialert_id) = inb_alp(ialert_id) + 1 471 ENDIF 472 END DO 473 END DO 474 475 ! Alert if there is ice on continents 476 ialert_id = ialert_id + 1 ! reference number of this alert 477 cl_alname(ialert_id) = ' Ice on continents ' ! name of the alert 478 DO jj = 1, jpj 479 DO ji = 1, jpi 480 IF( tmask(ji,jj,1) == 0._wp .AND. ( at_i(ji,jj) > 0._wp .OR. vt_i(ji,jj) > 0._wp ) ) THEN 481 WRITE(numout,*) ' ALERTE : Ice on continents ',at_i(ji,jj),vt_i(ji,jj) 482 WRITE(numout,*) ' at i,j = ',ji,jj 483 inb_alp(ialert_id) = inb_alp(ialert_id) + 1 484 ENDIF 485 END DO 486 END DO 487 488 ! Alert if incompatible ice concentration and volume 489 ialert_id = ialert_id + 1 ! reference number of this alert 490 cl_alname(ialert_id) = ' Incompatible ice conc and vol ' ! name of the alert 491 DO jj = 1, jpj 492 DO ji = 1, jpi 493 IF( ( vt_i(ji,jj) == 0._wp .AND. at_i(ji,jj) > 0._wp ) .OR. & 494 & ( vt_i(ji,jj) > 0._wp .AND. at_i(ji,jj) == 0._wp ) ) THEN 495 WRITE(numout,*) ' ALERTE : Incompatible ice conc and vol ',at_i(ji,jj),vt_i(ji,jj) 496 WRITE(numout,*) ' at i,j = ',ji,jj 497 inb_alp(ialert_id) = inb_alp(ialert_id) + 1 498 ENDIF 499 END DO 500 END DO 501 501 502 502 ! sum of the alerts on all processors 503 503 IF( lk_mpp ) THEN 504 DO ialert_id = 1, inb_altests505 CALL mpp_sum('icectl', inb_alp( ialert_id))504 DO ja = 1, ialert_id 505 CALL mpp_sum('icectl', inb_alp(ja)) 506 506 END DO 507 507 ENDIF … … 509 509 ! print alerts 510 510 IF( lwp ) THEN 511 ialert_id = 1 ! reference number of this alert512 cl_alname(ialert_id) = ' NO alerte 1 ' ! name of the alert513 511 WRITE(numout,*) ' time step ',kt 514 512 WRITE(numout,*) ' All alerts at the end of ice model ' 515 DO ialert_id = 1, inb_altests516 WRITE(numout,*) ialert_id, cl_alname(ialert_id)//' : ', inb_alp(ialert_id), ' times ! '513 DO ja = 1, ialert_id 514 WRITE(numout,*) ja, cl_alname(ja)//' : ', inb_alp(ja), ' times ! ' 517 515 END DO 518 516 ENDIF … … 563 561 WRITE(numout,*) ' v_ice(i ,j) : ', v_ice(ji,jj) 564 562 WRITE(numout,*) ' strength : ', strength(ji,jj) 565 WRITE(numout,*)566 563 WRITE(numout,*) ' - Cell values ' 567 564 WRITE(numout,*) ' ~~~~~~~~~~~ ' … … 572 569 DO jl = 1, jpl 573 570 WRITE(numout,*) ' - Category (', jl,')' 571 WRITE(numout,*) ' ~~~~~~~~~~~ ' 574 572 WRITE(numout,*) ' a_i : ', a_i(ji,jj,jl) 575 573 WRITE(numout,*) ' h_i : ', h_i(ji,jj,jl) … … 608 606 WRITE(numout,*) ' v_ice(i ,j) : ', v_ice(ji,jj) 609 607 WRITE(numout,*) ' strength : ', strength(ji,jj) 610 WRITE(numout,*) ' u_ice_b : ', u_ice_b(ji,jj) , ' v_ice_b : ', v_ice_b(ji,jj)611 608 WRITE(numout,*) 612 609 … … 732 729 CALL prt_ctl(tab2d_1=v_i (:,:,jl) , clinfo1= ' v_i : ') 733 730 CALL prt_ctl(tab2d_1=v_s (:,:,jl) , clinfo1= ' v_s : ') 734 CALL prt_ctl(tab2d_1=e_i (:,:,1,jl) , clinfo1= ' e_i1 : ')735 731 CALL prt_ctl(tab2d_1=e_s (:,:,1,jl) , clinfo1= ' e_snow : ') 736 732 CALL prt_ctl(tab2d_1=sv_i (:,:,jl) , clinfo1= ' sv_i : ') … … 740 736 CALL prt_ctl_info(' - Layer : ', ivar1=jk) 741 737 CALL prt_ctl(tab2d_1=t_i(:,:,jk,jl) , clinfo1= ' t_i : ') 738 CALL prt_ctl(tab2d_1=e_i(:,:,jk,jl) , clinfo1= ' e_i : ') 742 739 END DO 743 740 END DO
Note: See TracChangeset
for help on using the changeset viewer.