ldfdyn_c3d.h90 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433
  1. !!----------------------------------------------------------------------
  2. !! *** ldfdyn_c3d.h90 ***
  3. !!----------------------------------------------------------------------
  4. !!----------------------------------------------------------------------
  5. !! NEMO/OPA 3.3 , NEMO Consortium (2010)
  6. !! $Id: ldfdyn_c3d.h90 4292 2013-11-20 16:28:04Z cetlod $
  7. !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
  8. !!----------------------------------------------------------------------
  9. !!----------------------------------------------------------------------
  10. !! 'key_dynldf_c3d' 3D lateral eddy viscosity coefficients
  11. !!----------------------------------------------------------------------
  12. SUBROUTINE ldf_dyn_c3d( ld_print )
  13. !!----------------------------------------------------------------------
  14. !! *** ROUTINE ldf_dyn_c3d ***
  15. !!
  16. !! ** Purpose : initializations of the horizontal ocean physics
  17. !!
  18. !! ** Method : 3D eddy viscosity coef. ( longitude, latitude, depth )
  19. !! laplacian operator : ahm1, ahm2 defined at T- and F-points
  20. !! ahm2, ahm4 never used
  21. !! bilaplacian operator : ahm1, ahm2 never used
  22. !! : ahm3, ahm4 defined at U- and V-points
  23. !! ??? explanation of the default is missing
  24. !!----------------------------------------------------------------------
  25. USE ldftra_oce, ONLY : aht0
  26. USE iom
  27. !!
  28. LOGICAL, INTENT (in) :: ld_print ! If true, output arrays on numout
  29. !!
  30. INTEGER :: ji, jj, jk ! dummy loop indices
  31. REAL(wp) :: zr = 0.2 ! maximum of the reduction factor at the bottom ocean ( 0 < zr < 1 )
  32. REAL(wp) :: zh = 500. ! depth of at which start the reduction ( > dept(1) )
  33. REAL(wp) :: zd_max ! maximum grid spacing over the global domain
  34. REAL(wp) :: za00, zc, zd, zetmax, zefmax, zeumax, zevmax ! local scalars
  35. REAL(wp), POINTER, DIMENSION(:) :: zcoef
  36. !!----------------------------------------------------------------------
  37. !
  38. CALL wrk_alloc( jpk, zcoef )
  39. !
  40. IF(lwp) WRITE(numout,*)
  41. IF(lwp) WRITE(numout,*) 'ldf_dyn_c3d : 3D lateral eddy viscosity coefficient'
  42. IF(lwp) WRITE(numout,*) '~~~~~~~~~~~'
  43. ! Set ahm1 and ahm2 ( T- and F- points) (used for laplacian operators
  44. ! ================= whatever its orientation is)
  45. IF( ln_dynldf_lap ) THEN
  46. ! define ahm1 and ahm2 at the right grid point position
  47. ! (USER: modify ahm1 and ahm2 following your desiderata)
  48. zd_max = MAX( MAXVAL( e1t(:,:) ), MAXVAL( e2t(:,:) ) )
  49. IF( lk_mpp ) CALL mpp_max( zd_max ) ! max over the global domain
  50. IF(lwp) WRITE(numout,*) ' laplacian operator: ahm proportional to e1'
  51. IF(lwp) WRITE(numout,*) ' maximum grid-spacing = ', zd_max, ' maximum value for ahm = ', ahm0
  52. za00 = ahm0 / zd_max
  53. IF( ln_dynldf_iso ) THEN
  54. IF(lwp) WRITE(numout,*) ' Caution, as implemented now, the isopycnal part of momentum'
  55. IF(lwp) WRITE(numout,*) ' mixing use aht0 as eddy viscosity coefficient. Thus, it is'
  56. IF(lwp) WRITE(numout,*) ' uniform and you must be sure that your ahm is greater than'
  57. IF(lwp) WRITE(numout,*) ' aht0 everywhere in the model domain.'
  58. ENDIF
  59. CALL ldf_zpf( .TRUE. , 1000., 500., 0.25, fsdept(:,:,:), ahm1 ) ! vertical profile
  60. CALL ldf_zpf( .TRUE. , 1000., 500., 0.25, fsdept(:,:,:), ahm2 ) ! vertical profile
  61. DO jk = 1,jpk
  62. DO jj = 1, jpj
  63. DO ji = 1, jpi
  64. zetmax = MAX( e1t(ji,jj), e2t(ji,jj) )
  65. zefmax = MAX( e1f(ji,jj), e2f(ji,jj) )
  66. ahm1(ji,jj,jk) = za00 * zetmax * ahm1(ji,jj,jk)
  67. ahm2(ji,jj,jk) = za00 * zefmax * ahm2(ji,jj,jk)
  68. END DO
  69. END DO
  70. END DO
  71. ! Special case for ORCA R1, R2 and R4 configurations (overwrite the value of ahm1 ahm2)
  72. ! ==============================================
  73. IF( cp_cfg == "orca" .AND. ( jp_cfg == 1 .OR. jp_cfg == 2 .OR. jp_cfg == 4 ) ) THEN
  74. IF(lwp) WRITE(numout,*)
  75. IF(lwp) WRITE(numout,*) ' ORCA R1, R2 or R4: overwrite the previous definition of ahm'
  76. IF(lwp) WRITE(numout,*) ' ================='
  77. CALL ldf_dyn_c3d_orca( ld_print )
  78. ENDIF
  79. ENDIF
  80. ! Control print
  81. IF(lwp .AND. ld_print ) THEN
  82. WRITE(numout,*)
  83. WRITE(numout,*) ' 3D ahm1 array (k=1)'
  84. CALL prihre( ahm1(:,:,1), jpi, jpj, 1, jpi, 20, 1, jpj, 20, 1.e-3, numout )
  85. WRITE(numout,*)
  86. WRITE(numout,*) ' 3D ahm2 array (k=1)'
  87. CALL prihre( ahm2(:,:,1), jpi, jpj, 1, jpi, 20, 1, jpj, 20, 1.e-3, numout )
  88. ENDIF
  89. ! ahm3 and ahm4 at U- and V-points (used for bilaplacian operator
  90. ! ================================ whatever its orientation is)
  91. ! (USER: modify ahm3 and ahm4 following your desiderata)
  92. ! Here: ahm is proportional to the cube of the maximum of the gridspacing
  93. ! in the to horizontal direction
  94. IF( ln_dynldf_bilap ) THEN
  95. zd_max = MAX( MAXVAL( e1u(:,:) ), MAXVAL( e2u(:,:) ) )
  96. IF( lk_mpp ) CALL mpp_max( zd_max ) ! max over the global domain
  97. IF(lwp) WRITE(numout,*) ' bi-laplacian operator: ahm proportional to e1**3 '
  98. IF(lwp) WRITE(numout,*) ' maximum grid-spacing = ', zd_max, ' maximum value for ahm = ', ahm0
  99. za00 = ahm0_blp / ( zd_max * zd_max * zd_max )
  100. DO jj = 1, jpj
  101. DO ji = 1, jpi
  102. zeumax = MAX( e1u(ji,jj), e2u(ji,jj) )
  103. zevmax = MAX( e1v(ji,jj), e2v(ji,jj) )
  104. ahm3(ji,jj,1) = za00 * zeumax * zeumax * zeumax
  105. ahm4(ji,jj,1) = za00 * zevmax * zevmax * zevmax
  106. END DO
  107. END DO
  108. zh = MAX( zh, fsdept(1,1,1) ) ! at least the first reach ahm0
  109. IF( ln_zco ) THEN ! z-coordinate, same profile everywhere
  110. IF(lwp) WRITE(numout,'(36x," ahm ", 7x)')
  111. DO jk = 1, jpk
  112. IF( fsdept(1,1,jk) <= zh ) THEN
  113. zcoef(jk) = 1.e0
  114. ELSE
  115. zcoef(jk) = 1.e0 + ( zr - 1.e0 ) &
  116. & * ( 1. - EXP( ( fsdept(1,1,jk ) - zh ) / zh ) ) &
  117. & / ( 1. - EXP( ( fsdept(1,1,jpkm1) - zh ) / zh ) )
  118. ENDIF
  119. ahm3(:,:,jk) = ahm3(:,:,1) * zcoef(jk)
  120. ahm4(:,:,jk) = ahm4(:,:,1) * zcoef(jk)
  121. IF(lwp) WRITE(numout,'(34x,E7.2,8x,i3)') zcoef(jk) * ahm0, jk
  122. END DO
  123. ELSE ! partial steps or s-ccordinate
  124. zc = MAXVAL( fsdept(:,:,jpkm1) )
  125. IF( lk_mpp ) CALL mpp_max( zc ) ! max over the global domain
  126. zc = 1. / ( 1. - EXP( ( zc - zh ) / zh ) )
  127. DO jk = 2, jpkm1
  128. DO jj = 1, jpj
  129. DO ji = 1, jpi
  130. IF( fsdept(ji,jj,jk) <= zh ) THEN
  131. ahm3(ji,jj,jk) = ahm3(ji,jj,1)
  132. ahm4(ji,jj,jk) = ahm4(ji,jj,1)
  133. ELSE
  134. zd = 1.e0 + ( zr - 1.e0 ) * ( 1. - EXP( ( fsdept(ji,jj,jk) - zh ) / zh ) ) * zc
  135. ahm3(ji,jj,jk) = ahm3(ji,jj,1) * zd
  136. ahm4(ji,jj,jk) = ahm4(ji,jj,1) * zd
  137. ENDIF
  138. END DO
  139. END DO
  140. END DO
  141. ahm3(:,:,jpk) = ahm3(:,:,jpkm1)
  142. ahm4(:,:,jpk) = ahm4(:,:,jpkm1)
  143. IF(lwp) WRITE(numout,'(36x," ahm ", 7x)')
  144. DO jk = 1, jpk
  145. IF(lwp) WRITE(numout,'(30x,E10.2,8x,i3)') ahm3(1,1,jk), jk
  146. END DO
  147. ENDIF
  148. ! Control print
  149. IF( lwp .AND. ld_print ) THEN
  150. WRITE(numout,*)
  151. WRITE(numout,*) 'inildf: ahm3 array at level 1'
  152. CALL prihre(ahm3(:,:,1 ),jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout)
  153. WRITE(numout,*)
  154. WRITE(numout,*) 'inildf: ahm4 array at level 1'
  155. CALL prihre(ahm4(:,:,jpk),jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout)
  156. ENDIF
  157. ENDIF
  158. !
  159. CALL wrk_dealloc( jpk, zcoef )
  160. !
  161. END SUBROUTINE ldf_dyn_c3d
  162. SUBROUTINE ldf_dyn_c3d_orca( ld_print )
  163. !!----------------------------------------------------------------------
  164. !! *** ROUTINE ldf_dyn_c3d ***
  165. !!
  166. !! ** Purpose : ORCA R1, R2 and R4 only
  167. !!
  168. !! ** Method : blah blah blah ....
  169. !!----------------------------------------------------------------------
  170. USE ldftra_oce, ONLY: aht0
  171. USE iom
  172. !!
  173. LOGICAL, INTENT(in) :: ld_print ! If true, output arrays on numout
  174. !!
  175. INTEGER :: ji, jj, jk, jn ! dummy loop indices
  176. INTEGER :: ii0, ii1, ij0, ij1 ! local integers
  177. INTEGER :: inum, iim, ijm !
  178. INTEGER :: ifreq, il1, il2, ij, ii
  179. REAL(wp) :: zahmeq, zcoff, zcoft, zmsk ! local scalars
  180. REAL(wp) :: zemax , zemin, zeref, zahmm
  181. CHARACTER (len=15) :: clexp
  182. INTEGER , POINTER, DIMENSION(:,:) :: icof
  183. REAL(wp), POINTER, DIMENSION(: ) :: zcoef
  184. REAL(wp), POINTER, DIMENSION(:,:) :: zahm0
  185. !
  186. REAL(wp), DIMENSION(:,:), ALLOCATABLE :: ztemp2d ! temporary array to read ahmcoef file
  187. !!----------------------------------------------------------------------
  188. !
  189. CALL wrk_alloc( jpi , jpj , icof )
  190. CALL wrk_alloc( jpk , zcoef )
  191. CALL wrk_alloc( jpi , jpj , zahm0 )
  192. !
  193. IF(lwp) WRITE(numout,*)
  194. IF(lwp) WRITE(numout,*) 'ldfdyn_c3d_orca : 3D eddy viscosity coefficient'
  195. IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~~~'
  196. IF(lwp) WRITE(numout,*) ' orca R1, R2 or R4 configuration: reduced in the surface Eq. strip '
  197. ! Read 2d integer array to specify western boundary increase in the
  198. ! ===================== equatorial strip (20N-20S) defined at t-points
  199. ALLOCATE( ztemp2d(jpi,jpj) )
  200. ztemp2d(:,:) = 0.
  201. CALL iom_open ( 'ahmcoef.nc', inum )
  202. CALL iom_get ( inum, jpdom_data, 'icof', ztemp2d)
  203. icof(:,:) = NINT(ztemp2d(:,:))
  204. CALL iom_close( inum )
  205. DEALLOCATE(ztemp2d)
  206. ! Set ahm1 and ahm2
  207. ! =================
  208. ! define ahm1 and ahm2 at the right grid point position
  209. ! (USER: modify ahm1 and ahm2 following your desiderata)
  210. ! biharmonic : ahm1 (ahm2) defined at u- (v-) point
  211. ! harmonic : ahm1 (ahm2) defined at t- (f-) point
  212. ! first level : as for 2D coefficients
  213. ! Decrease ahm to zahmeq m2/s in the tropics
  214. ! (from 90 to 20 degre: ahm = constant
  215. ! from 20 to 2.5 degre: ahm = decrease in (1-cos)/2
  216. ! from 2.5 to 0 degre: ahm = constant
  217. ! symmetric in the south hemisphere)
  218. IF( jp_cfg == 4 ) THEN
  219. zahmeq = 5.0 * aht0
  220. zahmm = min( 160000.0, ahm0)
  221. zemax = MAXVAL ( e1t(:,:) * e2t(:,:), tmask(:,:,1) .GE. 0.5 )
  222. zemin = MINVAL ( e1t(:,:) * e2t(:,:), tmask(:,:,1) .GE. 0.5 )
  223. zeref = MAXVAL ( e1t(:,:) * e2t(:,:), &
  224. & tmask(:,:,1) .GE. 0.5 .AND. ABS(gphit(:,:)) .GT. 50. )
  225. DO jj = 1, jpj
  226. DO ji = 1, jpi
  227. zmsk = e1t(ji,jj) * e2t(ji,jj)
  228. IF( abs(gphit(ji,jj)) .LE. 15 ) THEN
  229. zahm0(ji,jj) = ahm0
  230. ELSE
  231. IF( zmsk .GE. zeref ) THEN
  232. zahm0(ji,jj) = ahm0
  233. ELSE
  234. zahm0(ji,jj) = zahmm + (ahm0-zahmm)*(1.0 - &
  235. & cos((rpi*0.5*(zmsk-zemin)/(zeref-zemin))))
  236. ENDIF
  237. ENDIF
  238. END DO
  239. END DO
  240. ENDIF
  241. IF( jp_cfg == 2 ) THEN
  242. zahmeq = aht0
  243. zahmm = ahm0
  244. zahm0(:,:) = ahm0
  245. ENDIF
  246. IF( jp_cfg == 1 ) THEN
  247. zahmeq = aht0 ! reduced to aht0 on equator; set to ahm0 if no tropical reduction is required
  248. zahmm = ahm0
  249. zahm0(:,:) = ahm0
  250. ENDIF
  251. DO jj = 1, jpj
  252. DO ji = 1, jpi
  253. IF( ABS(gphif(ji,jj)) >= 20.) THEN
  254. ahm2(ji,jj,1) = zahm0(ji,jj)
  255. ELSEIF( ABS(gphif(ji,jj)) <= 2.5) THEN
  256. ahm2(ji,jj,1) = zahmeq
  257. ELSE
  258. ahm2(ji,jj,1) = zahmeq + (zahm0(ji,jj)-zahmeq)/2. &
  259. & *(1.-COS( rad*(ABS(gphif(ji,jj))-2.5)*180./17.5 ) )
  260. ENDIF
  261. IF( ABS(gphit(ji,jj)) >= 20.) THEN
  262. ahm1(ji,jj,1) = zahm0(ji,jj)
  263. ELSEIF( ABS(gphit(ji,jj)) <= 2.5) THEN
  264. ahm1(ji,jj,1) = zahmeq
  265. ELSE
  266. ahm1(ji,jj,1) = zahmeq + (zahm0(ji,jj)-zahmeq)/2. &
  267. & *(1.-COS( rad*(ABS(gphit(ji,jj))-2.5)*180./17.5 ) )
  268. ENDIF
  269. END DO
  270. END DO
  271. ! increase along western boundaries of equatorial strip
  272. ! t-point
  273. DO jj = 1, jpjm1
  274. DO ji = 1, jpim1
  275. zcoft = float( icof(ji,jj) ) / 100.
  276. ahm1(ji,jj,1) = zcoft * zahm0(ji,jj) + (1.-zcoft) * ahm1(ji,jj,1)
  277. END DO
  278. END DO
  279. ! f-point
  280. icof(:,:) = icof(:,:) * tmask(:,:,1)
  281. DO jj = 1, jpjm1
  282. DO ji = 1, jpim1 ! NO vector opt.
  283. zmsk = tmask(ji,jj+1,1) + tmask(ji+1,jj+1,1) + tmask(ji,jj,1) + tmask(ji,jj+1,1)
  284. IF( zmsk == 0. ) THEN
  285. zcoff = 1.
  286. ELSE
  287. zcoff = FLOAT( icof(ji,jj+1) + icof(ji+1,jj+1) + icof(ji,jj) + icof(ji,jj+1) ) &
  288. / (zmsk * 100.)
  289. ENDIF
  290. ahm2(ji,jj,1) = zcoff * zahm0(ji,jj) + (1.-zcoff) * ahm2(ji,jj,1)
  291. END DO
  292. END DO
  293. ! other level: re-increase the coef in the deep ocean
  294. !==================================================================
  295. ! Prior to v3.3, zcoeff was hardwired according to k-index jk.
  296. !
  297. ! From v3.3 onwards this has been generalised to a function of
  298. ! depth so that it can be used with any number of levels.
  299. !
  300. ! The function has been chosen to match the original values (shown
  301. ! in the following comments) when using the standard 31 ORCA levels.
  302. ! DO jk = 1, 21
  303. ! zcoef(jk) = 1._wp
  304. ! END DO
  305. ! zcoef(22) = 2._wp
  306. ! zcoef(23) = 3._wp
  307. ! zcoef(24) = 5._wp
  308. ! zcoef(25) = 7._wp
  309. ! zcoef(26) = 9._wp
  310. ! DO jk = 27, jpk
  311. ! zcoef(jk) = 10._wp
  312. ! END DO
  313. !==================================================================
  314. IF(lwp) THEN
  315. WRITE(numout,*)
  316. WRITE(numout,*) ' 1D zcoef array '
  317. WRITE(numout,*) ' ~~~~~~~~~~~~~~ '
  318. WRITE(numout,*)
  319. WRITE(numout,*) ' jk zcoef '
  320. ENDIF
  321. DO jk=1, jpk
  322. zcoef(jk) = 1.0_wp + NINT(9.0_wp*(gdept_1d(jk)-800.0_wp)/(3000.0_wp-800.0_wp))
  323. zcoef(jk) = MIN(10.0_wp, MAX(1.0_wp, zcoef(jk)))
  324. IF(lwp) WRITE(numout,'(4x,i3,6x,f7.3)') jk,zcoef(jk)
  325. END DO
  326. DO jk = 2, jpk
  327. ahm1(:,:,jk) = MIN( zahm0(:,:), zcoef(jk) * ahm1(:,:,1) )
  328. ahm2(:,:,jk) = MIN( zahm0(:,:), zcoef(jk) * ahm2(:,:,1) )
  329. END DO
  330. IF( jp_cfg == 4 ) THEN ! Limit AHM in Gibraltar strait
  331. ij0 = 50 ; ij1 = 53
  332. ii0 = 69 ; ii1 = 71
  333. DO jk = 1, jpk
  334. ahm1(mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),jk) = MIN( zahmm, ahm1(mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),jk) )
  335. ahm2(mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),jk) = MIN( zahmm, ahm2(mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),jk) )
  336. END DO
  337. ENDIF
  338. CALL lbc_lnk( ahm1, 'T', 1. ) ! Lateral boundary conditions (unchanged sign)
  339. CALL lbc_lnk( ahm2, 'F', 1. )
  340. IF(lwp) THEN ! Control print
  341. WRITE(numout,*)
  342. WRITE(numout,*) ' 3D ahm1 array (k=1)'
  343. CALL prihre( ahm1(:,:,1), jpi, jpj, 1, jpi, 20, 1, jpj, 20, 1.e-3, numout )
  344. WRITE(numout,*)
  345. WRITE(numout,*) ' 3D ahm2 array (k=1)'
  346. CALL prihre( ahm2(:,:,1), jpi, jpj, 1, jpi, 20, 1, jpj, 20, 1.e-3, numout )
  347. WRITE(numout,*)
  348. WRITE(numout,*) ' 3D ahm2 array (k=jpk)'
  349. CALL prihre( ahm2(:,:,jpk), jpi, jpj, 1, jpi, 20, 1, jpj, 20, 1.e-3, numout )
  350. ENDIF
  351. ! Set ahm3 and ahm4
  352. ! =================
  353. ! define ahm3 and ahm4 at the right grid point position
  354. ! initialization to a constant value
  355. ! (USER: modify ahm3 and ahm4 following your desiderata)
  356. ! harmonic isopycnal or geopotential:
  357. ! ahm3 (ahm4) defined at u- (v-) point
  358. DO jk = 1, jpk
  359. DO jj = 2, jpj
  360. DO ji = 2, jpi
  361. ahm3(ji,jj,jk) = 0.5 * ( ahm2(ji,jj,jk) + ahm2(ji ,jj-1,jk) )
  362. ahm4(ji,jj,jk) = 0.5 * ( ahm2(ji,jj,jk) + ahm2(ji-1,jj ,jk) )
  363. END DO
  364. END DO
  365. END DO
  366. ahm3 ( :, 1, :) = ahm3 ( :, 2, :)
  367. ahm4 ( :, 1, :) = ahm4 ( :, 2, :)
  368. CALL lbc_lnk( ahm3, 'U', 1. ) ! Lateral boundary conditions (unchanged sign)
  369. CALL lbc_lnk( ahm4, 'V', 1. )
  370. ! Control print
  371. IF( lwp .AND. ld_print ) THEN
  372. WRITE(numout,*)
  373. WRITE(numout,*) ' ahm3 array level 1'
  374. CALL prihre(ahm3(:,:,1),jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout)
  375. WRITE(numout,*)
  376. WRITE(numout,*) ' ahm4 array level 1'
  377. CALL prihre(ahm4(:,:,1),jpi,jpj,1,jpi,1,1,jpj,1,1.e-3,numout)
  378. ENDIF
  379. !
  380. CALL wrk_dealloc( jpi , jpj , icof )
  381. CALL wrk_dealloc( jpk , zcoef )
  382. CALL wrk_dealloc( jpi , jpj , zahm0 )
  383. !
  384. END SUBROUTINE ldf_dyn_c3d_orca