Changeset 7835 for branches/UKMO/CO6_shelfclimate_fabm/NEMOGCM
- Timestamp:
- 2017-03-24T16:06:42+01:00 (7 years ago)
- Location:
- branches/UKMO/CO6_shelfclimate_fabm/NEMOGCM/NEMO
- Files:
-
- 10 added
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/CO6_shelfclimate_fabm/NEMOGCM/NEMO/OPA_SRC/IOM/iom_def.F90
r7566 r7835 43 43 INTEGER, PARAMETER, PUBLIC :: jp_i1 = 204 !: write INTEGER(1) 44 44 45 INTEGER, PARAMETER, PUBLIC :: jpmax_files = 100 !: maximum number of simultaneously opened file45 INTEGER, PARAMETER, PUBLIC :: jpmax_files = 200 !: maximum number of simultaneously opened file 46 46 INTEGER, PARAMETER, PUBLIC :: jpmax_vars = 600 !: maximum number of variables in one file 47 47 INTEGER, PARAMETER, PUBLIC :: jpmax_dims = 4 !: maximum number of dimensions for one variable -
branches/UKMO/CO6_shelfclimate_fabm/NEMOGCM/NEMO/TOP_SRC/TRP/trcrad.F90
r7567 r7835 54 54 INTEGER, INTENT( in ) :: kt ! ocean time-step index 55 55 CHARACTER (len=22) :: charout 56 ! +++>>> FABM 57 INTEGER :: jn 58 ! FABM <<<+++ 56 59 !!---------------------------------------------------------------------- 57 60 ! … … 68 71 IF( lk_pisces ) CALL trc_rad_sms( kt, trb, trn, jp_pcs0 , jp_pcs1, cpreserv='Y' ) ! PISCES model 69 72 IF( lk_my_trc ) CALL trc_rad_sms( kt, trb, trn, jp_myt0 , jp_myt1 ) ! MY_TRC model 70 73 ! +++>>> FABM 74 IF( lk_fabm ) THEN 75 DO jn=1,jp_fabm ! state variable loop 76 IF (lk_rad_fabm(jn)) THEN 77 CALL trc_rad_sms( kt, trb, trn, jn+jp_fabm_m1 , jn+jp_fabm_m1 ) 78 ENDIF 79 END DO 80 END IF 81 ! FABM <<<+++ 71 82 ! 72 83 IF(ln_ctl) THEN ! print mean trends (used for debugging) -
branches/UKMO/CO6_shelfclimate_fabm/NEMOGCM/NEMO/TOP_SRC/TRP/trdtrc_oce.F90
r7566 r7835 22 22 CHARACTER(len=50) :: cn_trdrst_trc_in !: suffix of pass. tracer restart name (input) 23 23 CHARACTER(len=50) :: cn_trdrst_trc_out !: suffix of pass. tracer restart name (output) 24 LOGICAL, DIMENSION(jptra) :: ln_trdtrc !: large trends diagnostic to write or not (namelist) 24 ! --->>> FABM 25 ! LOGICAL, DIMENSION(jptra) :: ln_trdtrc !: large trends diagnostic to write or not (namelist) 26 ! FABM <<<--- 27 ! +++>>> FABM 28 LOGICAL, DIMENSION(jpmaxtrc) :: ln_trdtrc !: large trends diagnostic to write or not (namelist) 29 ! FABM <<<+++ 25 30 26 31 # if defined key_trdtrc && defined key_iomput -
branches/UKMO/CO6_shelfclimate_fabm/NEMOGCM/NEMO/TOP_SRC/par_trc.F90
r7566 r7835 15 15 USE par_cfc ! CFC 11 and 12 tracers 16 16 USE par_my_trc ! user defined passive tracers 17 ! +++>>> FABM 18 USE par_fabm ! FABM 19 ! FABM <<<+++ 17 20 18 21 IMPLICIT NONE … … 24 27 ! Passive tracers : Total size 25 28 ! --------------- ! total number of passive tracers, of 2d and 3d output and trend arrays 26 INTEGER, PUBLIC, PARAMETER :: jptra = jp_pisces + jp_cfc + jp_c14b + jp_my_trc 27 INTEGER, PUBLIC, PARAMETER :: jpdia2d = jp_pisces_2d + jp_cfc_2d + jp_c14b_2d + jp_my_trc_2d 28 INTEGER, PUBLIC, PARAMETER :: jpdia3d = jp_pisces_3d + jp_cfc_3d + jp_c14b_3d + jp_my_trc_3d 29 ! --->>> FABM 30 ! INTEGER, PUBLIC, PARAMETER :: jptra = jp_pisces + jp_cfc + jp_c14b + jp_my_trc 31 ! INTEGER, PUBLIC, PARAMETER :: jpdia2d = jp_pisces_2d + jp_cfc_2d + jp_c14b_2d + jp_my_trc_2d 32 ! INTEGER, PUBLIC, PARAMETER :: jpdia3d = jp_pisces_3d + jp_cfc_3d + jp_c14b_3d + jp_my_trc_3d 33 ! FABM <<<--- 34 ! +++>>> FABM 35 INTEGER, PUBLIC :: jptra = jp_pisces + jp_cfc + jp_c14b + jp_my_trc 36 INTEGER, PUBLIC :: jpdia2d = jp_pisces_2d + jp_cfc_2d + jp_c14b_2d + jp_my_trc_2d 37 INTEGER, PUBLIC :: jpdia3d = jp_pisces_3d + jp_cfc_3d + jp_c14b_3d + jp_my_trc_3d 38 ! FABM <<<+++ 29 39 ! ! total number of sms diagnostic arrays 30 INTEGER, PUBLIC, PARAMETER :: jpdiabio = jp_pisces_trd + jp_cfc_trd + jp_c14b_trd + jp_my_trc_trd 40 ! --->>> FABM 41 ! INTEGER, PUBLIC, PARAMETER :: jpdiabio = jp_pisces_trd + jp_cfc_trd + jp_c14b_trd + jp_my_trc_trd 42 ! FABM <<<--- 43 ! +++>>> FABM 44 INTEGER, PUBLIC :: jpdiabio = jp_pisces_trd + jp_cfc_trd + jp_c14b_trd + jp_my_trc_trd 45 ! FABM <<<+++ 31 46 32 47 ! 1D configuration ("key_c1d") -
branches/UKMO/CO6_shelfclimate_fabm/NEMOGCM/NEMO/TOP_SRC/trc.F90
r7567 r7835 83 83 END TYPE 84 84 85 REAL(wp), DIMENSION(jptra), PUBLIC :: trc_ice_ratio, & ! ice-ocean tracer ratio 85 ! --->>> FABM 86 !REAL(wp), DIMENSION(jptra), PUBLIC :: trc_ice_ratio, & ! ice-ocean tracer ratio 87 ! trc_ice_prescr ! prescribed ice trc cc 88 !CHARACTER(len=2), DIMENSION(jptra), PUBLIC :: cn_trc_o ! choice of ocean tracer cc 89 ! FABM <<<--- 90 ! +++>>> FABM 91 REAL(wp), DIMENSION(jpmaxtrc), PUBLIC :: trc_ice_ratio, & ! ice-ocean tracer ratio 86 92 trc_ice_prescr ! prescribed ice trc cc 87 CHARACTER(len=2), DIMENSION(jptra), PUBLIC :: cn_trc_o ! choice of ocean tracer cc 93 CHARACTER(len=2), DIMENSION(jpmaxtrc), PUBLIC :: cn_trc_o ! choice of ocean tracer cc 94 ! FABM <<<+++ 88 95 89 96 !! information for outputs … … 93 100 CHARACTER(len = 80) :: cllname !: long name 94 101 CHARACTER(len = 20) :: clunit !: unit 95 LOGICAL :: llinit !: read in a file or not 96 #if defined key_my_trc 97 LOGICAL :: llsbc !: read in a file or not 98 LOGICAL :: llcbc !: read in a file or not 99 LOGICAL :: llobc !: read in a file or not 100 #endif 101 LOGICAL :: llsave !: save the tracer or not 102 ! --->>> FABM 103 ! LOGICAL :: llinit !: read in a file or not 104 !!#if defined key_my_trc 105 ! LOGICAL :: llsbc !: read in a file or not 106 ! LOGICAL :: llcbc !: read in a file or not 107 ! LOGICAL :: llobc !: read in a file or not 108 !#endif 109 ! LOGICAL :: llsave !: save the tracer or not 110 ! FABM <<<--- 111 ! +++ FABM 112 LOGICAL :: llinit=.FALSE. !: read in a file or not 113 #if defined key_fabm 114 LOGICAL :: llsbc=.FALSE. !: read in a file or not 115 LOGICAL :: llcbc=.FALSE. !: read in a file or not 116 LOGICAL :: llobc=.FALSE. !: read in a file or not 117 #endif 118 LOGICAL :: llsave=.FALSE. !: save the tracer or not 119 ! FABM <<<+++ 102 120 END TYPE PTRACER 103 121 CHARACTER(len = 20), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: ctrcnm !: tracer name … … 228 246 & cvol(jpi,jpj,jpk) , rdttrc(jpk) , trai(jptra) , & 229 247 & ctrcnm(jptra) , ctrcln(jptra) , ctrcun(jptra) , & 230 #if defined key_my_trc 248 ! --->>> FABM 249 !!#if defined key_my_trc 250 ! FABM <<<--- 251 ! +++>>> FABM 252 #if defined key_fabm 253 ! FABM <<<+++ 231 254 & ln_trc_sbc(jptra) , ln_trc_cbc(jptra) , ln_trc_obc(jptra) , & 232 255 #endif -
branches/UKMO/CO6_shelfclimate_fabm/NEMOGCM/NEMO/TOP_SRC/trcbc.F90
r7567 r7835 7 7 !! 3.6 ! 2015-03 (T . Lovato) Revision and BDY support 8 8 !!---------------------------------------------------------------------- 9 #if defined key_top9 #if defined key_top 10 10 !!---------------------------------------------------------------------- 11 11 !! 'key_top' TOP model … … 29 29 PUBLIC trc_bc_read ! called in trcstp.F90 or within 30 30 31 INTEGER , SAVE, PUBLIC :: nb_trcobc ! number of tracers with open BC32 INTEGER , SAVE, PUBLIC :: nb_trcsbc ! number of tracers with surface BC33 INTEGER , SAVE, PUBLIC :: nb_trccbc ! number of tracers with coastal BC31 INTEGER , SAVE, PUBLIC :: nb_trcobc ! number of tracers with open BC 32 INTEGER , SAVE, PUBLIC :: nb_trcsbc ! number of tracers with surface BC 33 INTEGER , SAVE, PUBLIC :: nb_trccbc ! number of tracers with coastal BC 34 34 INTEGER , SAVE, PUBLIC, ALLOCATABLE, DIMENSION(:) :: n_trc_indobc ! index of tracer with OBC data 35 35 INTEGER , SAVE, PUBLIC, ALLOCATABLE, DIMENSION(:) :: n_trc_indsbc ! index of tracer with SBC data 36 36 INTEGER , SAVE, PUBLIC, ALLOCATABLE, DIMENSION(:) :: n_trc_indcbc ! index of tracer with CBC data 37 REAL(wp) , SAVE, PUBLIC, ALLOCATABLE, DIMENSION(:) :: rf_trsfac ! multiplicative factor for SBC tracer values38 TYPE(FLD), SAVE, PUBLIC, ALLOCATABLE, DIMENSION(:) :: sf_trcsbc ! structure of data input SBC (file informations, fields read)39 REAL(wp) , SAVE, PUBLIC, ALLOCATABLE, DIMENSION(:) :: rf_trcfac ! multiplicative factor for CBC tracer values40 TYPE(FLD), SAVE, PUBLIC, ALLOCATABLE, DIMENSION(:) :: sf_trccbc ! structure of data input CBC (file informations, fields read)37 REAL(wp) , SAVE, PUBLIC, ALLOCATABLE, DIMENSION(:) :: rf_trsfac ! multiplicative factor for SBC tracer values 38 TYPE(FLD), SAVE, PUBLIC, ALLOCATABLE, DIMENSION(:) :: sf_trcsbc ! structure of data input SBC (file informations, fields read) 39 REAL(wp) , SAVE, PUBLIC, ALLOCATABLE, DIMENSION(:) :: rf_trcfac ! multiplicative factor for CBC tracer values 40 TYPE(FLD), SAVE, PUBLIC, ALLOCATABLE, DIMENSION(:) :: sf_trccbc ! structure of data input CBC (file informations, fields read) 41 41 REAL(wp) , SAVE, PUBLIC, ALLOCATABLE, DIMENSION(:,:) :: rf_trofac ! multiplicative factor for OBCtracer values 42 42 TYPE(FLD), SAVE, PUBLIC, ALLOCATABLE, DIMENSION(:,:), TARGET :: sf_trcobc ! structure of data input OBC (file informations, fields read) … … 65 65 INTEGER :: jl, jn , ib, ibd, ii, ij, ik ! dummy loop indices 66 66 INTEGER :: ierr0, ierr1, ierr2, ierr3 ! temporary integers 67 INTEGER :: ios! Local integer output status for namelist read67 INTEGER :: ios ! Local integer output status for namelist read 68 68 INTEGER :: nblen, igrd ! support arrays for BDY 69 69 CHARACTER(len=100) :: clndta, clntrc … … 130 130 DO ib = 1, nb_bdy 131 131 #endif 132 READ ( numnat_cfg, namtrc_bc, IOSTAT = ios, ERR = 902 )133 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_bc in configuration namelist', lwp )134 IF(lwm) WRITE ( numont, namtrc_bc )132 READ ( numnat_cfg, namtrc_bc, IOSTAT = ios, ERR = 902 ) 133 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_bc in configuration namelist', lwp ) 134 IF(lwm) WRITE ( numont, namtrc_bc ) 135 135 #if defined key_bdy 136 136 sn_trcobc(:,ib)=sn_trcobc2(:) … … 190 190 IF ( nb_trcsbc > 0 ) THEN 191 191 WRITE(numout,*) ' #trc NAME Boundary Mult.Fact. ' 192 DO jn = 1, ntrc192 DO jn = 1, ntrc 193 193 IF ( ln_trc_sbc(jn) ) WRITE(numout,9001) jn, TRIM( sn_trcsbc(jn)%clvar ), 'SBC', rn_trsfac(jn) 194 194 ENDDO 195 195 ENDIF 196 196 WRITE(numout,'(2a)') ' SURFACE BC data repository : ', TRIM(cn_dir_sbc) 197 197 … … 203 203 IF ( ln_trc_cbc(jn) ) WRITE(numout, 9001) jn, TRIM( sn_trccbc(jn)%clvar ), 'CBC', rn_trcfac(jn) 204 204 ENDDO 205 205 ENDIF 206 206 WRITE(numout,'(2a)') ' COASTAL BC data repository : ', TRIM(cn_dir_cbc) 207 207 … … 227 227 WRITE(numout,'(a,f10.2,a)') ' - Inflow damping time scale : ',rn_time_dmp(ib),' days' 228 228 WRITE(numout,'(a,f10.2,a)') ' - Outflow damping time scale : ',rn_time_dmp_out(ib),' days' 229 ENDIF230 ENDDO231 ENDIF229 ENDIF 230 ENDDO 231 ENDIF 232 232 #endif 233 233 WRITE(numout,'(2a)') ' OPEN BC data repository : ', TRIM(cn_dir_obc) … … 243 243 ALLOCATE ( sf_trcobc(nb_trcobc,nb_bdy), rf_trofac(nb_trcobc,nb_bdy), nbmap_ptr(nb_trcobc,nb_bdy), STAT=ierr1 ) 244 244 IF( ierr1 > 0 ) THEN 245 CALL ctl_stop( 'trc_bc_init: unable to allocate 245 CALL ctl_stop( 'trc_bc_init: unable to allocate sf_trcobc structure' ) ; RETURN 246 246 ENDIF 247 247 … … 249 249 250 250 DO ib = 1, nb_bdy 251 DO jn = 1, ntrc251 DO jn = 1, ntrc 252 252 253 253 nblen = idx_bdy(ib)%nblen(igrd) … … 255 255 IF ( ln_trc_obc(jn) ) THEN 256 256 ! Initialise from external data 257 jl = n_trc_indobc(jn)257 jl = n_trc_indobc(jn) 258 258 slf_i(jl) = sn_trcobc(jn,ib) 259 259 rf_trofac(jl,ib) = rn_trofac(jn) 260 260 ALLOCATE( sf_trcobc(jl,ib)%fnow(nblen,1,jpk) , STAT=ierr2 ) 261 261 IF( sn_trcobc(jn,ib)%ln_tint ) ALLOCATE( sf_trcobc(jl,ib)%fdta(nblen,1,jpk,2) , STAT=ierr3 ) 262 IF( ierr2 + ierr3 > 0 ) THEN263 CALL ctl_stop( 'trc_bc_init : unable to allocate passive tracer OBC data arrays' ) ; RETURN264 ENDIF262 IF( ierr2 + ierr3 > 0 ) THEN 263 CALL ctl_stop( 'trc_bc_init : unable to allocate passive tracer OBC data arrays' ) ; RETURN 264 ENDIF 265 265 trcdta_bdy(jn,ib)%trc => sf_trcobc(jl,ib)%fnow(:,1,:) 266 266 trcdta_bdy(jn,ib)%rn_fac = rf_trofac(jl,ib) … … 279 279 END DO 280 280 trcdta_bdy(jn,ib)%rn_fac = 1._wp 281 ENDIF282 ENDDO281 ENDIF 282 ENDDO 283 283 CALL fld_fill( sf_trcobc(:,ib), slf_i, cn_dir_obc, 'trc_bc_init', 'Passive tracer OBC data', 'namtrc_bc' ) 284 284 ENDDO … … 371 371 IF ( PRESENT(jit) ) THEN 372 372 373 #ifdef key_bdy 373 374 ! OPEN boundary conditions (use time_offset=+1 as they are applied at the end of the step) 374 IF( nb_trcobc > 0 ) THEN375 IF( nb_trcobc > 0 ) THEN 375 376 if (lwp) write(numout,'(a,i5,a,i10)') ' reading OBC data for ', nb_trcobc ,' variable(s) at step ', kt 376 377 DO ib = 1,nb_bdy 377 378 CALL fld_read(kt=kt, kn_fsbc=1, sd=sf_trcobc(:,ib), map=nbmap_ptr(:,ib), kit=jit, kt_offset=+1) 378 379 ENDDO 379 ENDIF 380 381 ! SURFACE boundary conditions 382 IF( nb_trcsbc > 0 ) THEN 380 ENDIF 381 #endif 382 383 ! SURFACE boundary conditions 384 IF( nb_trcsbc > 0 ) THEN 383 385 if (lwp) write(numout,'(a,i5,a,i10)') ' reading SBC data for ', nb_trcsbc ,' variable(s) at step ', kt 384 386 CALL fld_read(kt=kt, kn_fsbc=1, sd=sf_trcsbc, kit=jit) 385 ENDIF386 387 ! COASTAL boundary conditions388 IF( nb_trccbc > 0 ) THEN387 ENDIF 388 389 ! COASTAL boundary conditions 390 IF( nb_trccbc > 0 ) THEN 389 391 if (lwp) write(numout,'(a,i5,a,i10)') ' reading CBC data for ', nb_trccbc ,' variable(s) at step ', kt 390 392 CALL fld_read(kt=kt, kn_fsbc=1, sd=sf_trccbc, kit=jit) 391 ENDIF393 ENDIF 392 394 393 395 ELSE 394 396 397 #ifdef key_bdy 395 398 ! OPEN boundary conditions (use time_offset=+1 as they are applied at the end of the step) 396 399 IF( nb_trcobc > 0 ) THEN … … 400 403 ENDDO 401 404 ENDIF 405 #endif 402 406 403 407 ! SURFACE boundary conditions -
branches/UKMO/CO6_shelfclimate_fabm/NEMOGCM/NEMO/TOP_SRC/trcbdy.F90
r7567 r7835 34 34 !!---------------------------------------------------------------------- 35 35 !! NEMO/OPA 3.6 , NEMO Consortium (2015) 36 !! $Id$ 36 !! $Id$ 37 37 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 38 38 !!---------------------------------------------------------------------- … … 167 167 TYPE(OBC_DATA), INTENT(in) :: dta ! OBC external data 168 168 !! 169 REAL(wp) :: z wgt! boundary weight169 REAL(wp) :: zcoef, zcoef1, zcoef2 ! boundary weight 170 170 INTEGER :: ib, ik, igrd ! dummy loop indices 171 INTEGER :: ii, ij, zcoef, zcoef1, zcoef2,ip, jp ! 2D addresses171 INTEGER :: ii, ij, ip, jp ! 2D addresses 172 172 !!---------------------------------------------------------------------- 173 173 ! … … 180 180 DO ik = 1, jpkm1 181 181 ! search the sense of the gradient 182 zcoef1 = bdytmask(ii-1,ij ) + bdytmask(ii+1,ij)183 zcoef2 = bdytmask(ii ,ij-1) + bdytmask(ii ,ij+1)184 IF ( zcoef1+zcoef2== 0) THEN182 zcoef1 = bdytmask(ii-1,ij )*tmask(ii-1,ij,ik) + bdytmask(ii+1,ij )*tmask(ii+1,ij,ik) 183 zcoef2 = bdytmask(ii ,ij-1)*tmask(ii,ij-1,ik) + bdytmask(ii ,ij+1)*tmask(ii,ij+1,ik) 184 IF ( nint(zcoef1+zcoef2) == 0) THEN 185 185 ! corner 186 186 zcoef = tmask(ii-1,ij,ik) + tmask(ii+1,ij,ik) + tmask(ii,ij-1,ik) + tmask(ii,ij+1,ik) 187 tra(ii,ij,ik,jn) = tra(ii-1,ij ,ik,jn) * tmask(ii-1,ij ,ik) + & 188 & tra(ii+1,ij ,ik,jn) * tmask(ii+1,ij ,ik) + & 189 & tra(ii ,ij-1,ik,jn) * tmask(ii ,ij-1,ik) + & 190 & tra(ii ,ij+1,ik,jn) * tmask(ii ,ij+1,ik) 191 tra(ii,ij,ik,jn) = ( tra(ii,ij,ik,jn) / MAX( 1, zcoef) ) * tmask(ii,ij,ik) 187 IF (zcoef > .5_wp) THEN ! Only set not isolated points. 188 tra(ii,ij,ik,jn) = tra(ii-1,ij ,ik,jn) * tmask(ii-1,ij ,ik) + & 189 & tra(ii+1,ij ,ik,jn) * tmask(ii+1,ij ,ik) + & 190 & tra(ii ,ij-1,ik,jn) * tmask(ii ,ij-1,ik) + & 191 & tra(ii ,ij+1,ik,jn) * tmask(ii ,ij+1,ik) 192 tra(ii,ij,ik,jn) = ( tra(ii,ij,ik,jn) / zcoef ) * tmask(ii,ij,ik) 193 ENDIF 194 ELSEIF ( nint(zcoef1+zcoef2) == 2) THEN 195 ! oblique corner 196 zcoef = tmask(ii-1,ij,ik)*bdytmask(ii-1,ij ) + tmask(ii+1,ij,ik)*bdytmask(ii+1,ij ) + & 197 & tmask(ii,ij-1,ik)*bdytmask(ii,ij -1 ) + tmask(ii,ij+1,ik)*bdytmask(ii,ij+1 ) 198 tra(ii,ij,ik,jn) = tra(ii-1,ij ,ik,jn) * tmask(ii-1,ij ,ik)*bdytmask(ii-1,ij ) + & 199 & tra(ii+1,ij ,ik,jn) * tmask(ii+1,ij ,ik)*bdytmask(ii+1,ij ) + & 200 & tra(ii ,ij-1,ik,jn) * tmask(ii ,ij-1,ik)*bdytmask(ii,ij -1 ) + & 201 & tra(ii ,ij+1,ik,jn) * tmask(ii ,ij+1,ik)*bdytmask(ii,ij+1 ) 202 203 tra(ii,ij,ik,jn) = ( tra(ii,ij,ik,jn) / MAX(1._wp, zcoef) ) * tmask(ii,ij,ik) 192 204 ELSE 193 ip = bdytmask(ii+1,ij ) - bdytmask(ii-1,ij)194 jp = bdytmask(ii ,ij+1) - bdytmask(ii ,ij-1)195 tra(ii,ij,ik,jn) = tra(ii+ip,ij+jp,ik,jn) * tmask(ii+ip,ij+jp,ik) 205 ip = nint(bdytmask(ii+1,ij )*tmask(ii+1,ij,ik) - bdytmask(ii-1,ij )*tmask(ii-1,ij,ik)) 206 jp = nint(bdytmask(ii ,ij+1)*tmask(ii,ij+1,ik) - bdytmask(ii ,ij-1)*tmask(ii,ij-1,ik)) 207 tra(ii,ij,ik,jn) = tra(ii+ip,ij+jp,ik,jn) * tmask(ii+ip,ij+jp,ik) * tmask(ii,ij,ik) 196 208 ENDIF 197 209 END DO -
branches/UKMO/CO6_shelfclimate_fabm/NEMOGCM/NEMO/TOP_SRC/trcini.F90
r7567 r7835 24 24 USE trcini_c14b ! C14 bomb initialisation 25 25 USE trcini_my_trc ! MY_TRC initialisation 26 ! +++>>> FABM 27 USE trcsms_fabm ! FABM initialisation 28 USE trcini_fabm ! FABM initialisation 29 ! FABM <<<FABM 26 30 USE trcdta ! initialisation from files 27 31 USE daymod ! calendar manager … … 70 74 IF(lwp) WRITE(numout,*) 'trc_init : initial set up of the passive tracers' 71 75 IF(lwp) WRITE(numout,*) '~~~~~~~' 76 ! +++>>> FABM 77 ! Allow FABM to update numbers of biogeochemical tracers, diagnostics (jptra etc.) 78 IF( lk_fabm ) CALL nemo_fabm_init 79 ! FABM <<<+++ 72 80 73 81 CALL top_alloc() ! allocate TOP arrays … … 102 110 IF( lk_c14b ) CALL trc_ini_c14b ! C14 bomb tracer 103 111 IF( lk_my_trc ) CALL trc_ini_my_trc ! MY_TRC tracers 112 ! +++>>> FABM 113 IF( lk_fabm ) CALL trc_ini_fabm ! FABM tracers 114 ! FABM <<<+++ 104 115 105 116 CALL trc_ice_ini ! Tracers in sea ice … … 141 152 CALL wrk_dealloc( jpi, jpj, jpk, ztrcdta ) 142 153 ENDIF 143 ! slwa temporary insert initialise tracer 144 trn(:,:,:,:) = 0._wp 145 if(nproc.eq.39)then 146 DO jn = 1, jptra 147 trn(:,:,:,jn) = 100._wp * tmask(:,:,:) 148 ENDDO 149 endif 150 !!!! slwa temp 151 ! 152 trb(:,:,:,:) = trn(:,:,:,:) 153 ! 154 ENDIF 154 ENDIF 155 ! --->>> FABM 155 156 ! Initialisation of tracers Boundary Conditions - here so that you can use initial condition as boundary 156 IF( lk_my_trc ) CALL trc_bc_init(jptra) 157 !IF( lk_my_trc ) CALL trc_bc_init(jptra) 158 ! FABM <<<--- 159 ! FABM +++>>> 160 ! Initialisation of FABM diagnostics and tracer boundary conditions (so that you can use initial condition as boundary) 161 IF( lk_fabm ) THEN 162 wndm=0._wp !uninitiased field at this point 163 qsr=0._wp !uninitiased field at this point 164 CALL compute_fabm ! only needed to set-up diagnostics 165 CALL trc_bc_init(jptra) 166 ENDIF 167 ! FABM <<<+++ 157 168 158 169 tra(:,:,:,:) = 0._wp … … 169 180 trai(:) = 0._wp ! initial content of all tracers 170 181 DO jn = 1, jptra 171 trai(jn) = trai(jn) + glob_sum( trn(:,:,:,jn) * cvol(:,:,:) ) 182 !trai(jn) = trai(jn) + glob_sum( trn(:,:,:,jn) * cvol(:,:,:) ) 183 trai(jn) = trai(jn) 172 184 END DO 173 185 -
branches/UKMO/CO6_shelfclimate_fabm/NEMOGCM/NEMO/TOP_SRC/trcnam.F90
r7567 r7835 25 25 USE trcnam_c14b ! C14 SMS namelist 26 26 USE trcnam_my_trc ! MY_TRC SMS namelist 27 ! +++>>> FABM 28 USE trcnam_fabm ! FABM SMS namelist 29 ! FABM <<<+++ 27 30 USE trd_oce 28 31 USE trdtrc_oce … … 178 181 ELSE ; IF(lwp) WRITE(numout,*) ' MY_TRC not used' 179 182 ENDIF 183 184 ! +++>>> FABM 185 IF( lk_fabm ) THEN ; CALL trc_nam_fabm ! FABM tracers 186 ELSE ; IF(lwp) WRITE(numout,*) ' FABM not used' 187 ENDIF 188 ! FABM <<<+++ 180 189 ! 181 190 END SUBROUTINE trc_nam … … 197 206 198 207 199 IF(lwp) WRITE(numout,*) 'trc_nam : read the passive tracer namelists'208 IF(lwp) WRITE(numout,*) 'trc_nam_run : read the passive tracer namelists' 200 209 IF(lwp) WRITE(numout,*) '~~~~~~~' 201 210 … … 244 253 245 254 ! --- Namelist declarations --- ! 246 TYPE(TRC_I_NML), DIMENSION(jptra) :: sn_tri_tracer 255 ! --->>> FABM 256 !TYPE(TRC_I_NML), DIMENSION(jptra) :: sn_tri_tracer 257 ! FABM <<<--- 258 ! +++>>> FABM 259 TYPE(TRC_I_NML), DIMENSION(jpmaxtrc) :: sn_tri_tracer 260 ! FABM <<<+++ 247 261 NAMELIST/namtrc_ice/ nn_ice_tr, sn_tri_tracer 248 262 … … 288 302 !! 289 303 !!--------------------------------------------------------------------- 290 TYPE(PTRACER), DIMENSION(jptra) :: sn_tracer ! type of tracer for saving if not key_iomput 291 !! 292 NAMELIST/namtrc/ sn_tracer, ln_trcdta,ln_trcdmp, ln_trcdmp_clo 304 ! --->>> FABM 305 !TYPE(PTRACER), DIMENSION(jptra) :: sn_tracer ! type of tracer for saving if not key_iomput 306 ! FABM <<<--- 307 ! +++>>> FABM 308 TYPE(PTRACER), DIMENSION(jpmaxtrc) :: sn_tracer ! type of tracer for saving if not key_iomput 309 ! FABM <<<+++ 310 !! 311 NAMELIST/namtrc/ sn_tracer, ln_trcdta, ln_trcdmp, ln_trcdmp_clo 293 312 294 313 INTEGER :: ios ! Local integer output status for namelist read … … 296 315 !!--------------------------------------------------------------------- 297 316 IF(lwp) WRITE(numout,*) 298 IF(lwp) WRITE(numout,*) 'trc_nam : read the passive tracer namelists'317 IF(lwp) WRITE(numout,*) 'trc_nam_trc : read the passive tracer namelists' 299 318 IF(lwp) WRITE(numout,*) '~~~~~~~' 300 319 320 ! Initialise logical flags to .FALSE.: 321 sn_tracer(:)%llinit = .FALSE. 322 sn_tracer(:)%llsave = .FALSE. 323 #ifdef key_fabm 324 sn_tracer(:)%llsbc = .FALSE. 325 sn_tracer(:)%llcbc = .FALSE. 326 sn_tracer(:)%llcbc = .FALSE. 327 #endif 301 328 302 329 REWIND( numnat_ref ) ! Namelist namtrc in reference namelist : Passive tracer variables … … 314 341 ctrcun (jn) = TRIM( sn_tracer(jn)%clunit ) 315 342 ln_trc_ini(jn) = sn_tracer(jn)%llinit 316 #if defined key_my_trc 343 ! --->>> FABM 344 !!#if defined key_my_trc 345 ! FABM <<<--- 346 ! +++>>> FABM 347 #if defined key_fabm 348 ! FABM <<<+++ 317 349 ln_trc_sbc(jn) = sn_tracer(jn)%llsbc 318 350 ln_trc_cbc(jn) = sn_tracer(jn)%llcbc … … 321 353 ln_trc_wri(jn) = sn_tracer(jn)%llsave 322 354 END DO 323 355 356 ! +++>>> FABM 357 if (lk_fabm) CALL trc_nam_fabm_override 358 ! FABM <<<+++ 324 359 END SUBROUTINE trc_nam_trc 325 360 -
branches/UKMO/CO6_shelfclimate_fabm/NEMOGCM/NEMO/TOP_SRC/trcrst.F90
r7566 r7835 28 28 USE iom 29 29 USE daymod 30 ! +++>>> FABM 31 USE trcrst_fabm 32 ! FABM <<<+++ 30 33 IMPLICIT NONE 31 34 PRIVATE … … 117 120 CALL iom_get( numrtr, jpdom_autoglo, 'TRB'//ctrcnm(jn), trb(:,:,:,jn) ) 118 121 END DO 122 ! +++>>> FABM 123 124 IF (lk_fabm) CALL trc_rst_read_fabm 125 ! FABM <<<+++ 119 126 ! 120 127 END SUBROUTINE trc_rst_read … … 142 149 CALL iom_rstput( kt, nitrst, numrtw, 'TRB'//ctrcnm(jn), trb(:,:,:,jn) ) 143 150 END DO 151 ! +++>>> FABM 152 IF (lk_fabm) CALL trc_rst_wri_fabm(kt) 153 ! FABM <<<+++ 144 154 ! 145 155 IF( kt == nitrst ) THEN -
branches/UKMO/CO6_shelfclimate_fabm/NEMOGCM/NEMO/TOP_SRC/trcsms.F90
r7566 r7835 19 19 USE trcsms_c14b ! C14b tracer 20 20 USE trcsms_my_trc ! MY_TRC tracers 21 ! +++>>>> FABM 22 USE trcsms_fabm ! FABM tracers 23 ! FABM <<<+++ 21 24 USE prtctl_trc ! Print control for debbuging 22 25 … … 52 55 IF( lk_c14b ) CALL trc_sms_c14b ( kt ) ! surface fluxes of C14 53 56 IF( lk_my_trc ) CALL trc_sms_my_trc ( kt ) ! MY_TRC tracers 57 ! +++>>> FABM 58 IF( lk_fabm ) CALL trc_sms_fabm ( kt ) ! FABM tracers 59 ! FABM <<<+++ 54 60 55 61 IF(ln_ctl) THEN ! print mean trends (used for debugging) -
branches/UKMO/CO6_shelfclimate_fabm/NEMOGCM/NEMO/TOP_SRC/trcwri.F90
r7567 r7835 21 21 USE trcwri_c14b 22 22 USE trcwri_my_trc 23 ! +++>>> FABM 24 USE trcwri_fabm 25 ! FABM <<<+++ 23 26 24 27 IMPLICIT NONE … … 72 75 IF( lk_my_trc ) CALL trc_wri_my_trc ! MY_TRC tracers 73 76 #endif 77 ! +++>>>FABM 78 IF( lk_fabm ) CALL trc_wri_fabm ! FABM tracers 79 ! FABM <<<+++ 74 80 ! 75 81 IF( nn_timing == 1 ) CALL timing_stop('trc_wri')
Note: See TracChangeset
for help on using the changeset viewer.