- Timestamp:
- 2012-11-15T19:09:49+01:00 (12 years ago)
- Location:
- branches/2012/dev_r3387_LOCEAN6_AGRIF_LIM/NEMOGCM/NEMO/TOP_SRC
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2012/dev_r3387_LOCEAN6_AGRIF_LIM/NEMOGCM/NEMO/TOP_SRC/TRP/trcnxt.F90
r3294 r3566 34 34 USE tranxt 35 35 # if defined key_agrif 36 USE agrif_top_update37 36 USE agrif_top_interp 38 37 # endif … … 146 145 ENDIF 147 146 148 #if defined key_agrif149 ! Update tracer at AGRIF zoom boundaries150 IF( .NOT.Agrif_Root() ) CALL Agrif_Update_Trc( kt ) ! children only151 #endif152 153 147 ! trends computation 154 148 IF( l_trdtrc ) THEN ! trends -
branches/2012/dev_r3387_LOCEAN6_AGRIF_LIM/NEMOGCM/NEMO/TOP_SRC/TRP/trctrp.F90
r3294 r3566 29 29 30 30 #if defined key_agrif 31 USE agrif_top_sponge ! Momemtum and tracers sponges 31 USE agrif_top_sponge ! tracers sponges 32 USE agrif_top_update ! tracers updates 32 33 #endif 33 34 … … 76 77 CALL trc_nxt( kstp ) ! tracer fields at next time step 77 78 IF( ln_trcrad ) CALL trc_rad( kstp ) ! Correct artificial negative concentrations 79 80 #if defined key_agrif 81 IF( .NOT. Agrif_Root()) CALL Agrif_Update_Trc( kstp ) ! Update tracer at AGRIF zoom boundaries : children only 82 #endif 78 83 IF( ln_zps ) CALL zps_hde( kstp, jptra, trn, gtru, gtrv ) ! Partial steps: now horizontal gradient of passive 79 84 ! tracers at the bottom ocean level … … 98 103 !!---------------------------------------------------------------------- 99 104 CONTAINS 100 SUBROUTINE trc_trp( k t) ! Empty routine101 INTEGER, INTENT(in) :: k t102 WRITE(*,*) 'trc_trp: You should not have seen this print! error?', k t105 SUBROUTINE trc_trp( kstp ) ! Empty routine 106 INTEGER, INTENT(in) :: kstp 107 WRITE(*,*) 'trc_trp: You should not have seen this print! error?', kstp 103 108 END SUBROUTINE trc_trp 104 109 #endif -
branches/2012/dev_r3387_LOCEAN6_AGRIF_LIM/NEMOGCM/NEMO/TOP_SRC/oce_trc.F90
r3294 r3566 56 56 57 57 !* model domain * 58 USE dom_oce , ONLY : lzoom => lzoom !: zoom flag 59 USE dom_oce , ONLY : lzoom_e => lzoom_e !: East zoom type flag 60 USE dom_oce , ONLY : lzoom_w => lzoom_w !: West zoom type flag 61 USE dom_oce , ONLY : lzoom_s => lzoom_s !: South zoom type flag 62 USE dom_oce , ONLY : lzoom_n => lzoom_n !: North zoom type flag 63 USE dom_oce , ONLY : lzoom_arct => lzoom_arct !: ORCA arctic zoom flag 64 USE dom_oce , ONLY : lzoom_anta => lzoom_anta !: ORCA antarctic zoom flag 65 USE dom_oce , ONLY : nperio => nperio !: type of lateral boundary condition 66 USE dom_oce , ONLY : nimpp => nimpp !: i index for mpp-subdomain left bottom 67 USE dom_oce , ONLY : njmpp => njmpp !: j index for mpp-subdomain left bottom 68 USE dom_oce , ONLY : nproc => nproc !: number for local processor 69 USE dom_oce , ONLY : narea => narea !: number for local area 70 USE dom_oce , ONLY : mig => mig !: local ==> global domain i-indice 71 USE dom_oce , ONLY : mjg => mjg !: local ==> global domain i-indice 72 USE dom_oce , ONLY : mi0 => mi0 !: global ==> local domain i-indice 73 USE dom_oce , ONLY : mi1 => mi1 !: (mi0=1 and mi1=0 if the global indice is not in the local one) 74 USE dom_oce , ONLY : mj0 => mj0 !: global ==> local domain j-indice 75 USE dom_oce , ONLY : mj1 => mj1 !: (mj0=1 and mj1=0 if the global indice is not in the local one) 76 USE dom_oce , ONLY : nidom => nidom 77 USE dom_oce , ONLY : nimppt => nimppt !:i-indexes for each processor 78 USE dom_oce , ONLY : njmppt => njmppt !:j-indexes for each processor 79 USE dom_oce , ONLY : ibonit => ibonit !:i-processor neighbour existence 80 USE dom_oce , ONLY : ibonjt => ibonjt !:j- processor neighbour existence 81 USE dom_oce , ONLY : nlci => nlci !:i- & j-dimensions of the local subdomain 82 USE dom_oce , ONLY : nlcj => nlcj !: 83 USE dom_oce , ONLY : nldi => nldi !:first and last indoor i- and j-indexes 84 USE dom_oce , ONLY : nlei => nlei !: 85 USE dom_oce , ONLY : nldj => nldj !: 86 USE dom_oce , ONLY : nlej => nlej !: 87 USE dom_oce , ONLY : nlcit => nlcit !:dimensions of every i-subdomain 88 USE dom_oce , ONLY : nlcjt => nlcjt !:dimensions of every j-subdomain 89 USE dom_oce , ONLY : nldit => nldit !:first indoor index for each i-domain 90 USE dom_oce , ONLY : nleit => nleit !:last indoor index for each i-domain 91 USE dom_oce , ONLY : nldjt => nldjt !:first indoor index for each j-domain 92 USE dom_oce , ONLY : nlejt => nlejt !:last indoor index for each j-domain 93 94 !* horizontal mesh * 95 USE dom_oce , ONLY : glamt => glamt !: longitude of t-point (degre) 96 USE dom_oce , ONLY : glamu => glamu !: longitude of t-point (degre) 97 USE dom_oce , ONLY : glamv => glamv !: longitude of t-point (degre) 98 USE dom_oce , ONLY : glamf => glamf !: longitude of t-point (degre) 99 USE dom_oce , ONLY : gphit => gphit !: latitude of t-point (degre) 100 USE dom_oce , ONLY : gphiu => gphiu !: latitude of t-point (degre) 101 USE dom_oce , ONLY : gphiv => gphiv !: latitude of t-point (degre) 102 USE dom_oce , ONLY : gphif => gphif !: latitude of t-point (degre) 103 USE dom_oce , ONLY : e1t => e1t !: horizontal scale factors at t-point (m) 104 USE dom_oce , ONLY : e2t => e2t !: horizontal scale factors at t-point (m) 105 USE dom_oce , ONLY : e1e2t => e1e2t !: cell surface at t-point (m2) 106 USE dom_oce , ONLY : e1u => e1u !: horizontal scale factors at u-point (m) 107 USE dom_oce , ONLY : e2u => e2u !: horizontal scale factors at u-point (m) 108 USE dom_oce , ONLY : e1v => e1v !: horizontal scale factors at v-point (m) 109 USE dom_oce , ONLY : e2v => e2v !: horizontal scale factors at v-point (m) 110 111 !* vertical mesh * 112 USE dom_oce , ONLY : gdept_0 => gdept_0 !: reference depth of t-points (m) 113 USE dom_oce , ONLY : e3t_0 => e3t_0 !: reference depth of t-points (m) 114 USE dom_oce , ONLY : e3w_0 => e3w_0 !: reference depth of w-points (m) 115 USE dom_oce , ONLY : gdepw_0 => gdepw_0 !: reference depth of w-points (m) 116 # if ! defined key_zco 117 USE dom_oce , ONLY : gdep3w => gdep3w !: ??? 118 USE dom_oce , ONLY : gdept => gdept !: depth of t-points (m) 119 USE dom_oce , ONLY : gdepw => gdepw !: depth of t-points (m) 120 USE dom_oce , ONLY : e3t => e3t !: vertical scale factors at t- 121 USE dom_oce , ONLY : e3u => e3u !: vertical scale factors at u- 122 USE dom_oce , ONLY : e3v => e3v !: vertical scale factors v- 123 USE dom_oce , ONLY : e3w => e3w !: w-points (m) 124 USE dom_oce , ONLY : e3f => e3f !: f-points (m) 125 USE dom_oce , ONLY : e3uw => e3uw !: uw-points (m) 126 USE dom_oce , ONLY : e3vw => e3vw !: vw-points (m) 127 # endif 128 USE dom_oce , ONLY : ln_zps => ln_zps !: partial steps flag 129 USE dom_oce , ONLY : ln_sco => ln_sco !: s-coordinate flag 130 USE dom_oce , ONLY : ln_zco => ln_zco !: z-coordinate flag 131 USE dom_oce , ONLY : hbatt => hbatt !: ocean depth at the vertical of t-point (m) 132 USE dom_oce , ONLY : hbatu => hbatu !: ocean depth at the vertical of u-point (m) 133 USE dom_oce , ONLY : hbatv => hbatv !: ocean depth at the vertical of w-point (m) 134 USE dom_oce , ONLY : gsigt => gsigt !: model level depth coefficient at T-levels 135 USE dom_oce , ONLY : gsigw => gsigw !: model level depth coefficient at W-levels 136 USE dom_oce , ONLY : gsi3w => gsi3w !: model level depth coef at w-levels (defined as the sum of e3w) 137 USE dom_oce , ONLY : esigt => esigt !: vertical scale factor coef. at t-levels 138 USE dom_oce , ONLY : esigw => esigw !: vertical scale factor coef. at w-levels 139 USE dom_oce , ONLY : lk_vvl => lk_vvl !: variable grid flag 140 # if defined key_vvl 141 USE dom_oce , ONLY : gdep3w_1 => gdep3w_1 !: ??? 142 USE dom_oce , ONLY : gdept_1 => gdept_1 !: depth of t-points (m) 143 USE dom_oce , ONLY : gdepw_1 => gdepw_1 !: depth of t-points (m) 144 USE dom_oce , ONLY : e3t_1 => e3t_1 !: vertical scale factors at t- 145 USE dom_oce , ONLY : e3u_1 => e3u_1 !: vertical scale factors at u- 146 USE dom_oce , ONLY : e3v_1 => e3v_1 !: vertical scale factors v- 147 USE dom_oce , ONLY : e3w_1 => e3w_1 !: w-points (m) 148 USE dom_oce , ONLY : e3f_1 => e3f_1 !: f-points (m) 149 USE dom_oce , ONLY : e3uw_1 => e3uw_1 !: uw-points (m) 150 USE dom_oce , ONLY : e3vw_1 => e3vw_1 !: vw-points (m) 151 # endif 152 !* masks, bathymetry * 153 USE dom_oce , ONLY : mbkt => mbkt !: vertical index of the bottom last T- ocean level 154 USE dom_oce , ONLY : mbku => mbku !: vertical index of the bottom last U- ocean level 155 USE dom_oce , ONLY : mbkv => mbkv !: vertical index of the bottom last V- ocean level 156 USE dom_oce , ONLY : tmask_i => tmask_i !: Interior mask at t-points 157 USE dom_oce , ONLY : tmask => tmask !: land/ocean mask at t-points 158 USE dom_oce , ONLY : umask => umask !: land/ocean mask at u-points 159 USE dom_oce , ONLY : vmask => vmask !: land/ocean mask at v-points 160 USE dom_oce , ONLY : fmask => fmask !: land/ocean mask at f-points 161 162 !* time domain * 163 USE dom_oce , ONLY : neuler => neuler !: restart euler forward option (0=Euler) 164 USE dom_oce , ONLY : rdt => rdt !: time step for the dynamics 165 USE dom_oce , ONLY : atfp => atfp !: asselin time filter parameter 166 USE dom_oce , ONLY : atfp1 => atfp1 !: asselin time filter coeff. (atfp1= 1-2*atfp) 167 USE dom_oce , ONLY : rdttra => rdttra !: vertical profile of tracer time step 168 ! !: it is the accumulated duration of previous runs 169 ! !: that may have been run with different time steps. 170 !* calendar variables * 171 USE dom_oce , ONLY : nyear => nyear !: current year 172 USE dom_oce , ONLY : nmonth => nmonth !: current month 173 USE dom_oce , ONLY : nday => nday !: current day of the month 174 USE dom_oce , ONLY : ndastp => ndastp !: time step date in yyyymmdd format 175 USE dom_oce , ONLY : nday_year => nday_year !: current day counted from jan 1st of the current year 176 USE dom_oce , ONLY : nsec_year => nsec_year !: current time step counted in second since 00h jan 1st of the current year 177 USE dom_oce , ONLY : nsec_month => nsec_month !: current time step counted in second since 00h 1st day of the current month 178 USE dom_oce , ONLY : nsec_day => nsec_day !: current time step counted in second since 00h of the current day 179 USE dom_oce , ONLY : fjulday => fjulday !: julian day 180 USE dom_oce , ONLY : adatrj => adatrj !: number of elapsed days since the begining of the whole simulation 181 !: (cumulative duration of previous runs 182 !: that may have used different time-step size) 183 USE dom_oce , ONLY : nyear_len => nyear_len !: length in days of the previous/current year 184 USE dom_oce , ONLY : nmonth_len => nmonth_len !: length in days of the months of the current year 58 USE dom_oce 185 59 186 60 … … 217 91 USE oce , ONLY : grv => grv !: 218 92 #endif 219 220 USE dom_oce , ONLY : nn_cla => nn_cla !: flag (0/1) for cross land advection221 93 222 94 !* surface fluxes * -
branches/2012/dev_r3387_LOCEAN6_AGRIF_LIM/NEMOGCM/NEMO/TOP_SRC/prtctl_trc.F90
r3294 r3566 17 17 USE par_trc ! TOP parameters 18 18 USE oce_trc ! ocean space and time domain variables 19 USE prtctl ! print control for OPA 19 20 20 21 IMPLICIT NONE … … 296 297 END SUBROUTINE prt_ctl_trc_init 297 298 298 299 SUBROUTINE sub_dom300 !!----------------------------------------------------------------------301 !! *** ROUTINE sub_dom ***302 !!303 !! ** Purpose : Lay out the global domain over processors.304 !! CAUTION:305 !! This part has been extracted from the mpp_init306 !! subroutine and names of variables/arrays have been307 !! slightly changed to avoid confusion but the computation308 !! is exactly the same. Any modification about indices of309 !! each sub-domain in the mppini.F90 module should be reported310 !! here.311 !!312 !! ** Method : Global domain is distributed in smaller local domains.313 !! Periodic condition is a function of the local domain position314 !! (global boundary or neighbouring domain) and of the global315 !! periodic316 !! Type : jperio global periodic condition317 !! nperio local periodic condition318 !!319 !! ** Action : - set domain parameters320 !! nimpp : longitudinal index321 !! njmpp : latitudinal index322 !! nperio : lateral condition type323 !! narea : number for local area324 !! nlcil : first dimension325 !! nlcjl : second dimension326 !! nbondil : mark for "east-west local boundary"327 !! nbondjl : mark for "north-south local boundary"328 !!----------------------------------------------------------------------329 INTEGER :: ji, jj, js ! dummy loop indices330 INTEGER :: ii, ij ! temporary integers331 INTEGER :: irestil, irestjl ! " "332 INTEGER :: ijpi , ijpj, nlcil ! temporary logical unit333 INTEGER :: nlcjl , nbondil, nbondjl334 INTEGER :: nrecil, nrecjl, nldil, nleil, nldjl, nlejl335 REAL(wp) :: zidom, zjdom ! temporary scalars336 INTEGER, POINTER, DIMENSION(:,:) :: iimpptl, ijmpptl, ilcitl, ilcjtl ! temporary workspace337 !!----------------------------------------------------------------------338 !339 CALL wrk_alloc( isplt, jsplt, ilcitl, ilcjtl, iimpptl, ijmpptl )340 !341 ! Dimension arrays for subdomains342 ! -------------------------------343 ! Computation of local domain sizes ilcitl() ilcjtl()344 ! These dimensions depend on global sizes isplt,jsplt and jpiglo,jpjglo345 ! The subdomains are squares leeser than or equal to the global346 ! dimensions divided by the number of processors minus the overlap347 ! array (cf. par_oce.F90).348 349 ijpi = ( jpiglo-2*jpreci + (isplt-1) ) / isplt + 2*jpreci350 ijpj = ( jpjglo-2*jprecj + (jsplt-1) ) / jsplt + 2*jprecj351 352 nrecil = 2 * jpreci353 nrecjl = 2 * jprecj354 irestil = MOD( jpiglo - nrecil , isplt )355 irestjl = MOD( jpjglo - nrecjl , jsplt )356 357 IF( irestil == 0 ) irestil = isplt358 DO jj = 1, jsplt359 DO ji = 1, irestil360 ilcitl(ji,jj) = ijpi361 END DO362 DO ji = irestil+1, isplt363 ilcitl(ji,jj) = ijpi -1364 END DO365 END DO366 367 IF( irestjl == 0 ) irestjl = jsplt368 DO ji = 1, isplt369 DO jj = 1, irestjl370 ilcjtl(ji,jj) = ijpj371 END DO372 DO jj = irestjl+1, jsplt373 ilcjtl(ji,jj) = ijpj -1374 END DO375 END DO376 377 zidom = nrecil378 DO ji = 1, isplt379 zidom = zidom + ilcitl(ji,1) - nrecil380 END DO381 382 zjdom = nrecjl383 DO jj = 1, jsplt384 zjdom = zjdom + ilcjtl(1,jj) - nrecjl385 END DO386 387 ! Index arrays for subdomains388 ! ---------------------------389 390 iimpptl(:,:) = 1391 ijmpptl(:,:) = 1392 393 IF( isplt > 1 ) THEN394 DO jj = 1, jsplt395 DO ji = 2, isplt396 iimpptl(ji,jj) = iimpptl(ji-1,jj) + ilcitl(ji-1,jj) - nrecil397 END DO398 END DO399 ENDIF400 401 IF( jsplt > 1 ) THEN402 DO jj = 2, jsplt403 DO ji = 1, isplt404 ijmpptl(ji,jj) = ijmpptl(ji,jj-1)+ilcjtl(ji,jj-1)-nrecjl405 END DO406 END DO407 ENDIF408 409 ! Subdomain description410 ! ---------------------411 412 DO js = 1, ijsplt413 ii = 1 + MOD( js-1, isplt )414 ij = 1 + (js-1) / isplt415 nimpptl(js) = iimpptl(ii,ij)416 njmpptl(js) = ijmpptl(ii,ij)417 nlcitl (js) = ilcitl (ii,ij)418 nlcil = nlcitl (js)419 nlcjtl (js) = ilcjtl (ii,ij)420 nlcjl = nlcjtl (js)421 nbondjl = -1 ! general case422 IF( js > isplt ) nbondjl = 0 ! first row of processor423 IF( js > (jsplt-1)*isplt ) nbondjl = 1 ! last row of processor424 IF( jsplt == 1 ) nbondjl = 2 ! one processor only in j-direction425 ibonjtl(js) = nbondjl426 427 nbondil = 0 !428 IF( MOD( js, isplt ) == 1 ) nbondil = -1 !429 IF( MOD( js, isplt ) == 0 ) nbondil = 1 !430 IF( isplt == 1 ) nbondil = 2 ! one processor only in i-direction431 ibonitl(js) = nbondil432 433 nldil = 1 + jpreci434 nleil = nlcil - jpreci435 IF( nbondil == -1 .OR. nbondil == 2 ) nldil = 1436 IF( nbondil == 1 .OR. nbondil == 2 ) nleil = nlcil437 nldjl = 1 + jprecj438 nlejl = nlcjl - jprecj439 IF( nbondjl == -1 .OR. nbondjl == 2 ) nldjl = 1440 IF( nbondjl == 1 .OR. nbondjl == 2 ) nlejl = nlcjl441 nlditl(js) = nldil442 nleitl(js) = nleil443 nldjtl(js) = nldjl444 nlejtl(js) = nlejl445 END DO446 !447 CALL wrk_dealloc( isplt, jsplt, ilcitl, ilcjtl, iimpptl, ijmpptl )448 !449 END SUBROUTINE sub_dom450 451 299 #else 452 300 !!----------------------------------------------------------------------
Note: See TracChangeset
for help on using the changeset viewer.