SUBROUTINE ice_bio_conserv(kideb,kiut,ntra,message,trc_nam,err, & zmb0,zmb1,zfb,zfsu,zdt) ! This routine tests conservation of the mass of tracers ! (c) Martin Vancoppenolle, June 2007 INCLUDE 'type.com' INCLUDE 'para.com' INCLUDE 'bio.com' CHARACTER(len=15) :: & message ! : message indicating the name of the routine calling CHARACTER(len=64), DIMENSION(ntra_bio_max) :: & trc_nam ! : name of the tracer tested CHARACTER(len=19) :: & zstr1 CHARACTER(len=3) :: & zstr2 CHARACTER(len=8) :: & zstr3 REAL(8) :: & err REAL(8), DIMENSION(ntra_bio_max) :: & zmb0 , & zmb1 , & zfb , & zfsu REAL(8) :: & zdt INTEGER :: & ji , ! : index for space & jk , ! : index for ice layers & jn ! : index for tracers REAL(8) :: & zdm ! : actual mass variation & zdmf !=============================================================================! WRITE(numout,*) ' ice_bio_conserv : ' WRITE(numout,*) ' ~~~~~~~~~~~~~~~ ' WRITE(numout,*) ' message : ', message WRITE(numout,*) ' error max : ', err WRITE(numout,*) ' kideb, kiut : ', kideb, kiut WRITE(numout,*) ' ddtb : ', zdt DO jn = 1, ntra IF ( flag_active(jn) ) THEN WRITE(numout,*) ' --- Tracer : ', trc_nam(jn) WRITE(numout,*) ' jn : ', jn WRITE(numout,*) ' mt_i_bio_init : ', zmb0(jn) WRITE(numout,*) ' mt_i_bio_final : ', zmb1(jn) zdm = ( zmb1(jn) - zmb0(jn) ) / zdt zdmf = zfb(jn) + zfsu(jn) WRITE(numout,*) ' Actual mass variation zdm : ', zdm WRITE(numout,*) ' Mass variation from fluxes zdmf : ', zdmf zstr1 = ' Bio conserv error ' zstr2 = TRIM(trc_nam(jn)) WRITE(zstr3,'(E8.2)') ABS(zdm-zdmf) ! WRITE(numout,*) ' Bio conserv error : ', ABS(zdm-zdmf) WRITE(numout,*) zstr1//'in '//TRIM(message)//' ('//zstr2// & ') : '//zstr3 WRITE(503,*) zmb1(jn), ABS(zdm-zdmf)*zdt IF ( ABS ( zdm - zdmf ) .GT. err ) THEN WRITE(numout,*) ' Conservation error after ', message WRITE(numout,*) ' Error : ', & ABS( zdm - zdmf ) ! WRITE(numout,*) ' Actual mass variation zdm : ', zdm ! WRITE(numout,*) ' Mass variation from fluxes zdmf : ', zdmf WRITE(numout,*) WRITE(numout,*) ' mt_i_bio_init : ', zmb0(jn) WRITE(numout,*) ' mt_i_bio_final : ', zmb1(jn) WRITE(numout,*) ' Upper flux zfsu : ', zfsu(jn) WRITE(numout,*) ' Lower flux zfb : ', zfb(jn) WRITE(numout,*) ! WRITE(numout,*) ' c_i_bio : ', ( c_i_bio(jn,layer), ! & layer = 1, nlay_bio ) ! WRITE(numout,*) ' cbu_i_bio : ', ( cbu_i_bio(jn,layer), ! & layer = 1, nlay_bio ) ENDIF ! residual ENDIF ! flag_active END DO ! jn RETURN !=============================================================================! !-- End of ice_bio_conserv -- END