Changeset 1003 for trunk/NEMO/TOP_SRC/TRP
- Timestamp:
- 2008-05-30T11:43:42+02:00 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/TOP_SRC/TRP/trcrad.F90
r941 r1003 49 49 !!---------------------------------------------------------------------- 50 50 INTEGER, INTENT( in ) :: kt ! ocean time-step index 51 !!52 INTEGER :: ji, jj, jk, jn ! dummy loop indices53 REAL(wp) :: zvolk, ztrcorb, ztrmasb ! temporary scalars54 REAL(wp) :: zcoef, ztrcorn, ztrmasn ! " "55 51 CHARACTER (len=22) :: charout 56 52 !!---------------------------------------------------------------------- … … 62 58 ENDIF 63 59 64 IF( lk_cfc ) THEN ! CFC model 65 DO jn = 1, jptra 66 DO jk = 1, jpkm1 67 DO jj = 1, jpj 68 DO ji = 1, jpi 69 trn(ji,jj,jk,jn) = MAX( 0. , trn(ji,jj,jk,jn) ) 70 trb(ji,jj,jk,jn) = MAX( 0. , trb(ji,jj,jk,jn) ) 71 END DO 72 END DO 73 END DO 74 END DO 75 ENDIF 60 IF( lk_cfc ) CALL trc_rad_sms( trb, trn, jp_cfc0, jp_cfc1 ) ! CFC model 61 IF( lk_lobster ) CALL trc_rad_sms( trb, trn, jp_lob0, jp_lob1, cpreserv='Y' ) ! LOBSTER model 62 IF( lk_pisces ) CALL trc_rad_sms( trb, trn, jp_pcs0, jp_pcs1, cpreserv='Y' ) ! PISCES model 63 IF( lk_my_trc ) CALL trc_rad_sms( trb, trn, jp_myt0, jp_myt1 ) ! MY_TRC model 76 64 77 IF( lk_pisces .OR. lk_lobster ) THEN ! PISCES or LOBSTER bio-model 78 DO jn = 1, jptra 65 66 ! 67 IF(ln_ctl) THEN ! print mean trends (used for debugging) 68 WRITE(charout, FMT="('rad')") 69 CALL prt_ctl_trc_info( charout ) 70 CALL prt_ctl_trc( tab4d=trn, mask=tmask, clinfo=ctrcnm ) 71 ENDIF 72 ! 73 END SUBROUTINE trc_rad 74 75 SUBROUTINE trc_rad_sms( ptrb, ptrn, jp_sms0, jp_sms1, cpreserv ) 76 !!----------------------------------------------------------------------------- 77 !! *** ROUTINE trc_rad_sms *** 78 !! 79 !! ** Purpose : "crappy" routine to correct artificial negative 80 !! concentrations due to isopycnal scheme 81 !! 82 !! ** Method : 2 cases : 83 !! - Set negative concentrations to zero while computing 84 !! the corresponding tracer content that is added to the 85 !! tracers. Then, adjust the tracer concentration using 86 !! a multiplicative factor so that the total tracer 87 !! concentration is preserved. 88 !! - simply set to zero the negative CFC concentration 89 !! (the total content of concentration is not strictly preserved) 90 !!-------------------------------------------------------------------------------- 91 !! Arguments 92 INTEGER , INTENT( in ) :: & 93 jp_sms0, & !: First index of the passive tracer model 94 jp_sms1 !: Last index of the passive tracer model 95 96 REAL(wp), DIMENSION (jpi,jpj,jpk,jptra), INTENT( inout ) :: & 97 ptrb, ptrn !: before and now traceur concentration 98 99 CHARACTER( len = 1) , INTENT(in), OPTIONAL :: & 100 cpreserv !: flag to preserve content or not 101 102 ! Local declarations 103 INTEGER :: ji, jj, jk, jn ! dummy loop indices 104 REAL(wp) :: zvolk, ztrcorb, ztrmasb ! temporary scalars 105 REAL(wp) :: zcoef, ztrcorn, ztrmasn ! " " 106 107 !!---------------------------------------------------------------------- 108 109 110 IF( PRESENT( cpreserv ) ) THEN ! total tracer concentration is preserved 111 112 DO jn = jp_sms0, jp_sms1 113 79 114 ztrcorb = 0.e0 80 115 ztrmasb = 0.e0 81 116 ztrcorn = 0.e0 82 117 ztrmasn = 0.e0 118 83 119 DO jk = 1, jpkm1 84 120 DO jj = 1, jpj … … 90 126 & * tmask(ji,jj,jk) * tmask_i(ji,jj) 91 127 92 ztrcorb = ztrcorb + MIN( 0., trb(ji,jj,jk,jn) ) * zvolk93 ztrcorn = ztrcorn + MIN( 0., trn(ji,jj,jk,jn) ) * zvolk128 ztrcorb = ztrcorb + MIN( 0., ptrb(ji,jj,jk,jn) ) * zvolk 129 ztrcorn = ztrcorn + MIN( 0., ptrn(ji,jj,jk,jn) ) * zvolk 94 130 95 trb(ji,jj,jk,jn) = MAX( 0. ,trb(ji,jj,jk,jn) )96 trn(ji,jj,jk,jn) = MAX( 0. ,trn(ji,jj,jk,jn) )131 ptrb(ji,jj,jk,jn) = MAX( 0. , ptrb(ji,jj,jk,jn) ) 132 ptrn(ji,jj,jk,jn) = MAX( 0. , ptrn(ji,jj,jk,jn) ) 97 133 98 ztrmasb = ztrmasb + trb(ji,jj,jk,jn) * zvolk99 ztrmasn = ztrmasn + trn(ji,jj,jk,jn) * zvolk134 ztrmasb = ztrmasb + ptrb(ji,jj,jk,jn) * zvolk 135 ztrmasn = ztrmasn + ptrn(ji,jj,jk,jn) * zvolk 100 136 END DO 101 137 END DO 102 138 END DO 139 103 140 IF( lk_mpp ) THEN 104 141 CALL mpp_sum( ztrcorb ) ! sum over the global domain … … 111 148 zcoef = 1. + ztrcorb / ztrmasb 112 149 DO jk = 1, jpkm1 113 trb(:,:,jk,jn) =trb(:,:,jk,jn) * zcoef * tmask(:,:,jk)150 ptrb(:,:,jk,jn) = ptrb(:,:,jk,jn) * zcoef * tmask(:,:,jk) 114 151 END DO 115 152 ENDIF … … 118 155 zcoef = 1. + ztrcorn / ztrmasn 119 156 DO jk = 1, jpkm1 120 trn(:,:,jk,jn) =trn(:,:,jk,jn) * zcoef * tmask(:,:,jk)157 ptrn(:,:,jk,jn) = ptrn(:,:,jk,jn) * zcoef * tmask(:,:,jk) 121 158 END DO 122 159 ENDIF … … 124 161 END DO 125 162 ! 163 ! 164 ELSE ! total CFC content is not strictly preserved 165 166 DO jn = jp_sms0, jp_sms1 167 DO jk = 1, jpkm1 168 DO jj = 1, jpj 169 DO ji = 1, jpi 170 ptrn(ji,jj,jk,jn) = MAX( 0. , ptrn(ji,jj,jk,jn) ) 171 ptrb(ji,jj,jk,jn) = MAX( 0. , ptrb(ji,jj,jk,jn) ) 172 END DO 173 END DO 174 END DO 175 END DO 176 126 177 ENDIF 127 !128 IF(ln_ctl) THEN ! print mean trends (used for debugging)129 WRITE(charout, FMT="('rad')")130 CALL prt_ctl_trc_info( charout )131 CALL prt_ctl_trc( tab4d=trn, mask=tmask, clinfo=ctrcnm )132 ENDIF133 !134 END SUBROUTINE trc_rad135 178 179 END SUBROUTINE trc_rad_sms 136 180 #else 137 181 !!----------------------------------------------------------------------
Note: See TracChangeset
for help on using the changeset viewer.