File:/home/sbrandt/cactus/Cactus/configs/sim2/build/SummationByParts/Derivatives_8_4_min_err_coeff.f90
1:# 5 "/home/sbrandt/cactus/Cactus/arrangements/LSUThorns/SummationByParts/src/Derivatives_8_4_min_err_coeff.F90"
2:subroutine deriv_gf_8_4_opt ( var, ni, nj, nk, dir, bb, gsize, offset, delta, dvar )
3:
4:  use All_Coeffs_mod
5:
6:  implicit none
7:
8:  external     CCTK_PointerTo
9:# 11
10:  integer*8 CCTK_PointerTo
11:# 11
12:  interface
13:# 11
14:  integer function CCTK_Equals (arg1, arg2)
15:# 11
16:  implicit none
17:# 11
18:  integer*8 arg1
19:# 11
20:  character(*) arg2
21:# 11
22:  end function CCTK_Equals
23:# 11
24:  integer function CCTK_MyProc (cctkGH)
25:# 11
26:  implicit none
27:# 11
28:  integer*8 cctkGH
29:# 11
30:  end function CCTK_MyProc
31:# 11
32:  integer function CCTK_nProcs (cctkGH)
33:# 11
34:  implicit none
35:# 11
36:  integer*8 cctkGH
37:# 11
38:  end function CCTK_nProcs
39:# 11
40:  integer function CCTK_IsThornActive (name)
41:# 11
42:  implicit none
43:# 11
44:  character(*) name
45:# 11
46:  end function CCTK_IsThornActive
47:# 11
48:  integer*8 function CCTK_NullPointer ()
49:# 11
50:  implicit none
51:# 11
52:  end function CCTK_NullPointer
53:# 11
54:  end interface
55:# 11
56:  interface
57:# 11
58:  subroutine Diff2_coeff (cctkGH, dir, nsize, imin, imax, q, table_handle)
59:# 11
60:  implicit none
61:# 11
62:  integer*8 cctkGH
63:# 11
64:  INTEGER*4 dir
65:# 11
66:  INTEGER*4 nsize
67:# 11
68:  INTEGER*4 imin(*)
69:# 11
70:  INTEGER*4 imax(*)
71:# 11
72:  REAL*8 q(*)
73:# 11
74:  INTEGER*4 table_handle
75:# 11
76:  end subroutine Diff2_coeff
77:# 11
78:  end interface
79:# 11
80:  interface
81:# 11
82:  subroutine Diff2_gv (cctkGH, dir1, dir2, var, dvar, table_handle)
83:# 11
84:  implicit none
85:# 11
86:  integer*8 cctkGH
87:# 11
88:  INTEGER*4 dir1
89:# 11
90:  INTEGER*4 dir2
91:# 11
92:  REAL*8 var(*)
93:# 11
94:  REAL*8 dvar(*)
95:# 11
96:  INTEGER*4 table_handle
97:# 11
98:  end subroutine Diff2_gv
99:# 11
100:  end interface
101:# 11
102:  interface
103:# 11
104:  subroutine Diff_coeff (cctkGH, dir, nsize, imin, imax, q, table_handle)
105:# 11
106:  implicit none
107:# 11
108:  integer*8 cctkGH
109:# 11
110:  INTEGER*4 dir
111:# 11
112:  INTEGER*4 nsize
113:# 11
114:  INTEGER*4 imin(*)
115:# 11
116:  INTEGER*4 imax(*)
117:# 11
118:  REAL*8 q(*)
119:# 11
120:  INTEGER*4 table_handle
121:# 11
122:  end subroutine Diff_coeff
123:# 11
124:  end interface
125:# 11
126:  interface
127:# 11
128:  subroutine Diff_gf (cctkGH, dir, var_name, dvar_name)
129:# 11
130:  implicit none
131:# 11
132:  integer*8 cctkGH
133:# 11
134:  INTEGER*4 dir
135:# 11
136:  character(*) var_name
137:# 11
138:  character(*) dvar_name
139:# 11
140:  end subroutine Diff_gf
141:# 11
142:  end interface
143:# 11
144:  interface
145:# 11
146:  subroutine Diff_gv (cctkGH, dir, var, dvar, table_handle)
147:# 11
148:  implicit none
149:# 11
150:  integer*8 cctkGH
151:# 11
152:  INTEGER*4 dir
153:# 11
154:  REAL*8 var(*)
155:# 11
156:  REAL*8 dvar(*)
157:# 11
158:  INTEGER*4 table_handle
159:# 11
160:  end subroutine Diff_gv
161:# 11
162:  end interface
163:# 11
164:  interface
165:# 11
166:  subroutine Diff_up_coeff (cctkGH, dir, nsize, imin, imax, q, up, table_handle)
167:# 11
168:  implicit none
169:# 11
170:  integer*8 cctkGH
171:# 11
172:  INTEGER*4 dir
173:# 11
174:  INTEGER*4 nsize
175:# 11
176:  INTEGER*4 imin(*)
177:# 11
178:  INTEGER*4 imax(*)
179:# 11
180:  REAL*8 q(*)
181:# 11
182:  INTEGER*4 up
183:# 11
184:  INTEGER*4 table_handle
185:# 11
186:  end subroutine Diff_up_coeff
187:# 11
188:  end interface
189:# 11
190:  interface
191:# 11
192:  subroutine Diff_up_gv (cctkGH, dir, var, dvar, up, table_handle)
193:# 11
194:  implicit none
195:# 11
196:  integer*8 cctkGH
197:# 11
198:  INTEGER*4 dir
199:# 11
200:  REAL*8 var(*)
201:# 11
202:  REAL*8 dvar(*)
203:# 11
204:  REAL*8 up(*)
205:# 11
206:  INTEGER*4 table_handle
207:# 11
208:  end subroutine Diff_up_gv
209:# 11
210:  end interface
211:# 11
212:  interface
213:# 11
214:  subroutine GetBoundWidth (cctkGH, bsize, table_handle)
215:# 11
216:  implicit none
217:# 11
218:  integer*8 cctkGH
219:# 11
220:  INTEGER*4 bsize(*)
221:# 11
222:  INTEGER*4 table_handle
223:# 11
224:  end subroutine GetBoundWidth
225:# 11
226:  end interface
227:# 11
228:  interface
229:# 11
230:  INTEGER*4 function GetBoundarySpecification (size, nboundaryzones, is_internal, is_staggered, shiftout)
231:# 11
232:  implicit none
233:# 11
234:  INTEGER*4 size
235:# 11
236:  INTEGER*4 nboundaryzones(*)
237:# 11
238:  INTEGER*4 is_internal(*)
239:# 11
240:  INTEGER*4 is_staggered(*)
241:# 11
242:  INTEGER*4 shiftout(*)
243:# 11
244:  end function GetBoundarySpecification
245:# 11
246:  end interface
247:# 11
248:  interface
249:# 11
250:  INTEGER*4 function GetDomainSpecification (size, physical_min, physical_max, interior_min, interior_max, exterior_min, exterior_m&
251:# 11
252:  &ax, spacing)
253:# 11
254:  implicit none
255:# 11
256:  INTEGER*4 size
257:# 11
258:  REAL*8 physical_min(*)
259:# 11
260:  REAL*8 physical_max(*)
261:# 11
262:  REAL*8 interior_min(*)
263:# 11
264:  REAL*8 interior_max(*)
265:# 11
266:  REAL*8 exterior_min(*)
267:# 11
268:  REAL*8 exterior_max(*)
269:# 11
270:  REAL*8 spacing(*)
271:# 11
272:  end function GetDomainSpecification
273:# 11
274:  end interface
275:# 11
276:  interface
277:# 11
278:  subroutine GetLshIndexRanges (cctkGH, imin, imax)
279:# 11
280:  implicit none
281:# 11
282:  integer*8 cctkGH
283:# 11
284:  INTEGER*4 imin(*)
285:# 11
286:  INTEGER*4 imax(*)
287:# 11
288:  end subroutine GetLshIndexRanges
289:# 11
290:  end interface
291:# 11
292:  interface
293:# 11
294:  REAL*8 function GetScalProdCoeff ()
295:# 11
296:  implicit none
297:# 11
298:  end function GetScalProdCoeff
299:# 11
300:  end interface
301:# 11
302:  interface
303:# 11
304:  subroutine GetScalProdDiag (cctkGH, dir, nsize, sigmad)
305:# 11
306:  implicit none
307:# 11
308:  integer*8 cctkGH
309:# 11
310:  INTEGER*4 dir
311:# 11
312:  INTEGER*4 nsize
313:# 11
314:  REAL*8 sigmad(*)
315:# 11
316:  end subroutine GetScalProdDiag
317:# 11
318:  end interface
319:# 11
320:  interface
321:# 11
322:  INTEGER*4 function MoLQueryEvolvedRHS (EvolvedIndex)
323:# 11
324:  implicit none
325:# 11
326:  INTEGER*4 EvolvedIndex
327:# 11
328:  end function MoLQueryEvolvedRHS
329:# 11
330:  end interface
331:# 11
332:  interface
333:# 11
334:  INTEGER*4 function MultiPatch_GetBbox (cctkGH, size, bbox)
335:# 11
336:  implicit none
337:# 11
338:  integer*8 cctkGH
339:# 11
340:  INTEGER*4 size
341:# 11
342:  INTEGER*4 bbox(*)
343:# 11
344:  end function MultiPatch_GetBbox
345:# 11
346:  end interface
347:# 11
348:  interface
349:# 11
350:  INTEGER*4 function MultiPatch_GetBoundarySpecification (map, size, nboundaryzones, is_internal, is_staggered, shiftout)
351:# 11
352:  implicit none
353:# 11
354:  INTEGER*4 map
355:# 11
356:  INTEGER*4 size
357:# 11
358:  INTEGER*4 nboundaryzones(*)
359:# 11
360:  INTEGER*4 is_internal(*)
361:# 11
362:  INTEGER*4 is_staggered(*)
363:# 11
364:  INTEGER*4 shiftout(*)
365:# 11
366:  end function MultiPatch_GetBoundarySpecification
367:# 11
368:  end interface
369:# 11
370:  interface
371:# 11
372:  INTEGER*4 function MultiPatch_GetMap (cctkGH)
373:# 11
374:  implicit none
375:# 11
376:  integer*8 cctkGH
377:# 11
378:  end function MultiPatch_GetMap
379:# 11
380:  end interface
381:# 11
382:  interface
383:# 11
384:  INTEGER*4 function MultiPatch_GetMaps (cctkGH)
385:# 11
386:  implicit none
387:# 11
388:  integer*8 cctkGH
389:# 11
390:  end function MultiPatch_GetMaps
391:# 11
392:  end interface
393:# 11
394:  interface
395:# 11
396:  INTEGER*4 function SymmetryHandleOfName (sym_name)
397:# 11
398:  implicit none
399:# 11
400:  character(*) sym_name
401:# 11
402:  end function SymmetryHandleOfName
403:# 11
404:  end interface
405:# 11
406:  interface
407:# 11
408:  INTEGER*4 function SymmetryTableHandleForGrid (cctkGH)
409:# 11
410:  implicit none
411:# 11
412:  integer*8 cctkGH
413:# 11
414:  end function SymmetryTableHandleForGrid
415:# 11
416:  end interface
417:# 11
418:  
419:  REAL*8 diss_fraction (3)
420:# 12
421:  integer, parameter :: cctki_use_diss_fraction = kind(diss_fraction)
422:# 12
423:  REAL*8 epsdis
424:# 12
425:  integer, parameter :: cctki_use_epsdis = kind(epsdis)
426:# 12
427:  REAL*8 h_scaling (3)
428:# 12
429:  integer, parameter :: cctki_use_h_scaling = kind(h_scaling)
430:# 12
431:  REAL*8 poison_value
432:# 12
433:  integer, parameter :: cctki_use_poison_value = kind(poison_value)
434:# 12
435:  integer*8 dissipation_type
436:# 12
437:  integer, parameter :: cctki_use_dissipation_type = kind(dissipation_type)
438:# 12
439:  integer*8 norm_type
440:# 12
441:  integer, parameter :: cctki_use_norm_type = kind(norm_type)
442:# 12
443:  integer*8 operator_type
444:# 12
445:  integer, parameter :: cctki_use_operator_type = kind(operator_type)
446:# 12
447:  integer*8 vars
448:# 12
449:  integer, parameter :: cctki_use_vars = kind(vars)
450:# 12
451:  INTEGER*4 check_grid_sizes
452:# 12
453:  integer, parameter :: cctki_use_check_grid_sizes = kind(check_grid_sizes)
454:# 12
455:  INTEGER*4 onesided_interpatch_boundaries
456:# 12
457:  integer, parameter :: cctki_use_onesided_interpatch_boundaries = kind(onesided_interpatch_boundaries)
458:# 12
459:  INTEGER*4 onesided_outer_boundaries
460:# 12
461:  integer, parameter :: cctki_use_onesided_outer_boundaries = kind(onesided_outer_boundaries)
462:# 12
463:  INTEGER*4 order
464:# 12
465:  integer, parameter :: cctki_use_order = kind(order)
466:# 12
467:  INTEGER*4 poison_derivatives
468:# 12
469:  integer, parameter :: cctki_use_poison_derivatives = kind(poison_derivatives)
470:# 12
471:  INTEGER*4 poison_dissipation
472:# 12
473:  integer, parameter :: cctki_use_poison_dissipation = kind(poison_dissipation)
474:# 12
475:  INTEGER*4 sbp_1st_deriv
476:# 12
477:  integer, parameter :: cctki_use_sbp_1st_deriv = kind(sbp_1st_deriv)
478:# 12
479:  INTEGER*4 sbp_2nd_deriv
480:# 12
481:  integer, parameter :: cctki_use_sbp_2nd_deriv = kind(sbp_2nd_deriv)
482:# 12
483:  INTEGER*4 sbp_upwind_deriv
484:# 12
485:  integer, parameter :: cctki_use_sbp_upwind_deriv = kind(sbp_upwind_deriv)
486:# 12
487:  INTEGER*4 scale_with_h
488:# 12
489:  integer, parameter :: cctki_use_scale_with_h = kind(scale_with_h)
490:# 12
491:  INTEGER*4 use_dissipation
492:# 12
493:  integer, parameter :: cctki_use_use_dissipation = kind(use_dissipation)
494:# 12
495:  INTEGER*4 use_shiftout
496:# 12
497:  integer, parameter :: cctki_use_use_shiftout = kind(use_shiftout)
498:# 12
499:  INTEGER*4 use_variable_deltas
500:# 12
501:  integer, parameter :: cctki_use_use_variable_deltas = kind(use_variable_deltas)
502:# 12
503:  INTEGER*4 zero_derivs_y
504:# 12
505:  integer, parameter :: cctki_use_zero_derivs_y = kind(zero_derivs_y)
506:# 12
507:  INTEGER*4 zero_derivs_z
508:# 12
509:  integer, parameter :: cctki_use_zero_derivs_z = kind(zero_derivs_z)
510:# 12
511:  COMMON /SummationByPartsrest/diss_fraction, epsdis, h_scaling, poison_value, dissipation_type, norm_type, operator_type, vars, ch&
512:# 12
513:  &eck_grid_sizes, onesided_interpatch_boundaries, onesided_outer_boundaries, order, poison_derivatives, poison_dissipation, sbp_1s&
514:# 12
515:  &t_deriv, sbp_2nd_deriv, sbp_upwind_deriv, scale_with_h, use_dissipation, use_shiftout, use_variable_deltas, zero_derivs_y, zero_&
516:# 12
517:  &derivs_z
518:# 12
519:  
520:
521:  INTEGER*4, intent(IN) :: ni, nj, nk
522:  REAL*8, dimension(ni,nj,nk), intent(IN) :: var
523:  INTEGER*4, intent(IN) :: dir
524:  INTEGER*4, intent(IN) :: bb(2)
525:  INTEGER*4, intent(IN) :: gsize
526:  INTEGER*4, intent(IN) :: offset(2)
527:  REAL*8, intent(IN) :: delta
528:  REAL*8, dimension(ni,nj,nk), intent(OUT) :: dvar
529:
530:  REAL*8, dimension(4), save :: a
531:  REAL*8, dimension(12,8), save :: q
532:  REAL*8 :: idel
533:
534:  INTEGER*4 :: il, ir, jl, jr, kl, kr, ol, or
535:
536:  logical, save :: first = .true.
537:
538:  if ( first ) then
539:    call coeffs_1_8_4_opt ( a, q )
540:    first = .false.
541:  end if
542:
543:  idel = 1.0_wp / delta
544:
545:  if (gsize < 4) call CCTK_Warn(0,38,"Derivatives_8_4_min_err_coeff.F90","SummationByParts", "not enough ghostzones")
546:
547:  direction: select case (dir)
548:  case (0) direction
549:    if ( bb(1) == 0 ) then
550:      il = 1 + gsize
551:    else
552:      ol = offset(1)
553:      dvar(1+ol,:,:) = ( q(1,1) * var(1+ol,:,:) + q(2,1) * var(2+ol,:,:) + &
554:                         q(3,1) * var(3+ol,:,:) + q(4,1) * var(4+ol,:,:) + &
555:                         q(5,1) * var(5+ol,:,:) + q(6,1) * var(6+ol,:,:) + &
556:                         q(7,1) * var(7+ol,:,:) + q(8,1) * var(8+ol,:,:) ) * idel
557:      dvar(2+ol,:,:) = ( q(1,2) * var(1+ol,:,:) + q(3,2) * var(3+ol,:,:) + &
558:                         q(4,2) * var(4+ol,:,:) + q(5,2) * var(5+ol,:,:) + &
559:                         q(6,2) * var(6+ol,:,:) + q(7,2) * var(7+ol,:,:) + &
560:                         q(8,2) * var(8+ol,:,:) ) * idel
561:      dvar(3+ol,:,:) = ( q(1,3) * var(1+ol,:,:) + q(2,3) * var(2+ol,:,:) + &
562:                         q(4,3) * var(4+ol,:,:) + q(5,3) * var(5+ol,:,:) + &
563:                         q(6,3) * var(6+ol,:,:) + q(7,3) * var(7+ol,:,:) + &
564:                         q(8,3) * var(8+ol,:,:) ) * idel
565:      dvar(4+ol,:,:) = ( q(1,4) * var(1+ol,:,:) + q(2,4) * var(2+ol,:,:) + &
566:                         q(3,4) * var(3+ol,:,:) + q(5,4) * var(5+ol,:,:) + &
567:                         q(6,4) * var(6+ol,:,:) + q(7,4) * var(7+ol,:,:) + &
568:                         q(8,4) * var(8+ol,:,:) ) * idel
569:      dvar(5+ol,:,:) = ( q(1,5) * var(1+ol,:,:) + q(2,5) * var(2+ol,:,:) + &
570:                         q(3,5) * var(3+ol,:,:) + q(4,5) * var(4+ol,:,:) + &
571:                         q(6,5) * var(6+ol,:,:) + q(7,5) * var(7+ol,:,:) + &
572:                         q(8,5) * var(8+ol,:,:) + q(9,5) * var(9+ol,:,:) ) * idel
573:      dvar(6+ol,:,:) = ( q(1,6) * var(1+ol,:,:) + q(2,6) * var(2+ol,:,:) + &
574:                         q(3,6) * var(3+ol,:,:) + q(4,6) * var(4+ol,:,:) + &
575:                         q(5,6) * var(5+ol,:,:) + q(7,6) * var(7+ol,:,:) + &
576:                         q(8,6) * var(8+ol,:,:) + q(9,6) * var(9+ol,:,:) + &
577:                         q(10,6) * var(10+ol,:,:) ) * idel
578:      dvar(7+ol,:,:) = ( q(1,7) * var(1+ol,:,:) + q(2,7) * var(2+ol,:,:) + &
579:                         q(3,7) * var(3+ol,:,:) + q(4,7) * var(4+ol,:,:) + &
580:                         q(5,7) * var(5+ol,:,:) + q(6,7) * var(6+ol,:,:) + &
581:                         q(8,7) * var(8+ol,:,:) + q(9,7) * var(9+ol,:,:) + &
582:                         q(10,7) * var(10+ol,:,:) + q(11,7) * var(11+ol,:,:) ) * idel
583:      dvar(8+ol,:,:) = ( q(1,8) * var(1+ol,:,:) + q(2,8) * var(2+ol,:,:) + &
584:                         q(3,8) * var(3+ol,:,:) + q(4,8) * var(4+ol,:,:) + &
585:                         q(5,8) * var(5+ol,:,:) + q(6,8) * var(6+ol,:,:) + &
586:                         q(7,8) * var(7+ol,:,:) + q(9,8) * var(9+ol,:,:) + &
587:                         q(10,8) * var(10+ol,:,:) + q(11,8) * var(11+ol,:,:) + &
588:                         q(12,8) * var(12+ol,:,:) ) * idel
589:      il = 9 + ol
590:    end if
591:    if ( bb(2) == 0 ) then
592:      ir = ni - gsize
593:    else
594:      or = ni - offset(2)
595:      dvar(or,:,:) =   - ( q(1,1) * var(or,:,:) + q(2,1) * var(or-1,:,:) + &
596:                           q(3,1) * var(or-2,:,:) + q(4,1) * var(or-3,:,:) + &
597:                           q(5,1) * var(or-4,:,:) + q(6,1) * var(or-5,:,:) + &
598:                           q(7,1) * var(or-6,:,:) + &
599:                           q(8,1) * var(or-7,:,:) ) * idel
600:      dvar(or-1,:,:) = - ( q(1,2) * var(or,:,:) + q(3,2) * var(or-2,:,:) + &
601:                           q(4,2) * var(or-3,:,:) + q(5,2) * var(or-4,:,:) + &
602:                           q(6,2) * var(or-5,:,:) + q(7,2) * var(or-6,:,:) + &
603:                           q(8,2) * var(or-7,:,:) ) * idel
604:      dvar(or-2,:,:) = - ( q(1,3) * var(or,:,:) + q(2,3) * var(or-1,:,:) + &
605:                           q(4,3) * var(or-3,:,:) + q(5,3) * var(or-4,:,:) + &
606:                           q(6,3) * var(or-5,:,:) + q(7,3) * var(or-6,:,:) + &
607:                           q(8,3) * var(or-7,:,:) ) * idel
608:      dvar(or-3,:,:) = - ( q(1,4) * var(or,:,:) + q(2,4) * var(or-1,:,:) + &
609:                           q(3,4) * var(or-2,:,:) + q(5,4) * var(or-4,:,:) + &
610:                           q(6,4) * var(or-5,:,:) + q(7,4) * var(or-6,:,:) + &
611:                           q(8,4) * var(or-7,:,:) ) * idel
612:      dvar(or-4,:,:) = - ( q(1,5) * var(or,:,:) + q(2,5) * var(or-1,:,:) + &
613:                           q(3,5) * var(or-2,:,:) + q(4,5) * var(or-3,:,:) + &
614:                           q(6,5) * var(or-5,:,:) + q(7,5) * var(or-6,:,:) + &
615:                           q(8,5) * var(or-7,:,:) + &
616:                           q(9,5) * var(or-8,:,:) ) * idel
617:      dvar(or-5,:,:) = - ( q(1,6) * var(or,:,:) + q(2,6) * var(or-1,:,:) + &
618:                           q(3,6) * var(or-2,:,:) + q(4,6) * var(or-3,:,:) + &
619:                           q(5,6) * var(or-4,:,:) + q(7,6) * var(or-6,:,:) + &
620:                           q(8,6) * var(or-7,:,:) + q(9,6) * var(or-8,:,:) + &
621:                           q(10,6) * var(or-9,:,:) ) * idel
622:      dvar(or-6,:,:) = - ( q(1,7) * var(or,:,:) + q(2,7) * var(or-1,:,:) + &
623:                           q(3,7) * var(or-2,:,:) + q(4,7) * var(or-3,:,:) + &
624:                           q(5,7) * var(or-4,:,:) + q(6,7) * var(or-5,:,:) + &
625:                           q(8,7) * var(or-7,:,:) + q(9,7) * var(or-8,:,:) + &
626:                           q(10,7) * var(or-9,:,:) + &
627:                           q(11,7) * var(or-10,:,:) ) * idel
628:      dvar(or-7,:,:) = - ( q(1,8) * var(or,:,:) + q(2,8) * var(or-1,:,:) + &
629:                           q(3,8) * var(or-2,:,:) + q(4,8) * var(or-3,:,:) + &
630:                           q(5,8) * var(or-4,:,:) + q(6,8) * var(or-5,:,:) + &
631:                           q(7,8) * var(or-6,:,:) + q(9,8) * var(or-8,:,:) + &
632:                           q(10,8) * var(or-9,:,:) + &
633:                           q(11,8) * var(or-10,:,:) + &
634:                           q(12,8) * var(or-11,:,:) ) * idel
635:      ir = or - 8
636:    end if
637:    if (il > ir+1) call CCTK_Warn(0,130,"Derivatives_8_4_min_err_coeff.F90","SummationByParts", "domain too small")
638:    dvar(il:ir,:,:) = ( a(1) * ( var(il+1:ir+1,:,:) - &
639:                                 var(il-1:ir-1,:,:) ) + &
640:                        a(2) * ( var(il+2:ir+2,:,:) - &
641:                                 var(il-2:ir-2,:,:) ) + &
642:                        a(3) * ( var(il+3:ir+3,:,:) - &
643:                                 var(il-3:ir-3,:,:) ) + &
644:                        a(4) * ( var(il+4:ir+4,:,:) - &
645:                                 var(il-4:ir-4,:,:) ) ) * idel
646:  case (1) direction
647:    if ( zero_derivs_y /= 0 ) then
648:      dvar = zero
649:    else
650:      if ( bb(1) == 0 ) then
651:        jl = 1 + gsize
652:      else
653:        ol = offset(1)
654:        dvar(:,1+ol,:) = ( q(1,1) * var(:,1+ol,:) + q(2,1) * var(:,2+ol,:) + &
655:                        q(3,1) * var(:,3+ol,:) + q(4,1) * var(:,4+ol,:) + &
656:                        q(5,1) * var(:,5+ol,:) + q(6,1) * var(:,6+ol,:) + &
657:                        q(7,1) * var(:,7+ol,:) + q(8,1) * var(:,8+ol,:) ) * idel
658:        dvar(:,2+ol,:) = ( q(1,2) * var(:,1+ol,:) + q(3,2) * var(:,3+ol,:) + &
659:                        q(4,2) * var(:,4+ol,:) + q(5,2) * var(:,5+ol,:) + &
660:                        q(6,2) * var(:,6+ol,:) + q(7,2) * var(:,7+ol,:) + &
661:                        q(8,2) * var(:,8+ol,:) ) * idel
662:        dvar(:,3+ol,:) = ( q(1,3) * var(:,1+ol,:) + q(2,3) * var(:,2+ol,:) + &
663:                        q(4,3) * var(:,4+ol,:) + q(5,3) * var(:,5+ol,:) + &
664:                        q(6,3) * var(:,6+ol,:) + q(7,3) * var(:,7+ol,:) + &
665:                        q(8,3) * var(:,8+ol,:) ) * idel
666:        dvar(:,4+ol,:) = ( q(1,4) * var(:,1+ol,:) + q(2,4) * var(:,2+ol,:) + &
667:                        q(3,4) * var(:,3+ol,:) + q(5,4) * var(:,5+ol,:) + &
668:                        q(6,4) * var(:,6+ol,:) + q(7,4) * var(:,7+ol,:) + &
669:                        q(8,4) * var(:,8+ol,:) ) * idel
670:        dvar(:,5+ol,:) = ( q(1,5) * var(:,1+ol,:) + q(2,5) * var(:,2+ol,:) + &
671:                        q(3,5) * var(:,3+ol,:) + q(4,5) * var(:,4+ol,:) + &
672:                        q(6,5) * var(:,6+ol,:) + q(7,5) * var(:,7+ol,:) + &
673:                        q(8,5) * var(:,8+ol,:) + q(9,5) * var(:,9+ol,:) ) * idel
674:        dvar(:,6+ol,:) = ( q(1,6) * var(:,1+ol,:) + q(2,6) * var(:,2+ol,:) + &
675:                        q(3,6) * var(:,3+ol,:) + q(4,6) * var(:,4+ol,:) + &
676:                        q(5,6) * var(:,5+ol,:) + q(7,6) * var(:,7+ol,:) + &
677:                        q(8,6) * var(:,8+ol,:) + q(9,6) * var(:,9+ol,:) + &
678:                        q(10,6) * var(:,10+ol,:) ) * idel
679:        dvar(:,7+ol,:) = ( q(1,7) * var(:,1+ol,:) + q(2,7) * var(:,2+ol,:) + &
680:                        q(3,7) * var(:,3+ol,:) + q(4,7) * var(:,4+ol,:) + &
681:                        q(5,7) * var(:,5+ol,:) + q(6,7) * var(:,6+ol,:) + &
682:                        q(8,7) * var(:,8+ol,:) + q(9,7) * var(:,9+ol,:) + &
683:                        q(10,7) * var(:,10+ol,:) + q(11,7) * var(:,11+ol,:) ) * idel
684:        dvar(:,8+ol,:) = ( q(1,8) * var(:,1+ol,:) + q(2,8) * var(:,2+ol,:) + &
685:                        q(3,8) * var(:,3+ol,:) + q(4,8) * var(:,4+ol,:) + &
686:                        q(5,8) * var(:,5+ol,:) + q(6,8) * var(:,6+ol,:) + &
687:                        q(7,8) * var(:,7+ol,:) + q(9,8) * var(:,9+ol,:) + &
688:                        q(10,8) * var(:,10+ol,:) + q(11,8) * var(:,11+ol,:) + &
689:                        q(12,8) * var(:,12+ol,:) ) * idel
690:        jl = 9 + ol
691:      end if
692:      if ( bb(2) == 0 ) then
693:        jr = nj - gsize
694:      else
695:        or = nj - offset(2)
696:        dvar(:,or,:) =   - ( q(1,1) * var(:,or,:) + q(2,1) * var(:,or-1,:) + &
697:                             q(3,1) * var(:,or-2,:) + q(4,1) * var(:,or-3,:) + &
698:                             q(5,1) * var(:,or-4,:) + q(6,1) * var(:,or-5,:) + &
699:                             q(7,1) * var(:,or-6,:) + &
700:                             q(8,1) * var(:,or-7,:) ) * idel
701:        dvar(:,or-1,:) = - ( q(1,2) * var(:,or,:) + q(3,2) * var(:,or-2,:) + &
702:                             q(4,2) * var(:,or-3,:) + q(5,2) * var(:,or-4,:) + &
703:                             q(6,2) * var(:,or-5,:) + q(7,2) * var(:,or-6,:) + &
704:                             q(8,2) * var(:,or-7,:) ) * idel
705:        dvar(:,or-2,:) = - ( q(1,3) * var(:,or,:) + q(2,3) * var(:,or-1,:) + &
706:                             q(4,3) * var(:,or-3,:) + q(5,3) * var(:,or-4,:) + &
707:                             q(6,3) * var(:,or-5,:) + q(7,3) * var(:,or-6,:) + &
708:                             q(8,3) * var(:,or-7,:) ) * idel
709:        dvar(:,or-3,:) = - ( q(1,4) * var(:,or,:) + q(2,4) * var(:,or-1,:) + &
710:                             q(3,4) * var(:,or-2,:) + q(5,4) * var(:,or-4,:) + &
711:                             q(6,4) * var(:,or-5,:) + q(7,4) * var(:,or-6,:) + &
712:                             q(8,4) * var(:,or-7,:) ) * idel
713:        dvar(:,or-4,:) = - ( q(1,5) * var(:,or,:) + q(2,5) * var(:,or-1,:) + &
714:                             q(3,5) * var(:,or-2,:) + q(4,5) * var(:,or-3,:) + &
715:                             q(6,5) * var(:,or-5,:) + q(7,5) * var(:,or-6,:) + &
716:                             q(8,5) * var(:,or-7,:) + &
717:                             q(9,5) * var(:,or-8,:) ) * idel
718:        dvar(:,or-5,:) = - ( q(1,6) * var(:,or,:) + q(2,6) * var(:,or-1,:) + &
719:                             q(3,6) * var(:,or-2,:) + q(4,6) * var(:,or-3,:) + &
720:                             q(5,6) * var(:,or-4,:) + q(7,6) * var(:,or-6,:) + &
721:                             q(8,6) * var(:,or-7,:) + q(9,6) * var(:,or-8,:) + &
722:                             q(10,6) * var(:,or-9,:) ) * idel
723:        dvar(:,or-6,:) = - ( q(1,7) * var(:,or,:) + q(2,7) * var(:,or-1,:) + &
724:                             q(3,7) * var(:,or-2,:) + q(4,7) * var(:,or-3,:) + &
725:                             q(5,7) * var(:,or-4,:) + q(6,7) * var(:,or-5,:) + &
726:                             q(8,7) * var(:,or-7,:) + q(9,7) * var(:,or-8,:) + &
727:                             q(10,7) * var(:,or-9,:) + &
728:                             q(11,7) * var(:,or-10,:) ) * idel
729:        dvar(:,or-7,:) = - ( q(1,8) * var(:,or,:) + q(2,8) * var(:,or-1,:) + &
730:                             q(3,8) * var(:,or-2,:) + q(4,8) * var(:,or-3,:) + &
731:                             q(5,8) * var(:,or-4,:) + q(6,8) * var(:,or-5,:) + &
732:                             q(7,8) * var(:,or-6,:) + q(9,8) * var(:,or-8,:) + &
733:                             q(10,8) * var(:,or-9,:) + &
734:                             q(11,8) * var(:,or-10,:) + &
735:                             q(12,8) * var(:,or-11,:) ) * idel
736:        jr = or - 8
737:      end if
738:      if (jl > jr+1) call CCTK_Warn(0,231,"Derivatives_8_4_min_err_coeff.F90","SummationByParts", "domain too small")
739:      dvar(:,jl:jr,:) = ( a(1) * ( var(:,jl+1:jr+1,:) - &
740:                                   var(:,jl-1:jr-1,:) ) + &
741:                          a(2) * ( var(:,jl+2:jr+2,:) - &
742:                                   var(:,jl-2:jr-2,:) ) + &
743:                          a(3) * ( var(:,jl+3:jr+3,:) - &
744:                                   var(:,jl-3:jr-3,:) ) + &
745:                          a(4) * ( var(:,jl+4:jr+4,:) - &
746:                                   var(:,jl-4:jr-4,:) ) ) * idel
747:    end if
748:  case (2) direction
749:    if ( zero_derivs_z /= 0 ) then
750:      dvar = zero
751:    else
752:      if ( bb(1) == 0 ) then
753:        kl = 1 + gsize
754:      else
755:        ol = offset(1)
756:        dvar(:,:,1+ol) = ( q(1,1) * var(:,:,1+ol) + q(2,1) * var(:,:,2+ol) + &
757:                        q(3,1) * var(:,:,3+ol) + q(4,1) * var(:,:,4+ol) + &
758:                        q(5,1) * var(:,:,5+ol) + q(6,1) * var(:,:,6+ol) + &
759:                        q(7,1) * var(:,:,7+ol) + q(8,1) * var(:,:,8+ol) ) * idel
760:        dvar(:,:,2+ol) = ( q(1,2) * var(:,:,1+ol) + q(3,2) * var(:,:,3+ol) + &
761:                        q(4,2) * var(:,:,4+ol) + q(5,2) * var(:,:,5+ol) + &
762:                        q(6,2) * var(:,:,6+ol) + q(7,2) * var(:,:,7+ol) + &
763:                        q(8,2) * var(:,:,8+ol) ) * idel
764:        dvar(:,:,3+ol) = ( q(1,3) * var(:,:,1+ol) + q(2,3) * var(:,:,2+ol) + &
765:                        q(4,3) * var(:,:,4+ol) + q(5,3) * var(:,:,5+ol) + &
766:                        q(6,3) * var(:,:,6+ol) + q(7,3) * var(:,:,7+ol) + &
767:                        q(8,3) * var(:,:,8+ol) ) * idel
768:        dvar(:,:,4+ol) = ( q(1,4) * var(:,:,1+ol) + q(2,4) * var(:,:,2+ol) + &
769:                        q(3,4) * var(:,:,3+ol) + q(5,4) * var(:,:,5+ol) + &
770:                        q(6,4) * var(:,:,6+ol) + q(7,4) * var(:,:,7+ol) + &
771:                        q(8,4) * var(:,:,8+ol) ) * idel
772:        dvar(:,:,5+ol) = ( q(1,5) * var(:,:,1+ol) + q(2,5) * var(:,:,2+ol) + &
773:                        q(3,5) * var(:,:,3+ol) + q(4,5) * var(:,:,4+ol) + &
774:                        q(6,5) * var(:,:,6+ol) + q(7,5) * var(:,:,7+ol) + &
775:                        q(8,5) * var(:,:,8+ol) + q(9,5) * var(:,:,9+ol) ) * idel
776:        dvar(:,:,6+ol) = ( q(1,6) * var(:,:,1+ol) + q(2,6) * var(:,:,2+ol) + &
777:                        q(3,6) * var(:,:,3+ol) + q(4,6) * var(:,:,4+ol) + &
778:                        q(5,6) * var(:,:,5+ol) + q(7,6) * var(:,:,7+ol) + &
779:                        q(8,6) * var(:,:,8+ol) + q(9,6) * var(:,:,9+ol) + &
780:                        q(10,6) * var(:,:,10+ol) ) * idel
781:        dvar(:,:,7+ol) = ( q(1,7) * var(:,:,1+ol) + q(2,7) * var(:,:,2+ol) + &
782:                        q(3,7) * var(:,:,3+ol) + q(4,7) * var(:,:,4+ol) + &
783:                        q(5,7) * var(:,:,5+ol) + q(6,7) * var(:,:,6+ol) + &
784:                        q(8,7) * var(:,:,8+ol) + q(9,7) * var(:,:,9+ol) + &
785:                        q(10,7) * var(:,:,10+ol) + q(11,7) * var(:,:,11+ol) ) * idel
786:        dvar(:,:,8+ol) = ( q(1,8) * var(:,:,1+ol) + q(2,8) * var(:,:,2+ol) + &
787:                        q(3,8) * var(:,:,3+ol) + q(4,8) * var(:,:,4+ol) + &
788:                        q(5,8) * var(:,:,5+ol) + q(6,8) * var(:,:,6+ol) + &
789:                        q(7,8) * var(:,:,7+ol) + q(9,8) * var(:,:,9+ol) + &
790:                        q(10,8) * var(:,:,10+ol) + q(11,8) * var(:,:,11+ol) + &
791:                        q(12,8) * var(:,:,12+ol) ) * idel
792:        kl = 9 + ol
793:      end if
794:      if ( bb(2) == 0 ) then
795:        kr = nk - gsize
796:      else
797:        or = nk - offset(2)
798:        dvar(:,:,or) =   - ( q(1,1) * var(:,:,or) + q(2,1) * var(:,:,or-1) + &
799:                             q(3,1) * var(:,:,or-2) + q(4,1) * var(:,:,or-3) + &
800:                             q(5,1) * var(:,:,or-4) + q(6,1) * var(:,:,or-5) + &
801:                             q(7,1) * var(:,:,or-6) + &
802:                             q(8,1) * var(:,:,or-7) ) * idel
803:        dvar(:,:,or-1) = - ( q(1,2) * var(:,:,or) + q(3,2) * var(:,:,or-2) + &
804:                             q(4,2) * var(:,:,or-3) + q(5,2) * var(:,:,or-4) + &
805:                             q(6,2) * var(:,:,or-5) + q(7,2) * var(:,:,or-6) + &
806:                             q(8,2) * var(:,:,or-7) ) * idel
807:        dvar(:,:,or-2) = - ( q(1,3) * var(:,:,or) + q(2,3) * var(:,:,or-1) + &
808:                             q(4,3) * var(:,:,or-3) + q(5,3) * var(:,:,or-4) + &
809:                             q(6,3) * var(:,:,or-5) + q(7,3) * var(:,:,or-6) + &
810:                             q(8,3) * var(:,:,or-7) ) * idel
811:        dvar(:,:,or-3) = - ( q(1,4) * var(:,:,or) + q(2,4) * var(:,:,or-1) + &
812:                             q(3,4) * var(:,:,or-2) + q(5,4) * var(:,:,or-4) + &
813:                             q(6,4) * var(:,:,or-5) + q(7,4) * var(:,:,or-6) + &
814:                             q(8,4) * var(:,:,or-7) ) * idel
815:        dvar(:,:,or-4) = - ( q(1,5) * var(:,:,or) + q(2,5) * var(:,:,or-1) + &
816:                             q(3,5) * var(:,:,or-2) + q(4,5) * var(:,:,or-3) + &
817:                             q(6,5) * var(:,:,or-5) + q(7,5) * var(:,:,or-6) + &
818:                             q(8,5) * var(:,:,or-7) + &
819:                             q(9,5) * var(:,:,or-8) ) * idel
820:        dvar(:,:,or-5) = - ( q(1,6) * var(:,:,or) + q(2,6) * var(:,:,or-1) + &
821:                             q(3,6) * var(:,:,or-2) + q(4,6) * var(:,:,or-3) + &
822:                             q(5,6) * var(:,:,or-4) + q(7,6) * var(:,:,or-6) + &
823:                             q(8,6) * var(:,:,or-7) + q(9,6) * var(:,:,or-8) + &
824:                             q(10,6) * var(:,:,or-9) ) * idel
825:        dvar(:,:,or-6) = - ( q(1,7) * var(:,:,or) + q(2,7) * var(:,:,or-1) + &
826:                             q(3,7) * var(:,:,or-2) + q(4,7) * var(:,:,or-3) + &
827:                             q(5,7) * var(:,:,or-4) + q(6,7) * var(:,:,or-5) + &
828:                             q(8,7) * var(:,:,or-7) + q(9,7) * var(:,:,or-8) + &
829:                             q(10,7) * var(:,:,or-9) + &
830:                             q(11,7) * var(:,:,or-10) ) * idel
831:        dvar(:,:,or-7) = - ( q(1,8) * var(:,:,or) + q(2,8) * var(:,:,or-1) + &
832:                             q(3,8) * var(:,:,or-2) + q(4,8) * var(:,:,or-3) + &
833:                             q(5,8) * var(:,:,or-4) + q(6,8) * var(:,:,or-5) + &
834:                             q(7,8) * var(:,:,or-6) + q(9,8) * var(:,:,or-8) + &
835:                             q(10,8) * var(:,:,or-9) + &
836:                             q(11,8) * var(:,:,or-10) + &
837:                             q(12,8) * var(:,:,or-11) ) * idel
838:        kr = or - 8
839:      end if
840:      if (kl > kr+1) call CCTK_Warn(0,333,"Derivatives_8_4_min_err_coeff.F90","SummationByParts", "domain too small")
841:      dvar(:,:,kl:kr) = ( a(1) * ( var(:,:,kl+1:kr+1) - &
842:                                   var(:,:,kl-1:kr-1) ) + &
843:                          a(2) * ( var(:,:,kl+2:kr+2) - &
844:                                   var(:,:,kl-2:kr-2) ) + &
845:                          a(3) * ( var(:,:,kl+3:kr+3) - &
846:                                   var(:,:,kl-3:kr-3) ) + &
847:                          a(4) * ( var(:,:,kl+4:kr+4) - &
848:                                   var(:,:,kl-4:kr-4) ) ) * idel
849:    end if
850:  end select direction
851:end subroutine deriv_gf_8_4_opt
852:
853:subroutine up_deriv_gf_8_4_opt ( var, ni, nj, nk, dir, bb, gsize, delta, up, dvar )
854:
855:  use All_Coeffs_mod
856:
857:  implicit none
858:
859:  external     CCTK_PointerTo
860:# 352
861:  integer*8 CCTK_PointerTo
862:# 352
863:  interface
864:# 352
865:  integer function CCTK_Equals (arg1, arg2)
866:# 352
867:  implicit none
868:# 352
869:  integer*8 arg1
870:# 352
871:  character(*) arg2
872:# 352
873:  end function CCTK_Equals
874:# 352
875:  integer function CCTK_MyProc (cctkGH)
876:# 352
877:  implicit none
878:# 352
879:  integer*8 cctkGH
880:# 352
881:  end function CCTK_MyProc
882:# 352
883:  integer function CCTK_nProcs (cctkGH)
884:# 352
885:  implicit none
886:# 352
887:  integer*8 cctkGH
888:# 352
889:  end function CCTK_nProcs
890:# 352
891:  integer function CCTK_IsThornActive (name)
892:# 352
893:  implicit none
894:# 352
895:  character(*) name
896:# 352
897:  end function CCTK_IsThornActive
898:# 352
899:  integer*8 function CCTK_NullPointer ()
900:# 352
901:  implicit none
902:# 352
903:  end function CCTK_NullPointer
904:# 352
905:  end interface
906:# 352
907:  interface
908:# 352
909:  subroutine Diff2_coeff (cctkGH, dir, nsize, imin, imax, q, table_handle)
910:# 352
911:  implicit none
912:# 352
913:  integer*8 cctkGH
914:# 352
915:  INTEGER*4 dir
916:# 352
917:  INTEGER*4 nsize
918:# 352
919:  INTEGER*4 imin(*)
920:# 352
921:  INTEGER*4 imax(*)
922:# 352
923:  REAL*8 q(*)
924:# 352
925:  INTEGER*4 table_handle
926:# 352
927:  end subroutine Diff2_coeff
928:# 352
929:  end interface
930:# 352
931:  interface
932:# 352
933:  subroutine Diff2_gv (cctkGH, dir1, dir2, var, dvar, table_handle)
934:# 352
935:  implicit none
936:# 352
937:  integer*8 cctkGH
938:# 352
939:  INTEGER*4 dir1
940:# 352
941:  INTEGER*4 dir2
942:# 352
943:  REAL*8 var(*)
944:# 352
945:  REAL*8 dvar(*)
946:# 352
947:  INTEGER*4 table_handle
948:# 352
949:  end subroutine Diff2_gv
950:# 352
951:  end interface
952:# 352
953:  interface
954:# 352
955:  subroutine Diff_coeff (cctkGH, dir, nsize, imin, imax, q, table_handle)
956:# 352
957:  implicit none
958:# 352
959:  integer*8 cctkGH
960:# 352
961:  INTEGER*4 dir
962:# 352
963:  INTEGER*4 nsize
964:# 352
965:  INTEGER*4 imin(*)
966:# 352
967:  INTEGER*4 imax(*)
968:# 352
969:  REAL*8 q(*)
970:# 352
971:  INTEGER*4 table_handle
972:# 352
973:  end subroutine Diff_coeff
974:# 352
975:  end interface
976:# 352
977:  interface
978:# 352
979:  subroutine Diff_gf (cctkGH, dir, var_name, dvar_name)
980:# 352
981:  implicit none
982:# 352
983:  integer*8 cctkGH
984:# 352
985:  INTEGER*4 dir
986:# 352
987:  character(*) var_name
988:# 352
989:  character(*) dvar_name
990:# 352
991:  end subroutine Diff_gf
992:# 352
993:  end interface
994:# 352
995:  interface
996:# 352
997:  subroutine Diff_gv (cctkGH, dir, var, dvar, table_handle)
998:# 352
999:  implicit none
1000:# 352
1001:  integer*8 cctkGH
1002:# 352
1003:  INTEGER*4 dir
1004:# 352
1005:  REAL*8 var(*)
1006:# 352
1007:  REAL*8 dvar(*)
1008:# 352
1009:  INTEGER*4 table_handle
1010:# 352
1011:  end subroutine Diff_gv
1012:# 352
1013:  end interface
1014:# 352
1015:  interface
1016:# 352
1017:  subroutine Diff_up_coeff (cctkGH, dir, nsize, imin, imax, q, up, table_handle)
1018:# 352
1019:  implicit none
1020:# 352
1021:  integer*8 cctkGH
1022:# 352
1023:  INTEGER*4 dir
1024:# 352
1025:  INTEGER*4 nsize
1026:# 352
1027:  INTEGER*4 imin(*)
1028:# 352
1029:  INTEGER*4 imax(*)
1030:# 352
1031:  REAL*8 q(*)
1032:# 352
1033:  INTEGER*4 up
1034:# 352
1035:  INTEGER*4 table_handle
1036:# 352
1037:  end subroutine Diff_up_coeff
1038:# 352
1039:  end interface
1040:# 352
1041:  interface
1042:# 352
1043:  subroutine Diff_up_gv (cctkGH, dir, var, dvar, up, table_handle)
1044:# 352
1045:  implicit none
1046:# 352
1047:  integer*8 cctkGH
1048:# 352
1049:  INTEGER*4 dir
1050:# 352
1051:  REAL*8 var(*)
1052:# 352
1053:  REAL*8 dvar(*)
1054:# 352
1055:  REAL*8 up(*)
1056:# 352
1057:  INTEGER*4 table_handle
1058:# 352
1059:  end subroutine Diff_up_gv
1060:# 352
1061:  end interface
1062:# 352
1063:  interface
1064:# 352
1065:  subroutine GetBoundWidth (cctkGH, bsize, table_handle)
1066:# 352
1067:  implicit none
1068:# 352
1069:  integer*8 cctkGH
1070:# 352
1071:  INTEGER*4 bsize(*)
1072:# 352
1073:  INTEGER*4 table_handle
1074:# 352
1075:  end subroutine GetBoundWidth
1076:# 352
1077:  end interface
1078:# 352
1079:  interface
1080:# 352
1081:  INTEGER*4 function GetBoundarySpecification (size, nboundaryzones, is_internal, is_staggered, shiftout)
1082:# 352
1083:  implicit none
1084:# 352
1085:  INTEGER*4 size
1086:# 352
1087:  INTEGER*4 nboundaryzones(*)
1088:# 352
1089:  INTEGER*4 is_internal(*)
1090:# 352
1091:  INTEGER*4 is_staggered(*)
1092:# 352
1093:  INTEGER*4 shiftout(*)
1094:# 352
1095:  end function GetBoundarySpecification
1096:# 352
1097:  end interface
1098:# 352
1099:  interface
1100:# 352
1101:  INTEGER*4 function GetDomainSpecification (size, physical_min, physical_max, interior_min, interior_max, exterior_min, exterior_m&
1102:# 352
1103:  &ax, spacing)
1104:# 352
1105:  implicit none
1106:# 352
1107:  INTEGER*4 size
1108:# 352
1109:  REAL*8 physical_min(*)
1110:# 352
1111:  REAL*8 physical_max(*)
1112:# 352
1113:  REAL*8 interior_min(*)
1114:# 352
1115:  REAL*8 interior_max(*)
1116:# 352
1117:  REAL*8 exterior_min(*)
1118:# 352
1119:  REAL*8 exterior_max(*)
1120:# 352
1121:  REAL*8 spacing(*)
1122:# 352
1123:  end function GetDomainSpecification
1124:# 352
1125:  end interface
1126:# 352
1127:  interface
1128:# 352
1129:  subroutine GetLshIndexRanges (cctkGH, imin, imax)
1130:# 352
1131:  implicit none
1132:# 352
1133:  integer*8 cctkGH
1134:# 352
1135:  INTEGER*4 imin(*)
1136:# 352
1137:  INTEGER*4 imax(*)
1138:# 352
1139:  end subroutine GetLshIndexRanges
1140:# 352
1141:  end interface
1142:# 352
1143:  interface
1144:# 352
1145:  REAL*8 function GetScalProdCoeff ()
1146:# 352
1147:  implicit none
1148:# 352
1149:  end function GetScalProdCoeff
1150:# 352
1151:  end interface
1152:# 352
1153:  interface
1154:# 352
1155:  subroutine GetScalProdDiag (cctkGH, dir, nsize, sigmad)
1156:# 352
1157:  implicit none
1158:# 352
1159:  integer*8 cctkGH
1160:# 352
1161:  INTEGER*4 dir
1162:# 352
1163:  INTEGER*4 nsize
1164:# 352
1165:  REAL*8 sigmad(*)
1166:# 352
1167:  end subroutine GetScalProdDiag
1168:# 352
1169:  end interface
1170:# 352
1171:  interface
1172:# 352
1173:  INTEGER*4 function MoLQueryEvolvedRHS (EvolvedIndex)
1174:# 352
1175:  implicit none
1176:# 352
1177:  INTEGER*4 EvolvedIndex
1178:# 352
1179:  end function MoLQueryEvolvedRHS
1180:# 352
1181:  end interface
1182:# 352
1183:  interface
1184:# 352
1185:  INTEGER*4 function MultiPatch_GetBbox (cctkGH, size, bbox)
1186:# 352
1187:  implicit none
1188:# 352
1189:  integer*8 cctkGH
1190:# 352
1191:  INTEGER*4 size
1192:# 352
1193:  INTEGER*4 bbox(*)
1194:# 352
1195:  end function MultiPatch_GetBbox
1196:# 352
1197:  end interface
1198:# 352
1199:  interface
1200:# 352
1201:  INTEGER*4 function MultiPatch_GetBoundarySpecification (map, size, nboundaryzones, is_internal, is_staggered, shiftout)
1202:# 352
1203:  implicit none
1204:# 352
1205:  INTEGER*4 map
1206:# 352
1207:  INTEGER*4 size
1208:# 352
1209:  INTEGER*4 nboundaryzones(*)
1210:# 352
1211:  INTEGER*4 is_internal(*)
1212:# 352
1213:  INTEGER*4 is_staggered(*)
1214:# 352
1215:  INTEGER*4 shiftout(*)
1216:# 352
1217:  end function MultiPatch_GetBoundarySpecification
1218:# 352
1219:  end interface
1220:# 352
1221:  interface
1222:# 352
1223:  INTEGER*4 function MultiPatch_GetMap (cctkGH)
1224:# 352
1225:  implicit none
1226:# 352
1227:  integer*8 cctkGH
1228:# 352
1229:  end function MultiPatch_GetMap
1230:# 352
1231:  end interface
1232:# 352
1233:  interface
1234:# 352
1235:  INTEGER*4 function MultiPatch_GetMaps (cctkGH)
1236:# 352
1237:  implicit none
1238:# 352
1239:  integer*8 cctkGH
1240:# 352
1241:  end function MultiPatch_GetMaps
1242:# 352
1243:  end interface
1244:# 352
1245:  interface
1246:# 352
1247:  INTEGER*4 function SymmetryHandleOfName (sym_name)
1248:# 352
1249:  implicit none
1250:# 352
1251:  character(*) sym_name
1252:# 352
1253:  end function SymmetryHandleOfName
1254:# 352
1255:  end interface
1256:# 352
1257:  interface
1258:# 352
1259:  INTEGER*4 function SymmetryTableHandleForGrid (cctkGH)
1260:# 352
1261:  implicit none
1262:# 352
1263:  integer*8 cctkGH
1264:# 352
1265:  end function SymmetryTableHandleForGrid
1266:# 352
1267:  end interface
1268:# 352
1269:  
1270:  REAL*8 diss_fraction (3)
1271:# 353
1272:  integer, parameter :: cctki_use_diss_fraction = kind(diss_fraction)
1273:# 353
1274:  REAL*8 epsdis
1275:# 353
1276:  integer, parameter :: cctki_use_epsdis = kind(epsdis)
1277:# 353
1278:  REAL*8 h_scaling (3)
1279:# 353
1280:  integer, parameter :: cctki_use_h_scaling = kind(h_scaling)
1281:# 353
1282:  REAL*8 poison_value
1283:# 353
1284:  integer, parameter :: cctki_use_poison_value = kind(poison_value)
1285:# 353
1286:  integer*8 dissipation_type
1287:# 353
1288:  integer, parameter :: cctki_use_dissipation_type = kind(dissipation_type)
1289:# 353
1290:  integer*8 norm_type
1291:# 353
1292:  integer, parameter :: cctki_use_norm_type = kind(norm_type)
1293:# 353
1294:  integer*8 operator_type
1295:# 353
1296:  integer, parameter :: cctki_use_operator_type = kind(operator_type)
1297:# 353
1298:  integer*8 vars
1299:# 353
1300:  integer, parameter :: cctki_use_vars = kind(vars)
1301:# 353
1302:  INTEGER*4 check_grid_sizes
1303:# 353
1304:  integer, parameter :: cctki_use_check_grid_sizes = kind(check_grid_sizes)
1305:# 353
1306:  INTEGER*4 onesided_interpatch_boundaries
1307:# 353
1308:  integer, parameter :: cctki_use_onesided_interpatch_boundaries = kind(onesided_interpatch_boundaries)
1309:# 353
1310:  INTEGER*4 onesided_outer_boundaries
1311:# 353
1312:  integer, parameter :: cctki_use_onesided_outer_boundaries = kind(onesided_outer_boundaries)
1313:# 353
1314:  INTEGER*4 order
1315:# 353
1316:  integer, parameter :: cctki_use_order = kind(order)
1317:# 353
1318:  INTEGER*4 poison_derivatives
1319:# 353
1320:  integer, parameter :: cctki_use_poison_derivatives = kind(poison_derivatives)
1321:# 353
1322:  INTEGER*4 poison_dissipation
1323:# 353
1324:  integer, parameter :: cctki_use_poison_dissipation = kind(poison_dissipation)
1325:# 353
1326:  INTEGER*4 sbp_1st_deriv
1327:# 353
1328:  integer, parameter :: cctki_use_sbp_1st_deriv = kind(sbp_1st_deriv)
1329:# 353
1330:  INTEGER*4 sbp_2nd_deriv
1331:# 353
1332:  integer, parameter :: cctki_use_sbp_2nd_deriv = kind(sbp_2nd_deriv)
1333:# 353
1334:  INTEGER*4 sbp_upwind_deriv
1335:# 353
1336:  integer, parameter :: cctki_use_sbp_upwind_deriv = kind(sbp_upwind_deriv)
1337:# 353
1338:  INTEGER*4 scale_with_h
1339:# 353
1340:  integer, parameter :: cctki_use_scale_with_h = kind(scale_with_h)
1341:# 353
1342:  INTEGER*4 use_dissipation
1343:# 353
1344:  integer, parameter :: cctki_use_use_dissipation = kind(use_dissipation)
1345:# 353
1346:  INTEGER*4 use_shiftout
1347:# 353
1348:  integer, parameter :: cctki_use_use_shiftout = kind(use_shiftout)
1349:# 353
1350:  INTEGER*4 use_variable_deltas
1351:# 353
1352:  integer, parameter :: cctki_use_use_variable_deltas = kind(use_variable_deltas)
1353:# 353
1354:  INTEGER*4 zero_derivs_y
1355:# 353
1356:  integer, parameter :: cctki_use_zero_derivs_y = kind(zero_derivs_y)
1357:# 353
1358:  INTEGER*4 zero_derivs_z
1359:# 353
1360:  integer, parameter :: cctki_use_zero_derivs_z = kind(zero_derivs_z)
1361:# 353
1362:  COMMON /SummationByPartsrest/diss_fraction, epsdis, h_scaling, poison_value, dissipation_type, norm_type, operator_type, vars, ch&
1363:# 353
1364:  &eck_grid_sizes, onesided_interpatch_boundaries, onesided_outer_boundaries, order, poison_derivatives, poison_dissipation, sbp_1s&
1365:# 353
1366:  &t_deriv, sbp_2nd_deriv, sbp_upwind_deriv, scale_with_h, use_dissipation, use_shiftout, use_variable_deltas, zero_derivs_y, zero_&
1367:# 353
1368:  &derivs_z
1369:# 353
1370:  
1371:
1372:  INTEGER*4, intent(IN) :: ni, nj, nk
1373:  REAL*8, dimension(ni,nj,nk), intent(IN) :: var
1374:  INTEGER*4, intent(IN) :: dir
1375:  INTEGER*4, intent(IN) :: bb(2)
1376:  INTEGER*4, intent(IN) :: gsize
1377:  REAL*8, intent(IN) :: delta
1378:  REAL*8, dimension(ni,nj,nk), intent(IN) :: up
1379:  REAL*8, dimension(ni,nj,nk), intent(OUT) :: dvar
1380:
1381:  REAL*8, dimension(-4:4), save :: a1, a2
1382:  REAL*8, dimension(12,8), save :: q1, q2
1383:  REAL*8 :: idel
1384:
1385:  INTEGER*4 :: il, ir, jl, jr, kl, kr
1386:
1387:  logical, save :: first = .true.
1388:
1389:  if ( first ) then
1390:    call coeffs_up_8_4_opt ( a1, q1, a2, q2 )
1391:    first = .false.
1392:  end if
1393:
1394:  idel = 1.0_wp / delta
1395:
1396:  if (gsize < 4) call CCTK_Warn(0,379,"Derivatives_8_4_min_err_coeff.F90","SummationByParts", "not enough ghostzones")
1397:
1398:  direction: select case (dir)
1399:  case (0) direction
1400:    if ( bb(1) == 0 ) then
1401:      il = 1 + gsize
1402:    else
1403:      where ( up(1,:,:) < zero )
1404:        dvar(1,:,:) = ( q1(1,1) * var(1,:,:) + q1(2,1) * var(2,:,:) + &
1405:                        q1(3,1) * var(3,:,:) + q1(4,1) * var(4,:,:) + &
1406:                        q1(5,1) * var(5,:,:) + q1(6,1) * var(6,:,:) + &
1407:                        q1(7,1) * var(7,:,:) + q1(8,1) * var(8,:,:) ) * idel
1408:      elsewhere
1409:        dvar(1,:,:) = ( q2(1,1) * var(1,:,:) + q2(2,1) * var(2,:,:) + &
1410:                        q2(3,1) * var(3,:,:) + q2(4,1) * var(4,:,:) + &
1411:                        q2(5,1) * var(5,:,:) + q2(6,1) * var(6,:,:) + &
1412:                        q2(7,1) * var(7,:,:) + q2(8,1) * var(8,:,:) ) * idel
1413:      end where
1414:      where ( up(2,:,:) < zero )
1415:        dvar(2,:,:) = ( q1(1,2) * var(1,:,:) + q1(2,2) * var(2,:,:) + &
1416:                        q1(3,2) * var(3,:,:) + q1(4,2) * var(4,:,:) + &
1417:                        q1(5,2) * var(5,:,:) + q1(6,2) * var(6,:,:) + &
1418:                        q1(7,2) * var(7,:,:) + q1(8,2) * var(8,:,:) ) * idel
1419:      elsewhere
1420:        dvar(2,:,:) = ( q2(1,2) * var(1,:,:) + q2(2,2) * var(2,:,:) + &
1421:                        q2(3,2) * var(3,:,:) + q2(4,2) * var(4,:,:) + &
1422:                        q2(5,2) * var(5,:,:) + q2(6,2) * var(6,:,:) + &
1423:                        q2(7,2) * var(7,:,:) + q2(8,2) * var(8,:,:) ) * idel
1424:      end where
1425:      where ( up(3,:,:) < zero )
1426:        dvar(3,:,:) = ( q1(1,3) * var(1,:,:) + q1(2,3) * var(2,:,:) + &
1427:                        q1(3,3) * var(3,:,:) + q1(4,3) * var(4,:,:) + &
1428:                        q1(5,3) * var(5,:,:) + q1(6,3) * var(6,:,:) + &
1429:                        q1(7,3) * var(7,:,:) + q1(8,3) * var(8,:,:) ) * idel
1430:      elsewhere
1431:        dvar(3,:,:) = ( q2(1,3) * var(1,:,:) + q2(2,3) * var(2,:,:) + &
1432:                        q2(3,3) * var(3,:,:) + q2(4,3) * var(4,:,:) + &
1433:                        q2(5,3) * var(5,:,:) + q2(6,3) * var(6,:,:) + &
1434:                        q2(7,3) * var(7,:,:) + q2(8,3) * var(8,:,:) ) * idel
1435:      end where
1436:      where ( up(4,:,:) < zero )
1437:        dvar(4,:,:) = ( q1(1,4) * var(1,:,:) + q1(2,4) * var(2,:,:) + &
1438:                        q1(3,4) * var(3,:,:) + q1(4,4) * var(4,:,:) + &
1439:                        q1(5,4) * var(5,:,:) + q1(6,4) * var(6,:,:) + &
1440:                        q1(7,4) * var(7,:,:) + q1(8,4) * var(8,:,:) ) * idel
1441:      elsewhere
1442:        dvar(4,:,:) = ( q2(1,4) * var(1,:,:) + q2(2,4) * var(2,:,:) + &
1443:                        q2(3,4) * var(3,:,:) + q2(4,4) * var(4,:,:) + &
1444:                        q2(5,4) * var(5,:,:) + q2(6,4) * var(6,:,:) + &
1445:                        q2(7,4) * var(7,:,:) + q2(8,4) * var(8,:,:) ) * idel
1446:      end where
1447:      where ( up(5,:,:) < zero )
1448:        dvar(5,:,:) = ( q1(1,5) * var(1,:,:) + q1(2,5) * var(2,:,:) + &
1449:                        q1(3,5) * var(3,:,:) + q1(4,5) * var(4,:,:) + &
1450:                        q1(5,5) * var(5,:,:) + q1(6,5) * var(6,:,:) + &
1451:                        q1(7,5) * var(7,:,:) + q1(8,5) * var(8,:,:) + &
1452:                        q1(9,5) * var(9,:,:) ) * idel
1453:      elsewhere
1454:        dvar(5,:,:) = ( q2(1,5) * var(1,:,:) + q2(2,5) * var(2,:,:) + &
1455:                        q2(3,5) * var(3,:,:) + q2(4,5) * var(4,:,:) + &
1456:                        q2(5,5) * var(5,:,:) + q2(6,5) * var(6,:,:) + &
1457:                        q2(7,5) * var(7,:,:) + q2(8,5) * var(8,:,:) + &
1458:                        q2(9,5) * var(9,:,:) ) * idel
1459:      end where
1460:      where ( up(6,:,:) < zero )
1461:        dvar(6,:,:) = ( q1(1,6) * var(1,:,:) + q1(2,6) * var(2,:,:) + &
1462:                        q1(3,6) * var(3,:,:) + q1(4,6) * var(4,:,:) + &
1463:                        q1(5,6) * var(5,:,:) + q1(6,6) * var(6,:,:) + &
1464:                        q1(7,6) * var(7,:,:) + q1(8,6) * var(8,:,:) + &
1465:                        q1(9,6) * var(9,:,:) + q1(10,6) * var(10,:,:) ) * idel
1466:      elsewhere
1467:        dvar(6,:,:) = ( q2(1,6) * var(1,:,:) + q2(2,6) * var(2,:,:) + &
1468:                        q2(3,6) * var(3,:,:) + q2(4,6) * var(4,:,:) + &
1469:                        q2(5,6) * var(5,:,:) + q2(6,6) * var(6,:,:) + &
1470:                        q2(7,6) * var(7,:,:) + q2(8,6) * var(8,:,:) + &
1471:                        q2(9,6) * var(9,:,:) + q2(10,6) * var(10,:,:) ) * idel
1472:      end where
1473:      where ( up(7,:,:) < zero )
1474:        dvar(7,:,:) = ( q1(1,7) * var(1,:,:) + q1(2,7) * var(2,:,:) + &
1475:                        q1(3,7) * var(3,:,:) + q1(4,7) * var(4,:,:) + &
1476:                        q1(5,7) * var(5,:,:) + q1(6,7) * var(6,:,:) + &
1477:                        q1(7,7) * var(7,:,:) + q1(8,7) * var(8,:,:) + &
1478:                        q1(9,7) * var(9,:,:) + q1(10,7) * var(10,:,:) + &
1479:                        q1(11,7) * var(11,:,:) ) * idel
1480:      elsewhere
1481:        dvar(7,:,:) = ( q2(1,7) * var(1,:,:) + q2(2,7) * var(2,:,:) + &
1482:                        q2(3,7) * var(3,:,:) + q2(4,7) * var(4,:,:) + &
1483:                        q2(5,7) * var(5,:,:) + q2(6,7) * var(6,:,:) + &
1484:                        q2(7,7) * var(7,:,:) + q2(8,7) * var(8,:,:) + &
1485:                        q2(9,7) * var(9,:,:) + q2(10,7) * var(10,:,:) + &
1486:                        q2(11,7) * var(11,:,:) ) * idel
1487:      end where
1488:      where ( up(8,:,:) < zero )
1489:        dvar(8,:,:) = ( q1(1,8) * var(1,:,:) + q1(2,8) * var(2,:,:) + &
1490:                        q1(3,8) * var(3,:,:) + q1(4,8) * var(4,:,:) + &
1491:                        q1(5,8) * var(5,:,:) + q1(6,8) * var(6,:,:) + &
1492:                        q1(7,8) * var(7,:,:) + q1(8,8) * var(8,:,:) + &
1493:                        q1(9,8) * var(9,:,:) + q1(10,8) * var(10,:,:) + &
1494:                        q1(11,8) * var(11,:,:) + &
1495:                        q1(12,8) * var(12,:,:) ) * idel
1496:      elsewhere
1497:        dvar(8,:,:) = ( q2(1,8) * var(1,:,:) + q2(2,8) * var(2,:,:) + &
1498:                        q2(3,8) * var(3,:,:) + q2(4,8) * var(4,:,:) + &
1499:                        q2(5,8) * var(5,:,:) + q2(6,8) * var(6,:,:) + &
1500:                        q2(7,8) * var(7,:,:) + q2(8,8) * var(8,:,:) + &
1501:                        q2(9,8) * var(9,:,:) + q2(10,8) * var(10,:,:) + &
1502:                        q2(11,8) * var(11,:,:) + &
1503:                        q2(12,8) * var(12,:,:) ) * idel
1504:      end where
1505:      il = 9
1506:    end if
1507:    if ( bb(2) == 0 ) then
1508:      ir = ni - gsize
1509:    else
1510:      where ( up(ni,:,:) < zero )
1511:        dvar(ni,:,:) =   - ( q2(1,1) * var(ni,:,:) + &
1512:                             q2(2,1) * var(ni-1,:,:) + &
1513:                             q2(3,1) * var(ni-2,:,:) + &
1514:                             q2(4,1) * var(ni-3,:,:) + &
1515:                             q2(5,1) * var(ni-4,:,:) + &
1516:                             q2(6,1) * var(ni-5,:,:) + &
1517:                             q2(7,1) * var(ni-6,:,:) + &
1518:                             q2(8,1) * var(ni-7,:,:) ) * idel
1519:      elsewhere
1520:        dvar(ni,:,:) =   - ( q1(1,1) * var(ni,:,:) + &
1521:                             q1(2,1) * var(ni-1,:,:) + &
1522:                             q1(3,1) * var(ni-2,:,:) + &
1523:                             q1(4,1) * var(ni-3,:,:) + &
1524:                             q1(5,1) * var(ni-4,:,:) + &
1525:                             q1(6,1) * var(ni-5,:,:) + &
1526:                             q1(7,1) * var(ni-6,:,:) + &
1527:                             q1(8,1) * var(ni-7,:,:) ) * idel
1528:      end where
1529:      where ( up(ni-1,:,:) < zero )
1530:        dvar(ni-1,:,:) = - ( q2(1,2) * var(ni,:,:) + &
1531:                             q2(2,2) * var(ni-1,:,:) + &
1532:                             q2(3,2) * var(ni-2,:,:) + &
1533:                             q2(4,2) * var(ni-3,:,:) + &
1534:                             q2(5,2) * var(ni-4,:,:) + &
1535:                             q2(6,2) * var(ni-5,:,:) + &
1536:                             q2(7,2) * var(ni-6,:,:) + &
1537:                             q2(8,2) * var(ni-7,:,:) ) * idel
1538:      elsewhere
1539:        dvar(ni-1,:,:) = - ( q1(1,2) * var(ni,:,:) + &
1540:                             q1(2,2) * var(ni-1,:,:) + &
1541:                             q1(3,2) * var(ni-2,:,:) + &
1542:                             q1(4,2) * var(ni-3,:,:) + &
1543:                             q1(5,2) * var(ni-4,:,:) + &
1544:                             q1(6,2) * var(ni-5,:,:) + &
1545:                             q1(7,2) * var(ni-6,:,:) + &
1546:                             q1(8,2) * var(ni-7,:,:) ) * idel
1547:      end where
1548:      where ( up(ni-2,:,:) < zero )
1549:        dvar(ni-2,:,:) = - ( q2(1,3) * var(ni,:,:) + &
1550:                             q2(2,3) * var(ni-1,:,:) + &
1551:                             q2(3,3) * var(ni-2,:,:) + &
1552:                             q2(4,3) * var(ni-3,:,:) + &
1553:                             q2(5,3) * var(ni-4,:,:) + &
1554:                             q2(6,3) * var(ni-5,:,:) + &
1555:                             q2(7,3) * var(ni-6,:,:) + &
1556:                             q2(8,3) * var(ni-7,:,:) ) * idel
1557:      elsewhere
1558:        dvar(ni-2,:,:) = - ( q1(1,3) * var(ni,:,:) + &
1559:                             q1(2,3) * var(ni-1,:,:) + &
1560:                             q1(3,3) * var(ni-2,:,:) + &
1561:                             q1(4,3) * var(ni-3,:,:) + &
1562:                             q1(5,3) * var(ni-4,:,:) + &
1563:                             q1(6,3) * var(ni-5,:,:) + &
1564:                             q1(7,3) * var(ni-6,:,:) + &
1565:                             q1(8,3) * var(ni-7,:,:) ) * idel
1566:      end where
1567:      where ( up(ni-3,:,:) < zero )
1568:        dvar(ni-3,:,:) = - ( q2(1,4) * var(ni,:,:) + &
1569:                             q2(2,4) * var(ni-1,:,:) + &
1570:                             q2(3,4) * var(ni-2,:,:) + &
1571:                             q2(4,4) * var(ni-3,:,:) + &
1572:                             q2(5,4) * var(ni-4,:,:) + &
1573:                             q2(6,4) * var(ni-5,:,:) + &
1574:                             q2(7,4) * var(ni-6,:,:) + &
1575:                             q2(8,4) * var(ni-7,:,:) ) * idel
1576:      elsewhere
1577:        dvar(ni-3,:,:) = - ( q1(1,4) * var(ni,:,:) + &
1578:                             q1(2,4) * var(ni-1,:,:) + &
1579:                             q1(3,4) * var(ni-2,:,:) + &
1580:                             q1(4,4) * var(ni-3,:,:) + &
1581:                             q1(5,4) * var(ni-4,:,:) + &
1582:                             q1(6,4) * var(ni-5,:,:) + &
1583:                             q1(7,4) * var(ni-6,:,:) + &
1584:                             q1(8,4) * var(ni-7,:,:) ) * idel
1585:      end where
1586:      where ( up(ni-4,:,:) < zero )
1587:        dvar(ni-4,:,:) = - ( q2(1,5) * var(ni,:,:) + &
1588:                             q2(2,5) * var(ni-1,:,:) + &
1589:                             q2(3,5) * var(ni-2,:,:) + &
1590:                             q2(4,5) * var(ni-3,:,:) + &
1591:                             q2(5,5) * var(ni-4,:,:) + &
1592:                             q2(6,5) * var(ni-5,:,:) + &
1593:                             q2(7,5) * var(ni-6,:,:) + &
1594:                             q2(8,5) * var(ni-7,:,:) + &
1595:                             q2(9,5) * var(ni-8,:,:) ) * idel
1596:      elsewhere
1597:        dvar(ni-4,:,:) = - ( q1(1,5) * var(ni,:,:) + &
1598:                             q1(2,5) * var(ni-1,:,:) + &
1599:                             q1(3,5) * var(ni-2,:,:) + &
1600:                             q1(4,5) * var(ni-3,:,:) + &
1601:                             q1(5,5) * var(ni-4,:,:) + &
1602:                             q1(6,5) * var(ni-5,:,:) + &
1603:                             q1(7,5) * var(ni-6,:,:) + &
1604:                             q1(8,5) * var(ni-7,:,:) + &
1605:                             q1(9,5) * var(ni-8,:,:) ) * idel
1606:      end where
1607:      where ( up(ni-5,:,:) < zero )
1608:        dvar(ni-5,:,:) = - ( q2(1,6) * var(ni,:,:) + &
1609:                             q2(2,6) * var(ni-1,:,:) + &
1610:                             q2(3,6) * var(ni-2,:,:) + &
1611:                             q2(4,6) * var(ni-3,:,:) + &
1612:                             q2(5,6) * var(ni-4,:,:) + &
1613:                             q2(6,6) * var(ni-5,:,:) + &
1614:                             q2(7,6) * var(ni-6,:,:) + &
1615:                             q2(8,6) * var(ni-7,:,:) + &
1616:                             q2(9,6) * var(ni-8,:,:) + &
1617:                             q2(10,6) * var(ni-9,:,:) ) * idel
1618:      elsewhere
1619:        dvar(ni-5,:,:) = - ( q1(1,6) * var(ni,:,:) + &
1620:                             q1(2,6) * var(ni-1,:,:) + &
1621:                             q1(3,6) * var(ni-2,:,:) + &
1622:                             q1(4,6) * var(ni-3,:,:) + &
1623:                             q1(5,6) * var(ni-4,:,:) + &
1624:                             q1(6,6) * var(ni-5,:,:) + &
1625:                             q1(7,6) * var(ni-6,:,:) + &
1626:                             q1(8,6) * var(ni-7,:,:) + &
1627:                             q1(9,6) * var(ni-8,:,:) + &
1628:                             q1(10,6) * var(ni-9,:,:) ) * idel
1629:      end where
1630:      where ( up(ni-6,:,:) < zero )
1631:        dvar(ni-6,:,:) = - ( q2(1,7) * var(ni,:,:) + &
1632:                             q2(2,7) * var(ni-1,:,:) + &
1633:                             q2(3,7) * var(ni-2,:,:) + &
1634:                             q2(4,7) * var(ni-3,:,:) + &
1635:                             q2(5,7) * var(ni-4,:,:) + &
1636:                             q2(6,7) * var(ni-5,:,:) + &
1637:                             q2(7,7) * var(ni-6,:,:) + &
1638:                             q2(8,7) * var(ni-7,:,:) + &
1639:                             q2(9,7) * var(ni-8,:,:) + &
1640:                             q2(10,7) * var(ni-9,:,:) + &
1641:                             q2(11,7) * var(ni-10,:,:) ) * idel
1642:      elsewhere
1643:        dvar(ni-6,:,:) = - ( q1(1,7) * var(ni,:,:) + &
1644:                             q1(2,7) * var(ni-1,:,:) + &
1645:                             q1(3,7) * var(ni-2,:,:) + &
1646:                             q1(4,7) * var(ni-3,:,:) + &
1647:                             q1(5,7) * var(ni-4,:,:) + &
1648:                             q1(6,7) * var(ni-5,:,:) + &
1649:                             q1(7,7) * var(ni-6,:,:) + &
1650:                             q1(8,7) * var(ni-7,:,:) + &
1651:                             q1(9,7) * var(ni-8,:,:) + &
1652:                             q1(10,7) * var(ni-9,:,:) + &
1653:                             q1(11,7) * var(ni-10,:,:) ) * idel
1654:      end where
1655:      where ( up(ni-7,:,:) < zero )
1656:        dvar(ni-7,:,:) = - ( q2(1,8) * var(ni,:,:) + &
1657:                             q2(2,8) * var(ni-1,:,:) + &
1658:                             q2(3,8) * var(ni-2,:,:) + &
1659:                             q2(4,8) * var(ni-3,:,:) + &
1660:                             q2(5,8) * var(ni-4,:,:) + &
1661:                             q2(6,8) * var(ni-5,:,:) + &
1662:                             q2(7,8) * var(ni-6,:,:) + &
1663:                             q2(8,8) * var(ni-7,:,:) + &
1664:                             q2(9,8) * var(ni-8,:,:) + &
1665:                             q2(10,8) * var(ni-9,:,:) + &
1666:                             q2(11,8) * var(ni-10,:,:) + &
1667:                             q2(12,8) * var(ni-11,:,:) ) * idel
1668:      elsewhere
1669:        dvar(ni-7,:,:) = - ( q1(1,8) * var(ni,:,:) + &
1670:                             q1(2,8) * var(ni-1,:,:) + &
1671:                             q1(3,8) * var(ni-2,:,:) + &
1672:                             q1(4,8) * var(ni-3,:,:) + &
1673:                             q1(5,8) * var(ni-4,:,:) + &
1674:                             q1(6,8) * var(ni-5,:,:) + &
1675:                             q1(7,8) * var(ni-6,:,:) + &
1676:                             q1(8,8) * var(ni-7,:,:) + &
1677:                             q1(9,8) * var(ni-8,:,:) + &
1678:                             q1(10,8) * var(ni-9,:,:) + &
1679:                             q1(11,8) * var(ni-10,:,:) + &
1680:                             q1(12,8) * var(ni-11,:,:) ) * idel
1681:      end where
1682:      ir = ni - 8
1683:    end if
1684:    if (il > ir+1) call CCTK_Warn(0,667,"Derivatives_8_4_min_err_coeff.F90","SummationByParts", "domain too small")
1685:    where ( up(il:ir,:,:) < zero )
1686:      dvar(il:ir,:,:) = ( a1(-4) * var(il-4:ir-4,:,:) + &
1687:                          a1(-3) * var(il-3:ir-3,:,:) + &
1688:                          a1(-2) * var(il-2:ir-2,:,:) + &
1689:                          a1(-1) * var(il-1:ir-1,:,:) + &
1690:                          a1(0) * var(il:ir,:,:) + &
1691:                          a1(1) * var(il+1:ir+1,:,:) + &
1692:                          a1(2) * var(il+2:ir+2,:,:) + &
1693:                          a1(3) * var(il+3:ir+3,:,:) + &
1694:                          a1(4) * var(il+4:ir+4,:,:) ) * idel
1695:    elsewhere
1696:      dvar(il:ir,:,:) = ( a2(-4) * var(il-4:ir-4,:,:) + &
1697:                          a2(-3) * var(il-3:ir-3,:,:) + &
1698:                          a2(-2) * var(il-2:ir-2,:,:) + &
1699:                          a2(-1) * var(il-1:ir-1,:,:) + &
1700:                          a2(0) * var(il:ir,:,:) + &
1701:                          a2(1) * var(il+1:ir+1,:,:) + &
1702:                          a2(2) * var(il+2:ir+2,:,:) + &
1703:                          a2(3) * var(il+3:ir+3,:,:) + &
1704:                          a2(4) * var(il+4:ir+4,:,:) ) * idel
1705:    end where
1706:  case (1) direction
1707:    if ( zero_derivs_y /= 0 ) then
1708:      dvar = zero
1709:    else
1710:      if ( bb(1) == 0 ) then
1711:        jl = 1 + gsize
1712:      else
1713:        where ( up(:,1,:) < zero )
1714:          dvar(:,1,:) = ( q1(1,1) * var(:,1,:) + q1(2,1) * var(:,2,:) + &
1715:                          q1(3,1) * var(:,3,:) + q1(4,1) * var(:,4,:) + &
1716:                          q1(5,1) * var(:,5,:) + q1(6,1) * var(:,6,:) + &
1717:                          q1(7,1) * var(:,7,:) + q1(8,1) * var(:,8,:) ) * idel
1718:        elsewhere
1719:          dvar(:,1,:) = ( q2(1,1) * var(:,1,:) + q2(2,1) * var(:,2,:) + &
1720:                          q2(3,1) * var(:,3,:) + q2(4,1) * var(:,4,:) + &
1721:                          q2(5,1) * var(:,5,:) + q2(6,1) * var(:,6,:) + &
1722:                          q2(7,1) * var(:,7,:) + q2(8,1) * var(:,8,:) ) * idel
1723:        end where
1724:        where ( up(:,2,:) < zero )
1725:          dvar(:,2,:) = ( q1(1,2) * var(:,1,:) + q1(2,2) * var(:,2,:) + &
1726:                          q1(3,2) * var(:,3,:) + q1(4,2) * var(:,4,:) + &
1727:                          q1(5,2) * var(:,5,:) + q1(6,2) * var(:,6,:) + &
1728:                          q1(7,2) * var(:,7,:) + q1(8,2) * var(:,8,:) ) * idel
1729:        elsewhere
1730:          dvar(:,2,:) = ( q2(1,2) * var(:,1,:) + q2(2,2) * var(:,2,:) + &
1731:                          q2(3,2) * var(:,3,:) + q2(4,2) * var(:,4,:) + &
1732:                          q2(5,2) * var(:,5,:) + q2(6,2) * var(:,6,:) + &
1733:                          q2(7,2) * var(:,7,:) + q2(8,2) * var(:,8,:) ) * idel
1734:        end where
1735:        where ( up(:,3,:) < zero )
1736:          dvar(:,3,:) = ( q1(1,3) * var(:,1,:) + q1(2,3) * var(:,2,:) + &
1737:                          q1(3,3) * var(:,3,:) + q1(4,3) * var(:,4,:) + &
1738:                          q1(5,3) * var(:,5,:) + q1(6,3) * var(:,6,:) + &
1739:                          q1(7,3) * var(:,7,:) + q1(8,3) * var(:,8,:) ) * idel
1740:        elsewhere
1741:          dvar(:,3,:) = ( q2(1,3) * var(:,1,:) + q2(2,3) * var(:,2,:) + &
1742:                          q2(3,3) * var(:,3,:) + q2(4,3) * var(:,4,:) + &
1743:                          q2(5,3) * var(:,5,:) + q2(6,3) * var(:,6,:) + &
1744:                          q2(7,3) * var(:,7,:) + q2(8,3) * var(:,8,:) ) * idel
1745:        end where
1746:        where ( up(:,4,:) < zero )
1747:          dvar(:,4,:) = ( q1(1,4) * var(:,1,:) + q1(2,4) * var(:,2,:) + &
1748:                          q1(3,4) * var(:,3,:) + q1(4,4) * var(:,4,:) + &
1749:                          q1(5,4) * var(:,5,:) + q1(6,4) * var(:,6,:) + &
1750:                          q1(7,4) * var(:,7,:) + q1(8,4) * var(:,8,:) ) * idel
1751:        elsewhere
1752:          dvar(:,4,:) = ( q2(1,4) * var(:,1,:) + q2(2,4) * var(:,2,:) + &
1753:                          q2(3,4) * var(:,3,:) + q2(4,4) * var(:,4,:) + &
1754:                          q2(5,4) * var(:,5,:) + q2(6,4) * var(:,6,:) + &
1755:                          q2(7,4) * var(:,7,:) + q2(8,4) * var(:,8,:) ) * idel
1756:        end where
1757:        where ( up(:,5,:) < zero )
1758:          dvar(:,5,:) = ( q1(1,5) * var(:,1,:) + q1(2,5) * var(:,2,:) + &
1759:                          q1(3,5) * var(:,3,:) + q1(4,5) * var(:,4,:) + &
1760:                          q1(5,5) * var(:,5,:) + q1(6,5) * var(:,6,:) + &
1761:                          q1(7,5) * var(:,7,:) + q1(8,5) * var(:,8,:) + &
1762:                          q1(9,5) * var(:,9,:) ) * idel
1763:        elsewhere
1764:          dvar(:,5,:) = ( q2(1,5) * var(:,1,:) + q2(2,5) * var(:,2,:) + &
1765:                          q2(3,5) * var(:,3,:) + q2(4,5) * var(:,4,:) + &
1766:                          q2(5,5) * var(:,5,:) + q2(6,5) * var(:,6,:) + &
1767:                          q2(7,5) * var(:,7,:) + q2(8,5) * var(:,8,:) + &
1768:                          q2(9,5) * var(:,9,:) ) * idel
1769:        end where
1770:        where ( up(:,6,:) < zero )
1771:          dvar(:,6,:) = ( q1(1,6) * var(:,1,:) + q1(2,6) * var(:,2,:) + &
1772:                          q1(3,6) * var(:,3,:) + q1(4,6) * var(:,4,:) + &
1773:                          q1(5,6) * var(:,5,:) + q1(6,6) * var(:,6,:) + &
1774:                          q1(7,6) * var(:,7,:) + q1(8,6) * var(:,8,:) + &
1775:                          q1(9,6) * var(:,9,:) + q1(10,6) * var(:,10,:) ) * idel
1776:        elsewhere
1777:          dvar(:,6,:) = ( q2(1,6) * var(:,1,:) + q2(2,6) * var(:,2,:) + &
1778:                          q2(3,6) * var(:,3,:) + q2(4,6) * var(:,4,:) + &
1779:                          q2(5,6) * var(:,5,:) + q2(6,6) * var(:,6,:) + &
1780:                          q2(7,6) * var(:,7,:) + q2(8,6) * var(:,8,:) + &
1781:                          q2(9,6) * var(:,9,:) + q2(10,6) * var(:,10,:) ) * idel
1782:        end where
1783:        where ( up(:,7,:) < zero )
1784:          dvar(:,7,:) = ( q1(1,7) * var(:,1,:) + q1(2,7) * var(:,2,:) + &
1785:                          q1(3,7) * var(:,3,:) + q1(4,7) * var(:,4,:) + &
1786:                          q1(5,7) * var(:,5,:) + q1(6,7) * var(:,6,:) + &
1787:                          q1(7,7) * var(:,7,:) + q1(8,7) * var(:,8,:) + &
1788:                          q1(9,7) * var(:,9,:) + q1(10,7) * var(:,10,:) + &
1789:                          q1(11,7) * var(:,11,:) ) * idel
1790:        elsewhere
1791:          dvar(:,7,:) = ( q2(1,7) * var(:,1,:) + q2(2,7) * var(:,2,:) + &
1792:                          q2(3,7) * var(:,3,:) + q2(4,7) * var(:,4,:) + &
1793:                          q2(5,7) * var(:,5,:) + q2(6,7) * var(:,6,:) + &
1794:                          q2(7,7) * var(:,7,:) + q2(8,7) * var(:,8,:) + &
1795:                          q2(9,7) * var(:,9,:) + q2(10,7) * var(:,10,:) + &
1796:                          q2(11,7) * var(:,11,:) ) * idel
1797:        end where
1798:        where ( up(:,8,:) < zero )
1799:          dvar(:,8,:) = ( q1(1,8) * var(:,1,:) + q1(2,8) * var(:,2,:) + &
1800:                          q1(3,8) * var(:,3,:) + q1(4,8) * var(:,4,:) + &
1801:                          q1(5,8) * var(:,5,:) + q1(6,8) * var(:,6,:) + &
1802:                          q1(7,8) * var(:,7,:) + q1(8,8) * var(:,8,:) + &
1803:                          q1(9,8) * var(:,9,:) + q1(10,8) * var(:,10,:) + &
1804:                          q1(11,8) * var(:,11,:) + &
1805:                          q1(12,8) * var(:,12,:) ) * idel
1806:        elsewhere
1807:          dvar(:,8,:) = ( q2(1,8) * var(:,1,:) + q2(2,8) * var(:,2,:) + &
1808:                          q2(3,8) * var(:,3,:) + q2(4,8) * var(:,4,:) + &
1809:                          q2(5,8) * var(:,5,:) + q2(6,8) * var(:,6,:) + &
1810:                          q2(7,8) * var(:,7,:) + q2(8,8) * var(:,8,:) + &
1811:                          q2(9,8) * var(:,9,:) + q2(10,8) * var(:,10,:) + &
1812:                          q2(11,8) * var(:,11,:) + &
1813:                          q2(12,8) * var(:,12,:) ) * idel
1814:        end where
1815:        jl = 9
1816:      end if
1817:      if ( bb(2) == 0 ) then
1818:        jr = nj - gsize
1819:      else
1820:        where ( up(:,nj,:) < zero )
1821:          dvar(:,nj,:) =   - ( q2(1,1) * var(:,nj,:) + &
1822:                               q2(2,1) * var(:,nj-1,:) + &
1823:                               q2(3,1) * var(:,nj-2,:) + &
1824:                               q2(4,1) * var(:,nj-3,:) + &
1825:                               q2(5,1) * var(:,nj-4,:) + &
1826:                               q2(6,1) * var(:,nj-5,:) + &
1827:                               q2(7,1) * var(:,nj-6,:) + &
1828:                               q2(8,1) * var(:,nj-7,:) ) * idel
1829:        elsewhere
1830:          dvar(:,nj,:) =   - ( q1(1,1) * var(:,nj,:) + &
1831:                               q1(2,1) * var(:,nj-1,:) + &
1832:                               q1(3,1) * var(:,nj-2,:) + &
1833:                               q1(4,1) * var(:,nj-3,:) + &
1834:                               q1(5,1) * var(:,nj-4,:) + &
1835:                               q1(6,1) * var(:,nj-5,:) + &
1836:                               q1(7,1) * var(:,nj-6,:) + &
1837:                               q1(8,1) * var(:,nj-7,:) ) * idel
1838:        end where
1839:        where ( up(:,nj-1,:) < zero )
1840:          dvar(:,nj-1,:) = - ( q2(1,2) * var(:,nj,:) + &
1841:                               q2(2,2) * var(:,nj-1,:) + &
1842:                               q2(3,2) * var(:,nj-2,:) + &
1843:                               q2(4,2) * var(:,nj-3,:) + &
1844:                               q2(5,2) * var(:,nj-4,:) + &
1845:                               q2(6,2) * var(:,nj-5,:) + &
1846:                               q2(7,2) * var(:,nj-6,:) + &
1847:                               q2(8,2) * var(:,nj-7,:) ) * idel
1848:        elsewhere
1849:          dvar(:,nj-1,:) = - ( q1(1,2) * var(:,nj,:) + &
1850:                               q1(2,2) * var(:,nj-1,:) + &
1851:                               q1(3,2) * var(:,nj-2,:) + &
1852:                               q1(4,2) * var(:,nj-3,:) + &
1853:                               q1(5,2) * var(:,nj-4,:) + &
1854:                               q1(6,2) * var(:,nj-5,:) + &
1855:                               q1(7,2) * var(:,nj-6,:) + &
1856:                               q1(8,2) * var(:,nj-7,:) ) * idel
1857:        end where
1858:        where ( up(:,nj-2,:) < zero )
1859:          dvar(:,nj-2,:) = - ( q2(1,3) * var(:,nj,:) + &
1860:                               q2(2,3) * var(:,nj-1,:) + &
1861:                               q2(3,3) * var(:,nj-2,:) + &
1862:                               q2(4,3) * var(:,nj-3,:) + &
1863:                               q2(5,3) * var(:,nj-4,:) + &
1864:                               q2(6,3) * var(:,nj-5,:) + &
1865:                               q2(7,3) * var(:,nj-6,:) + &
1866:                               q2(8,3) * var(:,nj-7,:) ) * idel
1867:        elsewhere
1868:          dvar(:,nj-2,:) = - ( q1(1,3) * var(:,nj,:) + &
1869:                               q1(2,3) * var(:,nj-1,:) + &
1870:                               q1(3,3) * var(:,nj-2,:) + &
1871:                               q1(4,3) * var(:,nj-3,:) + &
1872:                               q1(5,3) * var(:,nj-4,:) + &
1873:                               q1(6,3) * var(:,nj-5,:) + &
1874:                               q1(7,3) * var(:,nj-6,:) + &
1875:                               q1(8,3) * var(:,nj-7,:) ) * idel
1876:        end where
1877:        where ( up(:,nj-3,:) < zero )
1878:          dvar(:,nj-3,:) = - ( q2(1,4) * var(:,nj,:) + &
1879:                               q2(2,4) * var(:,nj-1,:) + &
1880:                               q2(3,4) * var(:,nj-2,:) + &
1881:                               q2(4,4) * var(:,nj-3,:) + &
1882:                               q2(5,4) * var(:,nj-4,:) + &
1883:                               q2(6,4) * var(:,nj-5,:) + &
1884:                               q2(7,4) * var(:,nj-6,:) + &
1885:                               q2(8,4) * var(:,nj-7,:) ) * idel
1886:        elsewhere
1887:          dvar(:,nj-3,:) = - ( q1(1,4) * var(:,nj,:) + &
1888:                               q1(2,4) * var(:,nj-1,:) + &
1889:                               q1(3,4) * var(:,nj-2,:) + &
1890:                               q1(4,4) * var(:,nj-3,:) + &
1891:                               q1(5,4) * var(:,nj-4,:) + &
1892:                               q1(6,4) * var(:,nj-5,:) + &
1893:                               q1(7,4) * var(:,nj-6,:) + &
1894:                               q1(8,4) * var(:,nj-7,:) ) * idel
1895:        end where
1896:        where ( up(:,nj-4,:) < zero )
1897:          dvar(:,nj-4,:) = - ( q2(1,5) * var(:,nj,:) + &
1898:                               q2(2,5) * var(:,nj-1,:) + &
1899:                               q2(3,5) * var(:,nj-2,:) + &
1900:                               q2(4,5) * var(:,nj-3,:) + &
1901:                               q2(5,5) * var(:,nj-4,:) + &
1902:                               q2(6,5) * var(:,nj-5,:) + &
1903:                               q2(7,5) * var(:,nj-6,:) + &
1904:                               q2(8,5) * var(:,nj-7,:) + &
1905:                               q2(9,5) * var(:,nj-8,:) ) * idel
1906:        elsewhere
1907:          dvar(:,nj-4,:) = - ( q1(1,5) * var(:,nj,:) + &
1908:                               q1(2,5) * var(:,nj-1,:) + &
1909:                               q1(3,5) * var(:,nj-2,:) + &
1910:                               q1(4,5) * var(:,nj-3,:) + &
1911:                               q1(5,5) * var(:,nj-4,:) + &
1912:                               q1(6,5) * var(:,nj-5,:) + &
1913:                               q1(7,5) * var(:,nj-6,:) + &
1914:                               q1(8,5) * var(:,nj-7,:) + &
1915:                               q1(9,5) * var(:,nj-8,:) ) * idel
1916:        end where
1917:        where ( up(:,nj-5,:) < zero )
1918:          dvar(:,nj-5,:) = - ( q2(1,6) * var(:,nj,:) + &
1919:                               q2(2,6) * var(:,nj-1,:) + &
1920:                               q2(3,6) * var(:,nj-2,:) + &
1921:                               q2(4,6) * var(:,nj-3,:) + &
1922:                               q2(5,6) * var(:,nj-4,:) + &
1923:                               q2(6,6) * var(:,nj-5,:) + &
1924:                               q2(7,6) * var(:,nj-6,:) + &
1925:                               q2(8,6) * var(:,nj-7,:) + &
1926:                               q2(9,6) * var(:,nj-8,:) + &
1927:                               q2(10,6) * var(:,nj-9,:) ) * idel
1928:        elsewhere
1929:          dvar(:,nj-5,:) = - ( q1(1,6) * var(:,nj,:) + &
1930:                               q1(2,6) * var(:,nj-1,:) + &
1931:                               q1(3,6) * var(:,nj-2,:) + &
1932:                               q1(4,6) * var(:,nj-3,:) + &
1933:                               q1(5,6) * var(:,nj-4,:) + &
1934:                               q1(6,6) * var(:,nj-5,:) + &
1935:                               q1(7,6) * var(:,nj-6,:) + &
1936:                               q1(8,6) * var(:,nj-7,:) + &
1937:                               q1(9,6) * var(:,nj-8,:) + &
1938:                               q1(10,6) * var(:,nj-9,:) ) * idel
1939:        end where
1940:        where ( up(:,nj-6,:) < zero )
1941:          dvar(:,nj-6,:) = - ( q2(1,7) * var(:,nj,:) + &
1942:                               q2(2,7) * var(:,nj-1,:) + &
1943:                               q2(3,7) * var(:,nj-2,:) + &
1944:                               q2(4,7) * var(:,nj-3,:) + &
1945:                               q2(5,7) * var(:,nj-4,:) + &
1946:                               q2(6,7) * var(:,nj-5,:) + &
1947:                               q2(7,7) * var(:,nj-6,:) + &
1948:                               q2(8,7) * var(:,nj-7,:) + &
1949:                               q2(9,7) * var(:,nj-8,:) + &
1950:                               q2(10,7) * var(:,nj-9,:) + &
1951:                               q2(11,7) * var(:,nj-10,:) ) * idel
1952:        elsewhere
1953:          dvar(:,nj-6,:) = - ( q1(1,7) * var(:,nj,:) + &
1954:                               q1(2,7) * var(:,nj-1,:) + &
1955:                               q1(3,7) * var(:,nj-2,:) + &
1956:                               q1(4,7) * var(:,nj-3,:) + &
1957:                               q1(5,7) * var(:,nj-4,:) + &
1958:                               q1(6,7) * var(:,nj-5,:) + &
1959:                               q1(7,7) * var(:,nj-6,:) + &
1960:                               q1(8,7) * var(:,nj-7,:) + &
1961:                               q1(9,7) * var(:,nj-8,:) + &
1962:                               q1(10,7) * var(:,nj-9,:) + &
1963:                               q1(11,7) * var(:,nj-10,:) ) * idel
1964:        end where
1965:        where ( up(:,nj-7,:) < zero )
1966:          dvar(:,nj-7,:) = - ( q2(1,8) * var(:,nj,:) + &
1967:                               q2(2,8) * var(:,nj-1,:) + &
1968:                               q2(3,8) * var(:,nj-2,:) + &
1969:                               q2(4,8) * var(:,nj-3,:) + &
1970:                               q2(5,8) * var(:,nj-4,:) + &
1971:                               q2(6,8) * var(:,nj-5,:) + &
1972:                               q2(7,8) * var(:,nj-6,:) + &
1973:                               q2(8,8) * var(:,nj-7,:) + &
1974:                               q2(9,8) * var(:,nj-8,:) + &
1975:                               q2(10,8) * var(:,nj-9,:) + &
1976:                               q2(11,8) * var(:,nj-10,:) + &
1977:                               q2(12,8) * var(:,nj-11,:) ) * idel
1978:        elsewhere
1979:          dvar(:,nj-7,:) = - ( q1(1,8) * var(:,nj,:) + &
1980:                               q1(2,8) * var(:,nj-1,:) + &
1981:                               q1(3,8) * var(:,nj-2,:) + &
1982:                               q1(4,8) * var(:,nj-3,:) + &
1983:                               q1(5,8) * var(:,nj-4,:) + &
1984:                               q1(6,8) * var(:,nj-5,:) + &
1985:                               q1(7,8) * var(:,nj-6,:) + &
1986:                               q1(8,8) * var(:,nj-7,:) + &
1987:                               q1(9,8) * var(:,nj-8,:) + &
1988:                               q1(10,8) * var(:,nj-9,:) + &
1989:                               q1(11,8) * var(:,nj-10,:) + &
1990:                               q1(12,8) * var(:,nj-11,:) ) * idel
1991:        end where
1992:        jr = nj - 8
1993:      end if
1994:      if (jl > jr+1) call CCTK_Warn(0,977,"Derivatives_8_4_min_err_coeff.F90","SummationByParts", "domain too small")
1995:      where ( up(:,jl:jr,:) < zero )
1996:        dvar(:,jl:jr,:) = ( a1(-4) * var(:,jl-4:jr-4,:) + &
1997:                            a1(-3) * var(:,jl-3:jr-3,:) + &
1998:                            a1(-2) * var(:,jl-2:jr-2,:) + &
1999:                            a1(-1) * var(:,jl-1:jr-1,:) + &
2000:                            a1(0)  * var(:,jl:jr,:) + &
2001:                            a1(1)  * var(:,jl+1:jr+1,:) + &
2002:                            a1(2)  * var(:,jl+2:jr+2,:) + &
2003:                            a1(3)  * var(:,jl+3:jr+3,:) + &
2004:                            a1(4)  * var(:,jl+4:jr+4,:) ) * idel
2005:      elsewhere
2006:        dvar(:,jl:jr,:) = ( a2(-4) * var(:,jl-4:jr-4,:) + &
2007:                            a2(-3) * var(:,jl-3:jr-3,:) + &
2008:                            a2(-2) * var(:,jl-2:jr-2,:) + &
2009:                            a2(-1) * var(:,jl-1:jr-1,:) + &
2010:                            a2(0)  * var(:,jl:jr,:) + &
2011:                            a2(1)  * var(:,jl+1:jr+1,:) + &
2012:                            a2(2)  * var(:,jl+2:jr+2,:) + &
2013:                            a2(3)  * var(:,jl+3:jr+3,:) + &
2014:                            a2(4)  * var(:,jl+4:jr+4,:) ) * idel
2015:      end where
2016:    end if
2017:  case (2) direction
2018:    if ( zero_derivs_z /= 0 ) then
2019:      dvar = zero
2020:    else
2021:      if ( bb(1) == 0 ) then
2022:        kl = 1 + gsize
2023:      else
2024:        where ( up(:,:,1) < zero )
2025:          dvar(:,:,1) = ( q2(1,1) * var(:,:,1) + q2(2,1) * var(:,:,2) + &
2026:                          q2(3,1) * var(:,:,3) + q2(4,1) * var(:,:,4) + &
2027:                          q2(5,1) * var(:,:,5) + q2(6,1) * var(:,:,6) + &
2028:                          q2(7,1) * var(:,:,7) + q2(8,1) * var(:,:,8) ) * idel
2029:        elsewhere
2030:          dvar(:,:,1) = ( q2(1,1) * var(:,:,1) + q2(2,1) * var(:,:,2) + &
2031:                          q2(3,1) * var(:,:,3) + q2(4,1) * var(:,:,4) + &
2032:                          q2(5,1) * var(:,:,5) + q2(6,1) * var(:,:,6) + &
2033:                          q2(7,1) * var(:,:,7) + q2(8,1) * var(:,:,8) ) * idel
2034:        end where
2035:        where ( up(:,:,2) < zero )
2036:          dvar(:,:,2) = ( q1(1,2) * var(:,:,1) + q1(2,2) * var(:,:,2) + &
2037:                          q1(3,2) * var(:,:,3) + q1(4,2) * var(:,:,4) + &
2038:                          q1(5,2) * var(:,:,5) + q1(6,2) * var(:,:,6) + &
2039:                          q1(7,2) * var(:,:,7) + q1(8,2) * var(:,:,8) ) * idel
2040:        elsewhere
2041:          dvar(:,:,2) = ( q2(1,2) * var(:,:,1) + q2(2,2) * var(:,:,2) + &
2042:                          q2(3,2) * var(:,:,3) + q2(4,2) * var(:,:,4) + &
2043:                          q2(5,2) * var(:,:,5) + q2(6,2) * var(:,:,6) + &
2044:                          q2(7,2) * var(:,:,7) + q2(8,2) * var(:,:,8) ) * idel
2045:        end where
2046:        where ( up(:,:,3) < zero )
2047:          dvar(:,:,3) = ( q1(1,3) * var(:,:,1) + q1(2,3) * var(:,:,2) + &
2048:                          q1(3,3) * var(:,:,3) + q1(4,3) * var(:,:,4) + &
2049:                          q1(5,3) * var(:,:,5) + q1(6,3) * var(:,:,6) + &
2050:                          q1(7,3) * var(:,:,7) + q1(8,3) * var(:,:,8) ) * idel
2051:        elsewhere
2052:          dvar(:,:,3) = ( q2(1,3) * var(:,:,1) + q2(2,3) * var(:,:,2) + &
2053:                          q2(3,3) * var(:,:,3) + q2(4,3) * var(:,:,4) + &
2054:                          q2(5,3) * var(:,:,5) + q2(6,3) * var(:,:,6) + &
2055:                          q2(7,3) * var(:,:,7) + q2(8,3) * var(:,:,8) ) * idel
2056:        end where
2057:        where ( up(:,:,4) < zero )
2058:          dvar(:,:,4) = ( q1(1,4) * var(:,:,1) + q1(2,4) * var(:,:,2) + &
2059:                          q1(3,4) * var(:,:,3) + q1(4,4) * var(:,:,4) + &
2060:                          q1(5,4) * var(:,:,5) + q1(6,4) * var(:,:,6) + &
2061:                          q1(7,4) * var(:,:,7) + q1(8,4) * var(:,:,8) ) * idel
2062:        elsewhere
2063:          dvar(:,:,4) = ( q2(1,4) * var(:,:,1) + q2(2,4) * var(:,:,2) + &
2064:                          q2(3,4) * var(:,:,3) + q2(4,4) * var(:,:,4) + &
2065:                          q2(5,4) * var(:,:,5) + q2(6,4) * var(:,:,6) + &
2066:                          q2(7,4) * var(:,:,7) + q2(8,4) * var(:,:,8) ) * idel
2067:        end where
2068:        where ( up(:,:,5) < zero )
2069:          dvar(:,:,5) = ( q1(1,5) * var(:,:,1) + q1(2,5) * var(:,:,2) + &
2070:                          q1(3,5) * var(:,:,3) + q1(4,5) * var(:,:,4) + &
2071:                          q1(5,5) * var(:,:,5) + q1(6,5) * var(:,:,6) + &
2072:                          q1(7,5) * var(:,:,7) + q1(8,5) * var(:,:,8) + &
2073:                          q1(9,5) * var(:,:,9) ) * idel
2074:        elsewhere
2075:          dvar(:,:,5) = ( q2(1,5) * var(:,:,1) + q2(2,5) * var(:,:,2) + &
2076:                          q2(3,5) * var(:,:,3) + q2(4,5) * var(:,:,4) + &
2077:                          q2(5,5) * var(:,:,5) + q2(6,5) * var(:,:,6) + &
2078:                          q2(7,5) * var(:,:,7) + q2(8,5) * var(:,:,8) + &
2079:                          q2(9,5) * var(:,:,9) ) * idel
2080:        end where
2081:        where ( up(:,:,6) < zero )
2082:          dvar(:,:,6) = ( q1(1,6) * var(:,:,1) + q1(2,6) * var(:,:,2) + &
2083:                          q1(3,6) * var(:,:,3) + q1(4,6) * var(:,:,4) + &
2084:                          q1(5,6) * var(:,:,5) + q1(6,6) * var(:,:,6) + &
2085:                          q1(7,6) * var(:,:,7) + q1(8,6) * var(:,:,8) + &
2086:                          q1(9,6) * var(:,:,9) + q1(10,6) * var(:,:,10) ) * idel
2087:        elsewhere
2088:          dvar(:,:,6) = ( q2(1,6) * var(:,:,1) + q2(2,6) * var(:,:,2) + &
2089:                          q2(3,6) * var(:,:,3) + q2(4,6) * var(:,:,4) + &
2090:                          q2(5,6) * var(:,:,5) + q2(6,6) * var(:,:,6) + &
2091:                          q2(7,6) * var(:,:,7) + q2(8,6) * var(:,:,8) + &
2092:                          q2(9,6) * var(:,:,9) + q2(10,6) * var(:,:,10) ) * idel
2093:        end where
2094:        where ( up(:,:,7) < zero )
2095:          dvar(:,:,7) = ( q1(1,7) * var(:,:,1) + q1(2,7) * var(:,:,2) + &
2096:                          q1(3,7) * var(:,:,3) + q1(4,7) * var(:,:,4) + &
2097:                          q1(5,7) * var(:,:,5) + q1(6,7) * var(:,:,6) + &
2098:                          q1(7,7) * var(:,:,7) + q1(8,7) * var(:,:,8) + &
2099:                          q1(9,7) * var(:,:,9) + q1(10,7) * var(:,:,10) + &
2100:                          q1(11,7) * var(:,:,11) ) * idel
2101:        elsewhere
2102:          dvar(:,:,7) = ( q2(1,7) * var(:,:,1) + q2(2,7) * var(:,:,2) + &
2103:                          q2(3,7) * var(:,:,3) + q2(4,7) * var(:,:,4) + &
2104:                          q2(5,7) * var(:,:,5) + q2(6,7) * var(:,:,6) + &
2105:                          q2(7,7) * var(:,:,7) + q2(8,7) * var(:,:,8) + &
2106:                          q2(9,7) * var(:,:,9) + q2(10,7) * var(:,:,10) + &
2107:                          q2(11,7) * var(:,:,11) ) * idel
2108:        end where
2109:        where ( up(:,:,8) < zero )
2110:          dvar(:,:,8) = ( q1(1,8) * var(:,:,1) + q1(2,8) * var(:,:,2) + &
2111:                          q1(3,8) * var(:,:,3) + q1(4,8) * var(:,:,4) + &
2112:                          q1(5,8) * var(:,:,5) + q1(6,8) * var(:,:,6) + &
2113:                          q1(7,8) * var(:,:,7) + q1(8,8) * var(:,:,8) + &
2114:                          q1(9,8) * var(:,:,9) + q1(10,8) * var(:,:,10) + &
2115:                          q1(11,8) * var(:,:,11) + &
2116:                          q1(12,8) * var(:,:,12) ) * idel
2117:        elsewhere
2118:          dvar(:,:,8) = ( q2(1,8) * var(:,:,1) + q2(2,8) * var(:,:,2) + &
2119:                          q2(3,8) * var(:,:,3) + q2(4,8) * var(:,:,4) + &
2120:                          q2(5,8) * var(:,:,5) + q2(6,8) * var(:,:,6) + &
2121:                          q2(7,8) * var(:,:,7) + q2(8,8) * var(:,:,8) + &
2122:                          q2(9,8) * var(:,:,9) + q2(10,8) * var(:,:,10) + &
2123:                          q2(11,8) * var(:,:,11) + &
2124:                          q2(12,8) * var(:,:,12) ) * idel
2125:        end where
2126:        kl = 9
2127:      end if
2128:      if ( bb(2) == 0 ) then
2129:        kr = nk - gsize
2130:      else
2131:        where ( up(:,:,nk) < zero )
2132:          dvar(:,:,nk) =   - ( q2(1,1) * var(:,:,nk) + &
2133:                               q2(2,1) * var(:,:,nk-1) + &
2134:                               q2(3,1) * var(:,:,nk-2) + &
2135:                               q2(4,1) * var(:,:,nk-3) + &
2136:                               q2(5,1) * var(:,:,nk-4) + &
2137:                               q2(6,1) * var(:,:,nk-5) + &
2138:                               q2(7,1) * var(:,:,nk-6) + &
2139:                               q2(8,1) * var(:,:,nk-7) ) * idel
2140:        elsewhere
2141:          dvar(:,:,nk) =   - ( q1(1,1) * var(:,:,nk) + &
2142:                               q1(2,1) * var(:,:,nk-1) + &
2143:                               q1(3,1) * var(:,:,nk-2) + &
2144:                               q1(4,1) * var(:,:,nk-3) + &
2145:                               q1(5,1) * var(:,:,nk-4) + &
2146:                               q1(6,1) * var(:,:,nk-5) + &
2147:                               q1(7,1) * var(:,:,nk-6) + &
2148:                               q1(8,1) * var(:,:,nk-7) ) * idel
2149:        end where
2150:        where ( up(:,:,nk-1) < zero )
2151:          dvar(:,:,nk-1) = - ( q2(1,2) * var(:,:,nk) + &
2152:                               q2(2,2) * var(:,:,nk-1) + &
2153:                               q2(3,2) * var(:,:,nk-2) + &
2154:                               q2(4,2) * var(:,:,nk-3) + &
2155:                               q2(5,2) * var(:,:,nk-4) + &
2156:                               q2(6,2) * var(:,:,nk-5) + &
2157:                               q2(7,2) * var(:,:,nk-6) + &
2158:                               q2(8,2) * var(:,:,nk-7) ) * idel
2159:        elsewhere
2160:          dvar(:,:,nk-1) = - ( q1(1,2) * var(:,:,nk) + &
2161:                               q1(2,2) * var(:,:,nk-1) + &
2162:                               q1(3,2) * var(:,:,nk-2) + &
2163:                               q1(4,2) * var(:,:,nk-3) + &
2164:                               q1(5,2) * var(:,:,nk-4) + &
2165:                               q1(6,2) * var(:,:,nk-5) + &
2166:                               q1(7,2) * var(:,:,nk-6) + &
2167:                               q1(8,2) * var(:,:,nk-7) ) * idel
2168:        end where
2169:        where ( up(:,:,nk-2) < zero )
2170:          dvar(:,:,nk-2) = - ( q2(1,3) * var(:,:,nk) + &
2171:                               q2(2,3) * var(:,:,nk-1) + &
2172:                               q2(3,3) * var(:,:,nk-2) + &
2173:                               q2(4,3) * var(:,:,nk-3) + &
2174:                               q2(5,3) * var(:,:,nk-4) + &
2175:                               q2(6,3) * var(:,:,nk-5) + &
2176:                               q2(7,3) * var(:,:,nk-6) + &
2177:                               q2(8,3) * var(:,:,nk-7) ) * idel
2178:        elsewhere
2179:          dvar(:,:,nk-2) = - ( q1(1,3) * var(:,:,nk) + &
2180:                               q1(2,3) * var(:,:,nk-1) + &
2181:                               q1(3,3) * var(:,:,nk-2) + &
2182:                               q1(4,3) * var(:,:,nk-3) + &
2183:                               q1(5,3) * var(:,:,nk-4) + &
2184:                               q1(6,3) * var(:,:,nk-5) + &
2185:                               q1(7,3) * var(:,:,nk-6) + &
2186:                               q1(8,3) * var(:,:,nk-7) ) * idel
2187:        end where
2188:        where ( up(:,:,nk-3) < zero )
2189:          dvar(:,:,nk-3) = - ( q2(1,4) * var(:,:,nk) + &
2190:                               q2(2,4) * var(:,:,nk-1) + &
2191:                               q2(3,4) * var(:,:,nk-2) + &
2192:                               q2(4,4) * var(:,:,nk-3) + &
2193:                               q2(5,4) * var(:,:,nk-4) + &
2194:                               q2(6,4) * var(:,:,nk-5) + &
2195:                               q2(7,4) * var(:,:,nk-6) + &
2196:                               q2(8,4) * var(:,:,nk-7) ) * idel
2197:        elsewhere
2198:          dvar(:,:,nk-3) = - ( q1(1,4) * var(:,:,nk) + &
2199:                               q1(2,4) * var(:,:,nk-1) + &
2200:                               q1(3,4) * var(:,:,nk-2) + &
2201:                               q1(4,4) * var(:,:,nk-3) + &
2202:                               q1(5,4) * var(:,:,nk-4) + &
2203:                               q1(6,4) * var(:,:,nk-5) + &
2204:                               q1(7,4) * var(:,:,nk-6) + &
2205:                               q1(8,4) * var(:,:,nk-7) ) * idel
2206:        end where
2207:        where ( up(:,:,nk-4) < zero )
2208:          dvar(:,:,nk-4) = - ( q2(1,5) * var(:,:,nk) + &
2209:                               q2(2,5) * var(:,:,nk-1) + &
2210:                               q2(3,5) * var(:,:,nk-2) + &
2211:                               q2(4,5) * var(:,:,nk-3) + &
2212:                               q2(5,5) * var(:,:,nk-4) + &
2213:                               q2(6,5) * var(:,:,nk-5) + &
2214:                               q2(7,5) * var(:,:,nk-6) + &
2215:                               q2(8,5) * var(:,:,nk-7) + &
2216:                               q2(9,5) * var(:,:,nk-8) ) * idel
2217:        elsewhere
2218:          dvar(:,:,nk-4) = - ( q1(1,5) * var(:,:,nk) + &
2219:                               q1(2,5) * var(:,:,nk-1) + &
2220:                               q1(3,5) * var(:,:,nk-2) + &
2221:                               q1(4,5) * var(:,:,nk-3) + &
2222:                               q1(5,5) * var(:,:,nk-4) + &
2223:                               q1(6,5) * var(:,:,nk-5) + &
2224:                               q1(7,5) * var(:,:,nk-6) + &
2225:                               q1(8,5) * var(:,:,nk-7) + &
2226:                               q1(9,5) * var(:,:,nk-8) ) * idel
2227:        end where
2228:        where ( up(:,:,nk-5) < zero )
2229:          dvar(:,:,nk-5) = - ( q2(1,6) * var(:,:,nk) + &
2230:                               q2(2,6) * var(:,:,nk-1) + &
2231:                               q2(3,6) * var(:,:,nk-2) + &
2232:                               q2(4,6) * var(:,:,nk-3) + &
2233:                               q2(5,6) * var(:,:,nk-4) + &
2234:                               q2(6,6) * var(:,:,nk-5) + &
2235:                               q2(7,6) * var(:,:,nk-6) + &
2236:                               q2(8,6) * var(:,:,nk-7) + &
2237:                               q2(9,6) * var(:,:,nk-8) + &
2238:                               q2(10,6) * var(:,:,nk-9) ) * idel
2239:        elsewhere
2240:          dvar(:,:,nk-5) = - ( q1(1,6) * var(:,:,nk) + &
2241:                               q1(2,6) * var(:,:,nk-1) + &
2242:                               q1(3,6) * var(:,:,nk-2) + &
2243:                               q1(4,6) * var(:,:,nk-3) + &
2244:                               q1(5,6) * var(:,:,nk-4) + &
2245:                               q1(6,6) * var(:,:,nk-5) + &
2246:                               q1(7,6) * var(:,:,nk-6) + &
2247:                               q1(8,6) * var(:,:,nk-7) + &
2248:                               q1(9,6) * var(:,:,nk-8) + &
2249:                               q1(10,6) * var(:,:,nk-9) ) * idel
2250:        end where
2251:        where ( up(:,:,nk-6) < zero )
2252:          dvar(:,:,nk-6) = - ( q2(1,7) * var(:,:,nk) + &
2253:                               q2(2,7) * var(:,:,nk-1) + &
2254:                               q2(3,7) * var(:,:,nk-2) + &
2255:                               q2(4,7) * var(:,:,nk-3) + &
2256:                               q2(5,7) * var(:,:,nk-4) + &
2257:                               q2(6,7) * var(:,:,nk-5) + &
2258:                               q2(7,7) * var(:,:,nk-6) + &
2259:                               q2(8,7) * var(:,:,nk-7) + &
2260:                               q2(9,7) * var(:,:,nk-8) + &
2261:                               q2(10,7) * var(:,:,nk-9) + &
2262:                               q2(11,7) * var(:,:,nk-10) ) * idel
2263:        elsewhere
2264:          dvar(:,:,nk-6) = - ( q1(1,7) * var(:,:,nk) + &
2265:                               q1(2,7) * var(:,:,nk-1) + &
2266:                               q1(3,7) * var(:,:,nk-2) + &
2267:                               q1(4,7) * var(:,:,nk-3) + &
2268:                               q1(5,7) * var(:,:,nk-4) + &
2269:                               q1(6,7) * var(:,:,nk-5) + &
2270:                               q1(7,7) * var(:,:,nk-6) + &
2271:                               q1(8,7) * var(:,:,nk-7) + &
2272:                               q1(9,7) * var(:,:,nk-8) + &
2273:                               q1(10,7) * var(:,:,nk-9) + &
2274:                               q1(11,7) * var(:,:,nk-10) ) * idel
2275:        end where
2276:        where ( up(:,:,nk-7) < zero )
2277:          dvar(:,:,nk-7) = - ( q2(1,8) * var(:,:,nk) + &
2278:                               q2(2,8) * var(:,:,nk-1) + &
2279:                               q2(3,8) * var(:,:,nk-2) + &
2280:                               q2(4,8) * var(:,:,nk-3) + &
2281:                               q2(5,8) * var(:,:,nk-4) + &
2282:                               q2(6,8) * var(:,:,nk-5) + &
2283:                               q2(7,8) * var(:,:,nk-6) + &
2284:                               q2(8,8) * var(:,:,nk-7) + &
2285:                               q2(9,8) * var(:,:,nk-8) + &
2286:                               q2(10,8) * var(:,:,nk-9) + &
2287:                               q2(11,8) * var(:,:,nk-10) + &
2288:                               q2(12,8) * var(:,:,nk-11) ) * idel
2289:        elsewhere
2290:          dvar(:,:,nk-7) = - ( q1(1,8) * var(:,:,nk) + &
2291:                               q1(2,8) * var(:,:,nk-1) + &
2292:                               q1(3,8) * var(:,:,nk-2) + &
2293:                               q1(4,8) * var(:,:,nk-3) + &
2294:                               q1(5,8) * var(:,:,nk-4) + &
2295:                               q1(6,8) * var(:,:,nk-5) + &
2296:                               q1(7,8) * var(:,:,nk-6) + &
2297:                               q1(8,8) * var(:,:,nk-7) + &
2298:                               q1(9,8) * var(:,:,nk-8) + &
2299:                               q1(10,8) * var(:,:,nk-9) + &
2300:                               q1(11,8) * var(:,:,nk-10) + &
2301:                               q1(12,8) * var(:,:,nk-11) ) * idel
2302:        end where
2303:        kr = nk - 8
2304:      end if
2305:      if (kl > kr+1) call CCTK_Warn(0,1288,"Derivatives_8_4_min_err_coeff.F90","SummationByParts", "domain too small")
2306:      where ( up(:,:,kl:kr) < zero )
2307:        dvar(:,:,kl:kr) = ( a1(-4) * var(:,:,kl-4:kr-4) + &
2308:                            a1(-3) * var(:,:,kl-3:kr-3) + &
2309:                            a1(-2) * var(:,:,kl-2:kr-2) + &
2310:                            a1(-1) * var(:,:,kl-1:kr-1) + &
2311:                            a1(0)  * var(:,:,kl:kr) + &
2312:                            a1(1)  * var(:,:,kl+1:kr+1) + &
2313:                            a1(2)  * var(:,:,kl+2:kr+2) + &
2314:                            a1(3)  * var(:,:,kl+3:kr+3) + &
2315:                            a1(4)  * var(:,:,kl+4:kr+4) ) * idel
2316:      elsewhere
2317:        dvar(:,:,kl:kr) = ( a2(-4) * var(:,:,kl-4:kr-4) + &
2318:                            a2(-3) * var(:,:,kl-3:kr-3) + &
2319:                            a2(-2) * var(:,:,kl-2:kr-2) + &
2320:                            a2(-1) * var(:,:,kl-1:kr-1) + &
2321:                            a2(0)  * var(:,:,kl:kr) + &
2322:                            a2(1)  * var(:,:,kl+1:kr+1) + &
2323:                            a2(2)  * var(:,:,kl+2:kr+2) + &
2324:                            a2(3)  * var(:,:,kl+3:kr+3) + &
2325:                            a2(4)  * var(:,:,kl+4:kr+4) ) * idel
2326:      end where
2327:    end if
2328:  end select direction
2329:end subroutine up_deriv_gf_8_4_opt