-
Notifications
You must be signed in to change notification settings - Fork 2
/
main.scmc
1795 lines (1740 loc) · 79.9 KB
/
main.scmc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
;paravec.scmc dm_fv.scmc general_macros.scmc load_gapsio.scmc checkpoint_data_needed.scmc main_iter_macro.scmc
(include< "stdio.h")
(include< "stdlib.h")
(include< "stdint.h")
(include< "string.h")
(include< "math.h")
(include< "time.h")
(include< "assert.h")
(eval-scmc-global (begin (load "pscmc_config_runtime.ss") (load "main_iter_macro.scmc") '()))
(input-scmc "paravec.scmc")
(input-scmc "general_macros.scmc")
(input-scmc "load_gapsio.scmc")
(include- "genrand.h")
(eval-scmc-global (begin (load "checkpoint_data_needed.scmc") '()))
(input-all-pscmc-struct)
(input-all-kernel-and-rt)
(include- "space_filling_curve.h")
(include- "mpifields.h")
(include- "dmshell.h")
(include- "hydroAshell.h")
(include- "init_field3d_mpi.h")
(include< "cgapsio.h")
(include- "mpi_fieldio.h")
(include- "call_curl_kernel.h")
(include- "init_particle.h")
(include- "run_particle.h")
(include- "run_particle_call_fun.h")
(include- "pass_xyzzyx.h")
(include- "sort_particle.h")
(include- "seqfields.h")
(include- "init_adjoint_relation.h")
(include- "init_implicit_particle.h")
(include- "split_shell.h")
(include- "blas_shell.h")
(include- "nonlinear_jfnk.h")
(include- "cfgcst.h")
(typedef Field3D_MPI Field3D_MPI_ALL)
(include- "checkpoint.h")
(define-scmc-global add_the_prefix (lambda (name)
(concat 'c_ name))
)
(defmacro sync_ovlp_with-boundary-core (field bound)
`(begin
(sync_ovlp_mpi_field ,field)
(blas_axpy_full_block_Field3D_MPI ,field ,field 1 ,bound)
)
)
(define-scmc-global boundary-map (fast-make-single-env-from-var-and-val '((prho_s_vx1 . pboundary_rho_s_vx) (prho_s_vx0 . pboundary_rho_s_vx) (pvA1 . pboundary_vA) (pvA0 . pboundary_vA) (pvA2 . pboundary_vA) (palpha_beta1 . pboundary_alpha_beta1) (palpha_beta0 . pboundary_alpha_beta1))))
(defmacro sync_ovlp_with-boundary (field)
(define fdvar (fast-find-var-in-single-env field boundary-map))
(if (eq? fdvar 'VAR-NOT-BOUND)
(begin
(write-string (multi-concat "Error: field " field " is unbounded\n"))
(car 0)
)
`(sync_ovlp_with-boundary-core ,field ,fdvar)
)
)
(defmacro macro-add-the-prefix (name)
(add_the_prefix name)
)
(defmacro gen_cst_specs cstlst
(begin-map
(lambda (cst)
(multi-define name type initfun cst)
`(begin
(declare (,type *) (,name (malloc (* (sizeof ,type ) NUM_SPEC)) ))
(for-from-to i 0 NUM_SPEC
(vector-set! ,name i (,initfun i))
)
)
)
cstlst
)
)
(include< "sys/time.h")
(defun print_max int ((Field3D_MPI* in))
(define-double tmp0 (blas_sum_Field3D_MPI in in))
(LOG_RECORD_INFO "ext max=%e\n" tmp0)
(return 0)
)
(defmacro dump_field_txt (field name)
`(block
(define-FILE* fp (fopen ,name "w"))
(dump_field ,field fp)
(fclose fp)
)
)
(defmacro dump_field_m filename-field-pairs
(append
(begin-map
(lambda (x)
(define filename (car x))
(define fds (cdr x))
(append
`(block
(decl-var-and-pvar Gaps_IO_DataFile gid)
(init_parallel_file_for_mpi_fields ,(car fds) pgid ,filename -1 G_GAPSIO_VERSION G_GAPSIO_NUM_REDUCEWRITE)
)
(let loop ((n 0) (fds fds))
(cond
((null? fds) '())
(else
(cons
`(mpi_field_write_to_file ,(car fds) pgid ,n)
(loop (+ n 1) (cdr fds)))
)
)
)
)
)
filename-field-pairs
)
`(
(PS_MPI_Barrier PS_MPI_COMM_WORLD)
(PS_MPI_Finalize)
(return 0)
)
)
)
(defmacro gen_ips_info ()
`(if (and (== rank 0) (eq? M_DISABLE_TS_LOG 0))
(block
(define tnow (wclk_now))
(define tused (- tnow tend))
(set! tend tnow)
(LOG_RECORD_INFO "step=%d time used=%fs, ips=%f, allips=%f\n" t tused (/ 1 tused) (/ (+ t 1) (- tend tbeg)))
))
)
(defun wclk_now double ()
(declare (struct timeval) tv1)
(declare (struct timezone) tz1)
(gettimeofday ("&" tv1) ("&" tz1))
(define-double time_start1 (+ (type-convert double tv1.tv_sec) (* 1e-6 (type-convert double tv1.tv_usec))))
(return time_start1)
)
(defun gen_sts_dt double ((int j) (int nt) (double nv))
(return (runc "1/((-1+nv)*cos((2*j-1.0)/nt*M_PI/2)+1+nv)"))
)
(eval-scmc-global
`(begin
,(begin-map
(lambda (x)
(gen_loadgapsio x 'double '((long cursp) (double z) (double y) (double x) (long l))))
'(TEMPERATURE_DIST)
)
,(begin-map
(lambda (x)
(gen_loadgapsio x 'double '((long cursp) (double z) (double y) (double x))))
'(DENSITY_DIST V0_x V0_y V0_z)
)
))
(input-scmc "dm_fv.scmc")
(defun hydro_bicg_fun int ((Field3D_MPI* out) (Field3D_MPI* in) (hydro_fv* fv))
(sync_ovlp_mpi_field in)
(MPI_hydro_push_jac_alpha_beta out in fv->palpha_beta1 fv->prho_s_vx fv->pvA1 fv->pvA1 fv->dt fv->dx fv->dy fv->dz fv->u0 fv->qm0)
(if 0
(block
(class-header-Field3D_Seq out->data)
(for-from-zero-to i 8
;(fprintf stderr "r0%d=%e\n" i (GET_FIELD3D_SEQ r0h->data 0 i 0 0 0))
;(fprintf stderr "r1%d=%e\n" i (GET_FIELD3D_SEQ r0h->data 0 i 0 0 1))
(fprintf stderr "out%d=%e loc=0x%lx\n" i (GET_FIELD3D_SEQ out->data 0 i 0 0 0) ("&" (GET_FIELD3D_SEQ out->data 0 i 0 0 0)))
(fprintf stderr "out%d=%e loc=0x%lx\n" i (GET_FIELD3D_SEQ out->data 0 i 0 0 1) ("&" (GET_FIELD3D_SEQ out->data 0 i 0 0 1)))
)
))
(return 0)
)
(defun dm_bicg_fun int ((Field3D_MPI* out) (Field3D_MPI* in) (dm_fv* fv))
(sync_ovlp_mpi_field in)
(MPI_dm_1st_eqn_core out in fv->pF0 fv->pA0 fv->pA1 fv->pA2 fv->DM_A fv->Q fv->M fv->DT)
(return 0)
)
(define-int global_use_dm_core_type 0)
(defmacro xyzmax_ifn1x2 (x)
`(if (== ,x 1) ,x (* ,x 2))
)
(defun cayley_dm_new_fun_all int ((Field3D_MPI* out) (Field3D_MPI* in) (dm_fv* fv) (double lftrht))
;from \dot{y}=f to x1-dt f(x1/2) = x0 + dt f(x0/2)
;(LOG_RECORD_INFO "newfun called, lftrht=%e \n" lftrht)
;(LOG_RECORD_INFO "all:")
;(print_max in)
(sync_ovlp_mpi_field in)
(if (eq? global_use_dm_core_type 0)
(MPI_dm_cayley_eqn_core out in (structp-ref fv pA0) (structp-ref fv pA1) (structp-ref fv DT) (structp-ref fv DZ) (structp-ref fv DY) (structp-ref fv DX) (structp-ref fv DM_A) (structp-ref fv Q) (structp-ref fv M))
(MPI_dm_8x8_eqn_psi out in (structp-ref fv pA0) (structp-ref fv pA1) (structp-ref fv DT) (structp-ref fv DZ) (structp-ref fv DY) (structp-ref fv DX) (structp-ref fv DM_A) (structp-ref fv Q) (structp-ref fv M)))
;(LOG_RECORD_INFO "Run core:")
;(print_max in)
;(print_max out)
(blas_axpby_Field3D_MPI out out 1 in (* lftrht fv->DT))
;(LOG_RECORD_INFO "added out:")
;(print_max out)
(return 0)
)
(defun cayley_dm_new_fun int ((Field3D_MPI* out) (Field3D_MPI* in) (dm_fv* fv))
(return (cayley_dm_new_fun_all out in fv -0.5))
)
(defun cayley_dm_new_fun_right int ((Field3D_MPI* out) (Field3D_MPI* in) (dm_fv* fv))
(cayley_dm_new_fun_all out in fv 0.5)
;(print_max out)
(return 0)
)
(defun high_order_split_pic void ((void* ppis) (double dt) (int l))
(cond
((< l 0) (FDTD_2_2th_ALL_passes ppis dt))
((== l 0) (FDTD_2_4th_ALL_passes ppis dt))
(else
(define-double al (runc "1.0/(2-pow(2,l/3.))"))
(define-double bl (runc "1-2*al"))
(define-double adt (* al dt))
(define-double bdt (* bl dt))
(high_order_split_pic ppis adt (- l 1))
(high_order_split_pic ppis bdt (- l 1))
(high_order_split_pic ppis adt (- l 1))
)
)
)
(define-long srand_seed 0)
(defun main int ((int argc) (char** argv))
(main_proc argc argv)
(get_constants)
(PS_MPI_Init ("&" argc) ("&" argv))
(eval-scmc-global (init-global-gapsio-fun-vars))
(define-int n NUM_PROCESS)
(if (eq? NUM_PROCESS 0)
(begin
(PS_MPI_Comm_size PS_MPI_COMM_WORLD ("&" n))
(set! NUM_PROCESS n)
)
)
(define-long num_runtime NUM_RUNTIME)
(define-long n_hilbert NUM_N_HILBERT)
(define len_hilbert (shift-l 1 n_hilbert))
(define numt 1)
(for-from-to g 0 NUM_N_HILBERT_DIMENSION
(set! numt (* numt len_hilbert))
)
(define-int rank)
(PS_MPI_Comm_rank PS_MPI_COMM_WORLD ("&" rank))
(assert (< rank n))
(gen-const-vars M_ (USE_TIME_AS_RANDOM_SEED RAND_SEED DELTA_X DELTA_Y DELTA_Z USE_VLO DISABLE_TS_LOG USE_NO_CURRENT USE_REDUCE_DIM USE_NOT_REDUCE_DIM_PARTICLE REDUCE_DIM_X_RAT REDUCE_DIM_Y_RAT REDUCE_DIM_Z_RAT REDUCE_DIM_RANDOM_RATE USE_SAME_RANDOM_SEED USE_HYDRO_DEBUG USE_REL_NCR USE_REL_2ND_SUBSTEP))
(gen-const-vars G_ (USE_ABC_DIR USE_PEC_DIR USE_DAMP_DIR ))
(define-int use_rel_ncr M_USE_REL_NCR)
(dec-array double dims_rat_xyz 6)
(set! (vrf dims_rat_xyz 0) M_REDUCE_DIM_X_RAT)
(set! (vrf dims_rat_xyz 1) M_REDUCE_DIM_Y_RAT)
(set! (vrf dims_rat_xyz 2) M_REDUCE_DIM_Z_RAT)
(set! (vrf dims_rat_xyz 3) M_REDUCE_DIM_X_RAT)
(set! (vrf dims_rat_xyz 4) M_REDUCE_DIM_Y_RAT)
(set! (vrf dims_rat_xyz 5) M_REDUCE_DIM_Z_RAT)
(define-int reduce_dim M_USE_REDUCE_DIM)
(define-double ONE_FORM_REDUCE_DIM_X_RAT M_REDUCE_DIM_X_RAT)
(define-double ONE_FORM_REDUCE_DIM_Y_RAT M_REDUCE_DIM_Y_RAT)
(define-double ONE_FORM_REDUCE_DIM_Z_RAT M_REDUCE_DIM_Z_RAT)
(define-double TWO_FORM_REDUCE_DIM_X_RAT (* M_REDUCE_DIM_Y_RAT M_REDUCE_DIM_Z_RAT))
(define-double TWO_FORM_REDUCE_DIM_Y_RAT (* M_REDUCE_DIM_X_RAT M_REDUCE_DIM_Z_RAT))
(define-double TWO_FORM_REDUCE_DIM_Z_RAT (* M_REDUCE_DIM_X_RAT M_REDUCE_DIM_Y_RAT))
(if (eq? M_DELTA_X 0) (set! M_DELTA_X 1))
(if (eq? M_DELTA_Y 0) (set! M_DELTA_Y 1))
(if (eq? M_DELTA_Z 0) (set! M_DELTA_Z 1))
;(srand (+ rank 1 (if M_USE_TIME_AS_RANDOM_SEED (time NULL) M_RAND_SEED)))
(set! srand_seed (+ rank 1))
(define-long local_seed (+ rank 1 (if M_USE_TIME_AS_RANDOM_SEED (time NULL) M_RAND_SEED)))
;(LOG_RECORD_INFO "musrs=%e\n" M_USE_SAME_RANDOM_SEED)
(if (not M_USE_SAME_RANDOM_SEED) (srand srand_seed) (set! srand_seed local_seed))
(dec-array long tids (* num_runtime n))
(define-int64_t* local_tid_array (malloc (* (sizeof int64_t ) numt)))
(decl-var-and-pvar Field3D_MPI testfield)
(decl-var-and-pvar Field3D_MPI testfield_2x)
;(decl-var-and-pvar Field3D_MPI testfieldB)
(decl-var-and-pvar Field3D_MPI testfieldSPEC)
(define-Field3D_Seq fstest)
(decl-var-and-pvar Field3D_Seq fstest_2x)
(decl-var-and-pvar Field3D_Seq fstestSPEC)
;(decl-var-and-pvar Field3D_Seq fstestB)
(define-Field3D_Seq* pfstest ("&" fstest))
;(init_Field3D_Seq pfstest ppe 4 3 1 cur_tid 2 3 0 len_hilbert len_hilbert 1 rank)
(dec-array int cd_types NUM_MAX_RUNTIME)
(dec-array int dev_ids NUM_MAX_RUNTIME)
(dec-array int cd_performances NUM_MAX_RUNTIME)
(gen-const-vars G_ (GAPSIO_VERSION GAPSIO_NUM_REDUCEWRITE OVERLAP_LEN USE_G_E USE_PML_ABC_DIR PML_LEVEL PML_SIGMA_MAX USE_DIFFERENT_DEV_PERFORMANCE))
(if (< G_GAPSIO_VERSION 2) (set! G_GAPSIO_NUM_REDUCEWRITE 0))
(block
(define i 0)
(for i=0 i<NUM_RUNTIME i++
(vector-set! cd_types i (call_GET_DEV_TYPE i rank))
(vector-set! dev_ids i (call_GET_DEV_ID i rank))
(vector-set! cd_performances i (if G_USE_DIFFERENT_DEV_PERFORMANCE (call_CAL_FUN_ONE_PARA "GET_DEV_PERFORMANCE" i) 1))
)
)
(LOG_RECORD_INFO "rank %d init, pid=%d\n" rank (getpid))
;(define-long cur_tid (get_cur_num_tid rank numt n tids))
(memset pfstest 0 (sizeof Field3D_Seq))
(memset pfstest_2x 0 (sizeof Field3D_Seq))
(define fieldlen 3)
(define-int overlap_len 2)
(if USE_KGM
(begin
(set! fieldlen 10)
(set! overlap_len 1)
)
)
(if (neq? G_OVERLAP_LEN 0)
(set! overlap_len G_OVERLAP_LEN)
)
(if (eq? rank 0)
(LOG_RECORD_INFO "overlap=%d\n" overlap_len))
(dec-array long allxyzmax 3)
(cond
((== NUM_N_HILBERT_DIMENSION 1)
(dec-array long lengs 3)
(for-from-to i 0 3
(vector-set! lengs i (if (== i HILBERT_DIR) len_hilbert 1))
)
(set! (vector-ref allxyzmax 0) (* (vector-ref lengs 0) XMAX))
(set! (vector-ref allxyzmax 1) (* (vector-ref lengs 1) YMAX))
(set! (vector-ref allxyzmax 2) (* (vector-ref lengs 2) ZMAX))
(set_Field3D_Seq pfstest NULL M_DELTA_X M_DELTA_Y M_DELTA_Z XMAX YMAX ZMAX 2 overlap_len fieldlen 0 (vector-ref lengs 0) (vector-ref lengs 1) (vector-ref lengs 2) rank)
(if_rel_ncr
(set_Field3D_Seq pfstest_2x NULL M_DELTA_X M_DELTA_Y M_DELTA_Z (xyzmax_ifn1x2 XMAX) (xyzmax_ifn1x2 YMAX) (xyzmax_ifn1x2 ZMAX) 2 overlap_len fieldlen 0 (vector-ref lengs 0) (vector-ref lengs 1) (vector-ref lengs 2) rank)
)
;(set_Field3D_Seq pfstestB NULL M_DELTA_X M_DELTA_Y M_DELTA_Z XMAX YMAX ZMAX 2 overlap_len 3 0 (vector-ref lengs 0) (vector-ref lengs 1) (vector-ref lengs 2) rank)
)
((== NUM_N_HILBERT_DIMENSION 2)
(dec-array long lengs 3)
(for-from-to i 0 3
(vector-set! lengs i (if (== i HILBERT_DIR) 1 len_hilbert))
)
(set! (vector-ref allxyzmax 0) (* (vector-ref lengs 0) XMAX))
(set! (vector-ref allxyzmax 1) (* (vector-ref lengs 1) YMAX))
(set! (vector-ref allxyzmax 2) (* (vector-ref lengs 2) ZMAX))
(set_Field3D_Seq pfstest NULL M_DELTA_X M_DELTA_Y M_DELTA_Z XMAX YMAX ZMAX 2 overlap_len fieldlen 0 (vector-ref lengs 0) (vector-ref lengs 1) (vector-ref lengs 2) rank)
(if_rel_ncr
(set_Field3D_Seq pfstest_2x NULL M_DELTA_X M_DELTA_Y M_DELTA_Z (xyzmax_ifn1x2 XMAX) (xyzmax_ifn1x2 YMAX) (xyzmax_ifn1x2 ZMAX) 2 overlap_len fieldlen 0 (vector-ref lengs 0) (vector-ref lengs 1) (vector-ref lengs 2) rank)
)
;(set_Field3D_Seq pfstestB NULL M_DELTA_X M_DELTA_Y M_DELTA_Z XMAX YMAX ZMAX 2 overlap_len 3 0 (vector-ref lengs 0) (vector-ref lengs 1) (vector-ref lengs 2) rank)
)
((== NUM_N_HILBERT_DIMENSION 3)
(set_Field3D_Seq pfstest NULL M_DELTA_X M_DELTA_Y M_DELTA_Z XMAX YMAX ZMAX 2 overlap_len fieldlen 0 len_hilbert len_hilbert len_hilbert rank)
(if_rel_ncr
(set_Field3D_Seq pfstest_2x NULL M_DELTA_X M_DELTA_Y M_DELTA_Z (xyzmax_ifn1x2 XMAX) (xyzmax_ifn1x2 YMAX) (xyzmax_ifn1x2 ZMAX) 2 overlap_len fieldlen 0 len_hilbert len_hilbert len_hilbert rank)
)
;(set_Field3D_Seq pfstestB NULL M_DELTA_X M_DELTA_Y M_DELTA_Z XMAX YMAX ZMAX 2 overlap_len 3 0 len_hilbert len_hilbert len_hilbert rank)
(set! (vector-ref allxyzmax 0) (* len_hilbert XMAX))
(set! (vector-ref allxyzmax 1) (* len_hilbert YMAX))
(set! (vector-ref allxyzmax 2) (* len_hilbert ZMAX))
)
)
(set! fstestSPEC fstest)
(set! (structp-ref pfstestSPEC num_ele) (* 7 NUM_SPEC))
(init_Field3D_MPI_ALL ptestfield pfstest n_hilbert NUM_N_HILBERT_DIMENSION 0 tids local_tid_array cd_types dev_ids cd_performances num_runtime PS_MPI_COMM_WORLD rank n)
(if_rel_ncr
(init_Field3D_MPI_ALL ptestfield_2x pfstest_2x n_hilbert NUM_N_HILBERT_DIMENSION 0 tids local_tid_array cd_types dev_ids cd_performances num_runtime PS_MPI_COMM_WORLD rank n))
;(init_Field3D_MPI_ALL ptestfieldB pfstestB n_hilbert NUM_N_HILBERT_DIMENSION 0 tids local_tid_array cd_types dev_ids num_runtime PS_MPI_COMM_WORLD rank n)
(init_Field3D_MPI_from_new_num_ele ptestfieldSPEC ptestfield (* 7 NUM_SPEC))
;(init_Field3D_MPI_ALL ptestfieldSPEC pfstestSPEC n_hilbert NUM_N_HILBERT_DIMENSION 0 tids local_tid_array cd_types dev_ids num_runtime PS_MPI_COMM_WORLD rank n)
(define tbeg (wclk_now))
(define tend tbeg)
(cond
((eq? USE_KGM 1)
;(define KGM_M0 (call_GET_VAR "KGM_M0"))
(gen-const-vars M_ (KGM_M0 KGM_Q0 KGM_DT KGM_PHI0 KGM_AMPX KGM_SGM KGM_EY KGM_FRQ KGM_ASSEMBLE KGM_ASSEMBLE_TIME KGM_MID_LOC KGM_LEN_A0 KGM_SGM_DENS KGM_ASS_E_LOC0 KGM_G_BEG KGM_DX KGM_REFZ0 KGM_EXTG KGM_INIT_SPER KGM_XMID KGM_YMID KGM_ZMID KGM_AVRHO_DUMP_TIMESTEP))
(decl-var-and-pvar Field3D_MPI F0)
(decl-var-and-pvar Field3D_MPI F1)
(decl-var-and-pvar Field3D_MPI F2)
(decl-var-and-pvar Field3D_MPI extA0)
(decl-var-and-pvar Field3D_MPI extA1)
(decl-var-and-pvar Field3D_MPI extAtmp)
(decl-var-and-pvar Field3D_MPI filter_A)
;(decl-var-and-pvar Field3D_MPI exte)
;(decl-var-and-pvar Field3D_MPI extb)
(init_Field3D_MPI_from pF0 ptestfield)
(init_Field3D_MPI_from pF1 ptestfield)
;(init_Field3D_MPI_from pextA0 ptestfieldB)
;(init_Field3D_MPI_from pextA1 ptestfieldB)
(init_Field3D_MPI_from_new_num_ele pextA0 ptestfield 3)
(init_Field3D_MPI_from_new_num_ele pextA1 ptestfield 3)
(init_Field3D_MPI_from_new_num_ele pextAtmp ptestfield 3)
(init_Field3D_MPI_from_new_num_ele pF2 pF0 1)
(blas_yiszero_Field3D_MPI pF0 pF0)
(sync_ovlp_mpi_field pF0)
(blas_yiszero_Field3D_MPI pF1 pF1)
(sync_ovlp_mpi_field pF1)
(if M_KGM_ASSEMBLE
(begin
(decl-var-and-pvar Gaps_IO_DataFile ipigs)
(GAPS_IO_InitIFile pipigs "tmpKGM_ASSEMBLE")
(define-long tread M_KGM_ASSEMBLE_TIME)
(read_parallel_file_for_mpi_fields pF0 pipigs tread)
(init_kgm_assemble pF0 M_KGM_AMPX (* M_KGM_EY M_KGM_DX) (/ M_KGM_DT M_KGM_DX) M_KGM_SGM M_KGM_FRQ M_KGM_ASS_E_LOC0)
)
(begin
(init_kgm_global pF0 M_KGM_PHI0 M_KGM_M0 M_KGM_Q0 M_KGM_AMPX M_KGM_EY M_KGM_DT M_KGM_SGM M_KGM_FRQ M_KGM_MID_LOC M_KGM_LEN_A0 M_KGM_SGM_DENS M_KGM_INIT_SPER M_KGM_XMID M_KGM_YMID M_KGM_ZMID)
(init_external_field3d_without_ss_KGM pF0)
)
)
(decl-var-and-pvar Gaps_IO_DataFile gid)
(decl-var-and-pvar Gaps_IO_DataFile agid)
(define-long tsave 0)
(define-long tsave_rho 0)
(init_parallel_file_for_mpi_fields ptestfield pgid "tmpKGM" (if tsave tsave -1) G_GAPSIO_VERSION G_GAPSIO_NUM_REDUCEWRITE)
(if USE_INIT_EXT_EB
(begin
;(blas_yiszero_synced_Field3D_MPI pextA0 pextA0)
;(blas_yiszero_synced_Field3D_MPI pextA1 pextA1)
(init_external_field3d_E_2d_extend pextA0 M_USE_REDUCE_DIM ONE_FORM_REDUCE_DIM_X_RAT ONE_FORM_REDUCE_DIM_Y_RAT ONE_FORM_REDUCE_DIM_Z_RAT)
(init_external_field3d_B_2d_extend pextA1 M_USE_REDUCE_DIM TWO_FORM_REDUCE_DIM_X_RAT TWO_FORM_REDUCE_DIM_Y_RAT TWO_FORM_REDUCE_DIM_Z_RAT)
(sync_ovlp_mpi_field pextA0)
(sync_ovlp_mpi_field pextA1)
)
(begin
(blas_yiszero_synced_Field3D_MPI pextA0 pextA0)
(blas_yiszero_synced_Field3D_MPI pextA1 pextA1)
)
)
(if USE_FILTER
(begin
(init_Field3D_MPI_from_new_num_ele pfilter_A pF0 3)
(init_external_field3d_FILTER_B pfilter_A)
)
)
(if M_KGM_AVRHO_DUMP_TIMESTEP
(init_parallel_file_for_mpi_fields pF2 pagid "tmpRHO" (if tsave tsave -1) G_GAPSIO_VERSION G_GAPSIO_NUM_REDUCEWRITE))
(for-from-to t 0 NUM_TIMESTEP
(MPI_kgm_eqn_core pF1 pF0 pextA0 pextA1 M_KGM_DT M_KGM_M0 M_KGM_Q0 M_KGM_DX M_KGM_EXTG M_KGM_REFZ0 M_KGM_G_BEG (and t 1))
;(blas_yisax_Field3D_MPI pextAtmp pextAtmp 1 pextA1)
;(blas_yisax_Field3D_MPI pextA1 pextA1 2 pextA1)
;(blas_axpy_Field3D_MPI pextA1 pextA1 -1 pextA0)
;(blas_yisax_Field3D_MPI pextA0 pextA0 1 pextAtmp)
(if USE_FILTER
(blas_mulxy_numele3_Field3D_MPI pF1 pF1 pfilter_A)
)
(if (== rank 0) (LOG_RECORD_OUT "%d\n" t))
(if (and 0 (== rank 0)) (begin (sync_main_data_d2h pF1) (incf! (GET_FIELD3D_SEQ pF1->data 0 4 0 0 0) (* M_KGM_AMPX (sin (* t DELTAT)))) (sync_main_data_h2d pF1)))
(if USE_NP_BOUNDARY
(begin
;(gen-const-vars G_ (USE_ABC_DIR USE_PEC_DIR USE_DAMP_DIR))
(MPI_Yee_FDTD_MUR_ABC pF1 pF0 M_KGM_DT G_USE_ABC_DIR G_USE_PEC_DIR G_USE_DAMP_DIR 0)
)
)
(define-long rdmd (* (eq? M_KGM_ASSEMBLE 1) (type-convert long (* NUM_DUMP_TIMESTEP (/ (* (rand) 1.0) RAND_MAX)))))
(if (and (type-convert int M_KGM_AVRHO_DUMP_TIMESTEP) (eq? 0 (remainder t (type-convert int M_KGM_AVRHO_DUMP_TIMESTEP))))
(begin
(MPI_kgm_calc_rho pF2 pF1 M_KGM_DT M_KGM_M0 M_KGM_Q0 M_KGM_DX M_KGM_REFZ0 0.1 0.3 0 0)
(mpi_field_write_to_file pF2 pagid tsave_rho)
(incf! tsave_rho)
(if (== rank 0)
(LOG_RECORD_INFO "%d rho done\n" tsave_rho)
)
)
)
(if (eq? 0 (remainder (+ t rdmd) NUM_DUMP_TIMESTEP))
(begin
(mpi_field_write_to_file pF1 pgid tsave)
(incf! tsave)
(if (== rank 0)
(LOG_RECORD_INFO "%d done\n" t))
)
)
(define-void* tmp pF0)
(set! pF0 pF1)
(set! pF1 tmp)
)
)
((eq? M_USE_HYDRO_DEBUG 1)
(gen-const-vars M_ (HYDRO_QM0 HYDRO_U0 HYDRO_RHO0 HYDRO_DRHO0 HYDRO_B0 HYDRO_S0 HYDRO_BICGSTAB_ERR HYDRO_SOLVE_ERR))
(decl-var-and-pvar Field3D_MPI rho_s_vx0)
(decl-var-and-pvar Field3D_MPI boundary_rho_s_vx)
(decl-var-and-pvar Field3D_MPI rho_s_vx1)
(decl-var-and-pvar Field3D_MPI alpha_beta0)
(decl-var-and-pvar Field3D_MPI alpha_beta1)
(decl-var-and-pvar Field3D_MPI boundary_alpha_beta1)
(decl-var-and-pvar Field3D_MPI rest_alpha_beta)
(decl-var-and-pvar Field3D_MPI v_alpha_beta)
(decl-var-and-pvar Field3D_MPI vA0)
(decl-var-and-pvar Field3D_MPI vA1)
(decl-var-and-pvar Field3D_MPI vA2)
(decl-var-and-pvar Field3D_MPI boundary_vA)
(set! (structp-ref pfstest num_ele) 5)
(init_Field3D_MPI_ALL prho_s_vx0 pfstest n_hilbert NUM_N_HILBERT_DIMENSION 0 tids local_tid_array cd_types dev_ids cd_performances num_runtime PS_MPI_COMM_WORLD rank n)
(init_Field3D_MPI_from prho_s_vx1 prho_s_vx0)
(init_Field3D_MPI_from pboundary_rho_s_vx prho_s_vx0)
(init_Field3D_MPI_from_new_num_ele palpha_beta0 prho_s_vx0 2)
(init_Field3D_MPI_from palpha_beta1 palpha_beta0)
(init_Field3D_MPI_from pboundary_alpha_beta1 palpha_beta0)
(init_Field3D_MPI_from prest_alpha_beta palpha_beta0)
(init_Field3D_MPI_from pv_alpha_beta palpha_beta0)
(init_Field3D_MPI_from_new_num_ele pvA0 prho_s_vx0 3)
(init_Field3D_MPI_from pvA1 pvA0)
(init_Field3D_MPI_from pvA2 pvA0)
(init_Field3D_MPI_from pboundary_vA pvA0)
;init alpha beta
;(init_hydro_alpha_beta palpha_beta0 1e-2 1e-2)
(init_hydro_alpha_beta palpha_beta0 0 0)
(init_hydro_init_alpha_beta pboundary_alpha_beta1 (- M_HYDRO_B0) (* M_HYDRO_RHO0 M_HYDRO_QM0))
(blas_axpy_Field3D_MPI palpha_beta0 palpha_beta0 1 pboundary_alpha_beta1)
(blas_yisax_Field3D_MPI palpha_beta1 palpha_beta1 1 palpha_beta0)
(init_hydro_boundary_alpha_beta pboundary_alpha_beta1 (- M_HYDRO_B0) (* M_HYDRO_RHO0 M_HYDRO_QM0))
;init s0
(init_hydro_init_s0 pboundary_rho_s_vx 1 1)
(init_hydro_rho_s_vx prho_s_vx0 M_HYDRO_RHO0 M_HYDRO_DRHO0 M_HYDRO_S0 0 0 0)
(blas_axpy_full_block_Field3D_MPI prho_s_vx0 prho_s_vx0 1 pboundary_rho_s_vx)
(init_hydro_boundary_s0 pboundary_rho_s_vx 1 1)
;init vA
(init_hydro_init_A0y pvA0 M_HYDRO_B0)
(init_hydro_init_A0y pvA1 M_HYDRO_B0)
(init_hydro_init_A0y pvA2 M_HYDRO_B0)
(init_hydro_boundary_A0y pboundary_vA M_HYDRO_B0)
(sync_ovlp_mpi_field pvA0)
(sync_ovlp_mpi_field pvA1)
(sync_ovlp_mpi_field pvA2)
(blas_axpy_full_block_Field3D_MPI pvA0 pvA0 1 pboundary_vA)
(blas_axpy_full_block_Field3D_MPI pvA1 pvA1 1 pboundary_vA)
(blas_axpy_full_block_Field3D_MPI pvA2 pvA2 1 pboundary_vA)
;(blas_yiszero_synced_Field3D_MPI pvA0 pvA0)
;(blas_yiszero_synced_Field3D_MPI pvA1 pvA1)
;(blas_yiszero_synced_Field3D_MPI pvA2 pvA2)
(decl-var-and-pvar Gaps_IO_DataFile gid)
(decl-var-and-pvar Gaps_IO_DataFile gaid)
(decl-var-and-pvar Gaps_IO_DataFile grid)
(init_parallel_file_for_mpi_fields prho_s_vx1 pgrid "tmpRHOSV" -1 G_GAPSIO_VERSION G_GAPSIO_NUM_REDUCEWRITE)
(init_parallel_file_for_mpi_fields pvA0 pgaid "tmpA" -1 G_GAPSIO_VERSION G_GAPSIO_NUM_REDUCEWRITE)
(init_parallel_file_for_mpi_fields palpha_beta0 pgid "tmpALPHABETA" -1 G_GAPSIO_VERSION G_GAPSIO_NUM_REDUCEWRITE)
;calculate v0
(block
(blas_yisax_Field3D_MPI prho_s_vx1 prho_s_vx1 1 prho_s_vx0)
(sync_ovlp_with-boundary prho_s_vx0)
(sync_ovlp_with-boundary prho_s_vx1)
(sync_ovlp_with-boundary palpha_beta1)
(if 0
(begin
(dump_field_txt pvA1 "Aall_txt")
(dump_field_txt prho_s_vx1 "rhoall_bef_txt")
;(blas_yiszero_synced_Field3D_MPI pvA1 pvA1)
(MPI_hydro_push_vx prho_s_vx0 palpha_beta1 palpha_beta1 prho_s_vx1 pvA1 pvA1 DELTAT M_DELTA_X M_DELTA_Y M_DELTA_Z M_HYDRO_U0 M_HYDRO_QM0)
(dump_field_txt prho_s_vx0 "rhoall_txt")
(dump_field_txt pboundary_rho_s_vx "rhobound_txt")
(dump_field_m ("tmpRSV_dbg" prho_s_vx0 prho_s_vx1) ("tmpA_dbg" pvA1) ("tmpAB_dbg" palpha_beta1))
)
(MPI_hydro_push_vx prho_s_vx0 palpha_beta1 palpha_beta1 prho_s_vx1 pvA1 pvA1 DELTAT M_DELTA_X M_DELTA_Y M_DELTA_Z M_HYDRO_U0 M_HYDRO_QM0)
)
)
;newton_method
(block
(decl-var-and-pvar bicg_space bs)
(decl-var-and-pvar hydro_fv fv) ;hydro_fv is defined in dm_fv.scmc
(eval-scmc-global
(begin-map
(lambda (xy)
(multi-define x y xy)
`(set! (structp-ref pfv ,x) ,y)
)
`((palpha_beta1 palpha_beta1)
(prho_s_vx prho_s_vx1)
(pvA1 pvA1)
(dt DELTAT)
(dx M_DELTA_X)
(dy M_DELTA_Y)
(dz M_DELTA_Z)
(u0 M_HYDRO_U0)
(qm0 M_HYDRO_QM0)
)
))
(mpi_init_bicg pbs hydro_bicg_fun palpha_beta1 1000 M_HYDRO_BICGSTAB_ERR pfv)
;(init_hydro_ext_s0 pext_rho_s_vx 1 1)
;(init_hydro_ext_A0y pvAext M_HYDRO_B0)
;(init_external_field3d_without_ss_EXT_FLUID_RHO_S_VX0 prho_s_vx0)
(for-from-zero-to t NUM_TIMESTEP
(if (eq? 0 (remainder t NUM_DUMP_TIMESTEP))
(begin
(define-long ts (/ t NUM_DUMP_TIMESTEP))
(mpi_field_write_to_file prho_s_vx1 pgrid ts)
(mpi_field_write_to_file palpha_beta1 pgid ts)
(mpi_field_write_to_file pvA1 pgaid (* ts 2))
(mpi_field_write_to_file pvA2 pgaid (+ (* ts 2) 1))
(if (== rank 0) (LOG_RECORD_INFO "output fields done\n"))
)
)
(block
(define-double rem_beta)
(if (eq? rank 0)
(begin
(sync_field_d2h palpha_beta0)
(set! rem_beta (GET_FIELD3D_SEQ palpha_beta0->data 0 0 0 0 1))
)
)
(PS_MPI_Bcast ("&" rem_beta) 1 PS_MPI_DOUBLE 0 PS_MPI_COMM_WORLD)
(LOG_RECORD_INFO "rem_beta=%e\n" rem_beta)
(init_hydro_alpha_beta palpha_beta1 0 rem_beta)
(blas_axpy_Field3D_MPI palpha_beta0 palpha_beta0 -1 palpha_beta1)
;(blas_yisconst_Field3D_MPI palpha_beta1->data)
(set_hydro_s_0 prho_s_vx0)
(set_hydro_s_0 prho_s_vx1)
)
(sync_ovlp_with-boundary prho_s_vx0)
;(dump_field_txt pboundary_rho_s_vx "rhoall_bef_txt")
(sync_ovlp_with-boundary pvA1)
;(dump_field_txt pvA1 "Aall_txt")
(sync_ovlp_with-boundary palpha_beta0)
;Doc: Eulerian symplectic
;push rho and s
;(dump_field_txt prho_s_vx0 "rhoall_bef_txt")
(MPI_hydro_push_rho_s prho_s_vx1 palpha_beta0 palpha_beta0 prho_s_vx0 pvA1 pvA1 DELTAT M_DELTA_X M_DELTA_Y M_DELTA_Z M_HYDRO_U0 M_HYDRO_QM0)
;(dump_field_txt prho_s_vx1 "rhoall_txt")
(blas_yisax_Field3D_MPI palpha_beta1 palpha_beta1 1 palpha_beta0)
(sync_ovlp_with-boundary palpha_beta1)
;(sync_ovlp_with-boundary palpha_beta0)
;(sync_ovlp_mpi_field palpha_beta1)
;(blas_axpby_Field3D_MPI palpha_beta1 palpha_beta1 1 pboundary_alpha_beta1)
(sync_ovlp_with-boundary prho_s_vx1)
;(sync_ovlp_mpi_field prho_s_vx1)
;(dump_field_txt prho_s_vx0 "rhoall_bef_txt")
;(blas_axpy_full_block_Field3D_MPI prho_s_vx1 prho_s_vx1 1 pboundary_rho_s_vx)
;push alpha and beta
(for-from-zero-to z 100
(sync_ovlp_with-boundary palpha_beta1)
(MPI_hydro_push_alpha_beta prest_alpha_beta palpha_beta0 palpha_beta1 prho_s_vx1 pvA1 pvA1 DELTAT M_DELTA_X M_DELTA_Y M_DELTA_Z M_HYDRO_U0 M_HYDRO_QM0)
(if 0
(block
(decl-var-and-pvar Gaps_IO_DataFile gid)
(decl-var-and-pvar Gaps_IO_DataFile grid)
;(LOG_RECORD_INFO "OK here\n")
(init_parallel_file_for_mpi_fields prho_s_vx1 pgrid "tmpRHO_dbg" -1 G_GAPSIO_VERSION G_GAPSIO_NUM_REDUCEWRITE)
;(dump_field_txt prho_s_vx1 "rhoall_txt")
;(LOG_RECORD_INFO "OK aft init rho\n")
(init_parallel_file_for_mpi_fields prest_alpha_beta pgid "tmpField_dbg" -1 G_GAPSIO_VERSION G_GAPSIO_NUM_REDUCEWRITE)
(mpi_field_write_to_file prho_s_vx1 pgrid 0)
(mpi_field_write_to_file prho_s_vx0 pgrid 1)
(mpi_field_write_to_file prest_alpha_beta pgid 0)
(mpi_field_write_to_file palpha_beta1 pgid 1)
(mpi_field_write_to_file palpha_beta0 pgid 2)
(mpi_field_write_to_file pboundary_alpha_beta1 pgid 3)
(PS_MPI_Barrier PS_MPI_COMM_WORLD)
(PS_MPI_Finalize)
(return 0)
))
;(LOG_RECORD_INFO "bef findmax\n")
(define-double newton_err (blas_findmax_Field3D_MPI prest_alpha_beta prest_alpha_beta))
(LOG_RECORD_INFO "newton_err z=%d rest_ab=%e\n" z newton_err)
(if (< newton_err M_HYDRO_SOLVE_ERR) break)
(mpi_simple_bicgstab pbs pv_alpha_beta prest_alpha_beta)
(blas_axpy_Field3D_MPI palpha_beta1 palpha_beta1 -1 pv_alpha_beta)
)
(sync_ovlp_with-boundary palpha_beta1)
(sync_ovlp_with-boundary prho_s_vx1)
;push vx
(if 0
(begin
(dump_field_txt prho_s_vx1 "rhoall_txt")
(dump_field_txt palpha_beta1 "alpbeta_txt")
(dump_field_txt pvA1 "Aall_txt")
(MPI_Abort MPI_COMM_WORLD 0)
))
(MPI_hydro_push_vx prho_s_vx1 palpha_beta1 palpha_beta1 prho_s_vx1 pvA1 pvA1 DELTAT M_DELTA_X M_DELTA_Y M_DELTA_Z M_HYDRO_U0 M_HYDRO_QM0)
;push vA
(sync_ovlp_with-boundary prho_s_vx1)
(MPI_hydro_push_vA pvA2 palpha_beta1 palpha_beta1 prho_s_vx1 pvA1 pvA0 DELTAT M_DELTA_X M_DELTA_Y M_DELTA_Z M_HYDRO_U0 M_HYDRO_QM0)
;(LOG_RECORD_INFO "t=%d done\n" t)
(gen_ips_info)
(if 0
(block
(decl-var-and-pvar Gaps_IO_DataFile gid)
(decl-var-and-pvar Gaps_IO_DataFile grid)
(LOG_RECORD_INFO "OK here\n")
(init_parallel_file_for_mpi_fields prho_s_vx1 pgrid "tmpRHO_dbg" -1 G_GAPSIO_VERSION G_GAPSIO_NUM_REDUCEWRITE)
(LOG_RECORD_INFO "OK aft init rho\n")
(init_parallel_file_for_mpi_fields prest_alpha_beta pgid "tmpField_dbg" -1 G_GAPSIO_VERSION G_GAPSIO_NUM_REDUCEWRITE)
(mpi_field_write_to_file prho_s_vx1 pgrid 0)
(mpi_field_write_to_file prho_s_vx0 pgrid 1)
(mpi_field_write_to_file prest_alpha_beta pgid 0)
(mpi_field_write_to_file palpha_beta1 pgid 1)
(mpi_field_write_to_file palpha_beta0 pgid 2)
(PS_MPI_Barrier PS_MPI_COMM_WORLD)
(PS_MPI_Finalize)
(return 0)
))
(block
(blas_yisax_Field3D_MPI pvA0 pvA0 1 pvA1)
(sync_ovlp_with-boundary pvA0)
(blas_yisax_Field3D_MPI pvA1 pvA1 1 pvA2)
(sync_ovlp_with-boundary pvA1)
(blas_yisax_Field3D_MPI palpha_beta0 palpha_beta0 1 palpha_beta1)
(sync_ovlp_with-boundary palpha_beta0)
(blas_yisax_Field3D_MPI prho_s_vx0 prho_s_vx0 1 prho_s_vx1)
(sync_ovlp_with-boundary prho_s_vx0)
)
)
)
)
((eq? USE_DM 1)
(gen-const-vars M_ (DM_M0 DM_Q0 DM_LAMBDA DM_DT DM_PHI0 DM_PZ_I DM_PZ_R DM_Z_OFFSET DM_AMPX DM_SGM DM_EY DM_YZ DM_FRQ DM_SOLVE_ERR DM_A DM_PHI34V DM_PZ_R_GAUSS_RAND DM_USE_DISP_INIT_CONDITION DM_DISP_RAND_AMP DM_DUAL_FIELD DM_AMP_PSI DM_NUMP DM_USE_8x8 DM_USE_SINGLE_PSI))
(if (eq? M_DM_LAMBDA 0) (set! M_DM_LAMBDA 1))
(if M_DM_USE_8x8 (set! global_use_dm_core_type 1))
(decl-var-and-pvar Field3D_MPI F0)
(decl-var-and-pvar Field3D_MPI F1)
(decl-var-and-pvar Field3D_MPI Ff0)
(decl-var-and-pvar Field3D_MPI Ff1)
(decl-var-and-pvar Field3D_MPI b_AF0)
(decl-var-and-pvar Field3D_MPI b_AFf0)
(decl-var-and-pvar Field3D_MPI A0)
(decl-var-and-pvar Field3D_MPI A1)
(decl-var-and-pvar Field3D_MPI A2)
;(decl-var-and-pvar Field3D_MPI Atmp)
(set! (structp-ref pfstest num_ele) (if M_DM_USE_8x8 16 8))
(init_Field3D_MPI_ALL pb_AF0 pfstest n_hilbert NUM_N_HILBERT_DIMENSION 0 tids local_tid_array cd_types dev_ids cd_performances num_runtime PS_MPI_COMM_WORLD rank n)
(init_Field3D_MPI_from pF0 pb_AF0)
(init_Field3D_MPI_from pF1 pb_AF0)
(if M_DM_DUAL_FIELD
(begin
(init_Field3D_MPI_from pb_AFf0 pb_AF0)
(init_Field3D_MPI_from pFf0 pb_AF0)
(init_Field3D_MPI_from pFf1 pb_AF0)))
(set! (structp-ref pfstest num_ele) 3)
(init_Field3D_MPI_ALL ptestfield pfstest n_hilbert NUM_N_HILBERT_DIMENSION 0 tids local_tid_array cd_types dev_ids cd_performances num_runtime PS_MPI_COMM_WORLD rank n)
(init_Field3D_MPI_from pA0 ptestfield)
(init_Field3D_MPI_from pA1 ptestfield)
(init_Field3D_MPI_from pA2 ptestfield)
;(init_Field3D_MPI_from pAtmp ptestfield)
(decl-var-and-pvar bicg_space bs)
(decl-var-and-pvar bicg_space bsf)
(decl-var-and-pvar dm_fv fv)
(set! (structp-ref pfv Q) M_DM_Q0)
(set! (structp-ref pfv M) M_DM_M0)
(set! (structp-ref pfv DT) M_DM_DT)
(set! (structp-ref pfv DM_A) M_DM_A)
(set! (structp-ref pfv DX) M_DELTA_X)
(set! (structp-ref pfv DY) M_DELTA_Y)
(set! (structp-ref pfv DZ) M_DELTA_Z)
(decl-var-and-pvar Gaps_IO_DataFile gid)
(decl-var-and-pvar Gaps_IO_DataFile ghd)
(decl-var-and-pvar Gaps_IO_DataFile gad)
(define-long tsave 0)
(init_parallel_file_for_mpi_fields pF0 pgid "tmpDM" (if tsave tsave -1) G_GAPSIO_VERSION G_GAPSIO_NUM_REDUCEWRITE)
(init_parallel_file_for_mpi_fields pA0 pghd "tmpH" (if tsave tsave -1) G_GAPSIO_VERSION G_GAPSIO_NUM_REDUCEWRITE)
(init_parallel_file_for_mpi_fields pA0 pgad "tmpA" (if tsave tsave -1) G_GAPSIO_VERSION G_GAPSIO_NUM_REDUCEWRITE)
(define-double gauss_rand_tmp (maxwell_dist 0 1))
(if M_DM_USE_DISP_INIT_CONDITION
(init_dm_phi_global_rand pF0 M_DM_PHI0 M_DM_DISP_RAND_AMP M_DM_USE_SINGLE_PSI)
(init_dm_phi_global pF0 M_DM_M0 (* M_DM_PZ_R (if M_DM_PZ_R_GAUSS_RAND gauss_rand_tmp 1)) M_DM_PZ_I M_DM_Z_OFFSET M_DM_LAMBDA M_DM_A (sqrt (- 1 (* M_DM_A M_DM_A))) 1 M_DELTA_Z 0 M_DM_PHI34V 0 M_DM_AMP_PSI))
(if M_DM_DUAL_FIELD
(begin
;(init_dm_phi_global pFf0 M_DM_M0 (* M_DM_PZ_R (if M_DM_PZ_R_GAUSS_RAND gauss_rand_tmp 1)) M_DM_PZ_I M_DM_Z_OFFSET M_DM_LAMBDA M_DM_A (sqrt (- 1 (* M_DM_A M_DM_A))) 1 M_DELTA_Z 0 M_DM_PHI34V M_PI M_DM_AMP_PSI)
(if M_DM_USE_DISP_INIT_CONDITION
(init_dm_phi_global_rand pFf0 M_DM_PHI0 M_DM_DISP_RAND_AMP M_DM_USE_SINGLE_PSI)
(init_dm_dual_phi_global pF0 pFf0 M_DM_AMP_PSI M_DM_SGM M_DM_NUMP M_DM_M0 M_DELTA_Z (vector-ref allxyzmax 2)))
(init_external_field3d_without_ss_DMf pFf0)
)
)
(init_external_field3d_without_ss_DM pF0)
;(write_parallel_file_for_mpi_fields pF0 pgid 0)
;(exit 0)
(define-int use_old_unstable_alg 0)
(init_dm_A0_global pA0 0 0)
(init_dm_A1_global pA1 M_DM_AMPX (if use_old_unstable_alg M_DM_EY M_DM_YZ) (if use_old_unstable_alg M_DM_DT 1))
;if not use_old_unstable_alg, then pA0 is A, pA1 is Y, pA2 is J
(if use_old_unstable_alg
(mpi_init_bicg pbs dm_bicg_fun pF0 1000 M_DM_SOLVE_ERR pfv)
(begin
(mpi_init_bicg pbs cayley_dm_new_fun pF0 1000 M_DM_SOLVE_ERR pfv)
(if M_DM_DUAL_FIELD
(mpi_init_bicg pbsf cayley_dm_new_fun pFf0 1000 M_DM_SOLVE_ERR pfv)
)
)
)
(define-double beg_time_dm (wclk_now))
(define-double beg_time_dm_lst beg_time_dm)
(for-from-to t 0 NUM_TIMESTEP
(eval-scmc-global
(begin-map
(lambda (x)
`(set! (structp-ref pfv ,x) ,x)
)
'(pA0 pA1 pA2 pF0)
)
)
;(init_dm_phi_global pF0 M_DM_PHI0 0 0 0 0 0 0 0 M_DM_SGM M_DM_FRQ)
(sync_ovlp_mpi_field pF0)
(if M_DM_DUAL_FIELD
(sync_ovlp_mpi_field pFf0)
)
(sync_ovlp_mpi_field pA0)
(sync_ovlp_mpi_field pA1)
(if (eq? 0 (remainder t NUM_DUMP_TIMESTEP))
(begin
(if M_DM_DUAL_FIELD
(begin
(mpi_field_write_to_file pF0 pgid (* 2 tsave))
(mpi_field_write_to_file pFf0 pgid (+ 1 (* 2 tsave)))
(MPI_dm_calc_hamt_dual pFf0 pF0 pA0 pA2 M_DM_DT M_DELTA_Z M_DELTA_Y M_DELTA_X M_DM_A M_DM_Q0 M_DM_M0)
)
(begin
(mpi_field_write_to_file pF0 pgid tsave)
(if M_DM_USE_8x8
(MPI_dm_8x8_cal_H pb_AF0 pF0 pA0 pA2 M_DM_DT M_DELTA_Z M_DELTA_Y M_DELTA_X M_DM_A M_DM_Q0 M_DM_M0)
(MPI_dm_calc_hamt pb_AF0 pF0 pA0 pA2 M_DM_DT M_DELTA_Z M_DELTA_Y M_DELTA_X M_DM_A M_DM_Q0 M_DM_M0))
)
)
(mpi_field_write_to_file pA2 pghd tsave)
(mpi_field_write_to_file pA0 pgad (* tsave 2))
(mpi_field_write_to_file pA1 pgad (+ (* tsave 2) 1))
(incf! tsave)
(define-double tnow (wclk_now))
(define-double tall (- tnow beg_time_dm))
(define-double tonestep (- tnow beg_time_dm_lst))
(LOG_RECORD_INFO "%d done, ips=%f, ipsall=%f\n" t (/ NUM_DUMP_TIMESTEP tonestep) (/ t tall))
(set! beg_time_dm_lst tnow)
)
)
(cond
(use_old_unstable_alg
(MPI_dm_1st_eqn_right pb_AF0 pF1 pF0 pA0 pA1 pA2 M_DM_A M_DM_Q0 M_DM_M0 M_DM_DT)
(sync_ovlp_mpi_field pb_AF0)
(mpi_simple_bicgstab pbs pF1 pb_AF0)
(MPI_dm_1st_eqn_fdtd pb_AF0 pF1 pF0 pA0 pA1 pA2 M_DM_A M_DM_Q0 M_DM_M0 M_DM_DT)
)
(else
;(sync_ovlp_mpi_field pA0)
(cayley_dm_new_fun_right pb_AF0 pF0 pfv)
(sync_ovlp_mpi_field pb_AF0)
(mpi_simple_bicgstab pbs pF1 pb_AF0)
(blas_axpby_Field3D_MPI pF0 pF0 0.5 pF1 0.5)
(blas_yiszero_synced_Field3D_MPI pA2 pA2)
;from here pF0 is (pF1+pF0)/2
(if M_DM_DUAL_FIELD
(begin
(set! (structp-ref pfv pF0) pFf0)
(cayley_dm_new_fun_right pb_AFf0 pFf0 pfv)
;(define-double tmp0 (blas_findmax_Field3D_MPI pb_AFf0 pb_AFf0))
;(LOG_RECORD_INFO "pbAFf0 ext max=%e\n" tmp0)
(sync_ovlp_mpi_field pb_AFf0)
(mpi_simple_bicgstab pbsf pFf1 pb_AFf0)
(blas_axpby_Field3D_MPI pFf0 pFf0 0.5 pFf1 0.5)
(MPI_dm_bihamt_dual_psi_eqn_J pFf0 pF0 pA0 pA2 M_DM_DT M_DELTA_Z M_DELTA_Y M_DELTA_X M_DM_A M_DM_Q0 M_DM_M0)
)
(if M_DM_USE_8x8
(MPI_dm_8x8_eqn_J pF0 pF0 pA0 pA2 M_DM_DT M_DELTA_Z M_DELTA_Y M_DELTA_X M_DM_A M_DM_Q0 M_DM_M0)
(MPI_dm_cayley_eqn_J pF0 pF0 pA0 pA2 M_DM_DT M_DELTA_Z M_DELTA_Y M_DELTA_X M_DM_A M_DM_Q0 M_DM_M0))
)
;pA2 is J, pA1 is Y
(blas_axpy_Field3D_MPI pA1 pA1 M_DM_DT pA2)
;above is \dot{F}={F,H^1_d}
(if M_DM_USE_8x8
(MPI_dm_8x8_eqn_psi_m pF0 pF1 pA0 pA2 M_DM_DT M_DELTA_Z M_DELTA_Y M_DELTA_X M_DM_A M_DM_Q0 M_DM_M0)
(MPI_dm_exact_eqn_m pF0 pF1 pA0 pA2 M_DM_DT M_DELTA_Z M_DELTA_Y M_DELTA_X M_DM_A M_DM_Q0 M_DM_M0)
)
(blas_yisax_Field3D_MPI pF1 pF1 1 pF0)
(if M_DM_DUAL_FIELD
(begin
(MPI_dm_exact_eqn_m pFf0 pFf1 pA0 pA2 M_DM_DT M_DELTA_Z M_DELTA_Y M_DELTA_X M_DM_A M_DM_Q0 M_DM_M0)
(blas_yisax_Field3D_MPI pFf1 pFf1 1 pFf0)
)
)
;\dot{F}={F,H^2_d}
(blas_axpy_Field3D_MPI pA0 pA0 M_DM_DT pA1)
;\dot{F}={F,H^3_{dY}}
(sync_ovlp_mpi_field pA0)
(MPI_dm_bihamt_eqn_dydt pF0 pF1 pA0 pA1 M_DM_DT M_DELTA_Z M_DELTA_Y M_DELTA_X M_DM_A M_DM_Q0 M_DM_M0)
;\dot{F}={F,H^3_{dA}}
)
)
(define-void* ftmp)
(if use_old_unstable_alg
(begin
(set! ftmp pF0)
(set! pF0 pF1)
(set! pF1 ftmp)
(set! ftmp pA0)
(set! pA0 pA1)
(set! pA1 pA2)
(set! pA2 ftmp)))
)
;(MPI_dm_1st_eqn_core pF2 pF0 pF1 pA0 pA1 pA2 M_DM_Q0 M_DM_M0 M_DM_DT)
;(init_dm_global )
)
(else
(gen_cst_specs
(pnpm double call_GET_NPM)
(pchg double call_GET_CHARGE)
(pmass double call_GET_MASS)
(pgcache long call_GET_GRID_CACHE_LEN)
(pcucache long call_GET_CU_CACHE_LEN)
)
(decl-var-and-pvar Particle_in_Cell_MPI pis)
(gen-const-vars M_ (USE_TYPE3_KERNEL USE_SMALL_NUM_GRIDS USE_USER_DEFINED_PARTICLE_DISTRIBUTION USE_INIT_PARTICLE_FILE USE_DUMP_PARTICLE_FILE USE_ITG_MODE ITG_ENE_CONS ITG_CONST_NE0 USE_SMALL_TIMESTEP_MODE USE_MULTI_STEP USE_MULTI_SUBSTEP USE_SPLIT_MULTI_SUBSTEP USE_EOUT_SCHEME ITG_GC USE_DEBUG NUM_MULTI_STEP_SORT USE_MIDP_IMPLICIT USE_IMPLICIT_2ND USE_FULLY_IMPLICIT_ELECTRON PARTICLE_SOLVE_ERR JFNK_SOLVE_ERR JFNK_BICGSTAB_SOLVE_ERR JFNK_EPSILON))
(set! M_JFNK_EPSILON (if (eq? M_JFNK_EPSILON 0) 1e-7 M_JFNK_EPSILON))
(set! M_JFNK_BICGSTAB_SOLVE_ERR (if (eq? M_JFNK_BICGSTAB_SOLVE_ERR 0) 1e-10 M_JFNK_BICGSTAB_SOLVE_ERR))
(set! M_JFNK_SOLVE_ERR (if (eq? M_JFNK_SOLVE_ERR 0) 1e-7 M_JFNK_SOLVE_ERR))
(define-long num_substep 4)
(define-long num_sort_e_substep 4)
(if (or M_USE_MULTI_SUBSTEP M_USE_SPLIT_MULTI_SUBSTEP)
(begin
(gen-const-vars M_ (NUM_SUBSTEP SORTE_NUM_SUBSTEP))
(if M_NUM_SUBSTEP (set! num_substep M_NUM_SUBSTEP))
(if M_SORTE_NUM_SUBSTEP (set! num_sort_e_substep M_SORTE_NUM_SUBSTEP))
)
)
(define-int num_multi_step_sort (if (eq? M_NUM_MULTI_STEP_SORT 0) 1 M_NUM_MULTI_STEP_SORT))
(assert (> num_multi_step_sort 0))
(gen-const-vars M_ (ITG_B0 ITG_MIN_R0 ITG_MAJ_R0 ITG_Q0 ITG_ZMID) 1)
(gen-const-vars G_ (USE_REL USE_NON_UNI_IO_FOR_EACH_SPEC))
(if (and (neq? M_USE_ITG_MODE 0) (neq? USE_TORI 0))
(gen-const-vars M_ (ITG_B0 ITG_MIN_R0 ITG_MAJ_R0 ITG_Q0 ITG_ZMID) 2))
(gen-const-vars T_ (TORI_X0 TORI_SOLVE_ERR) 1)
(if USE_TORI (gen-const-vars T_ (TORI_X0 TORI_SOLVE_ERR) 2))
(gen-const-vars G_ (REL_SOLVE_ERR NR_SOLVE_ERR) 1)
(if (or G_USE_REL use_rel_ncr) (gen-const-vars G_ (REL_SOLVE_ERR) 2))
(if M_USE_IMPLICIT_2ND (gen-const-vars G_ (NR_SOLVE_ERR) 2))
;(LOG_RECORD_INFO "tx=%e\n" T_TORI_X0) (exit 0)
(define-int* p_particle_type (TYPE_MALLOC int NUM_SPEC))
(for-from-zero-to i NUM_SPEC
(if (or M_USE_SMALL_TIMESTEP_MODE M_USE_MULTI_SUBSTEP M_USE_FULLY_IMPLICIT_ELECTRON)
(vector-set! p_particle_type i (call_CAL_FUN_ONE_PARA "GET_PARTICLE_TYPE" i))
(vector-set! p_particle_type i 0)
)
)
(init_global_particles ppis ptestfield ptestfield_2x ptestfieldSPEC M_USE_SMALL_NUM_GRIDS G_USE_PML_ABC_DIR G_PML_LEVEL G_PML_SIGMA_MAX DELTAT NUM_SPEC allxyzmax pmass pchg pnpm pgcache pcucache p_particle_type M_USE_REDUCE_DIM M_REDUCE_DIM_X_RAT M_REDUCE_DIM_Y_RAT M_REDUCE_DIM_Z_RAT M_REDUCE_DIM_RANDOM_RATE M_USE_VLO use_rel_ncr)
(if (and M_USE_ITG_MODE USE_TORI)
(sync_ovlp_mpi_field ("&" (structp-ref ppis MPI_fieldB_ext)))
)
(if M_USE_DEBUG
(begin
(LOG_RECORD_INFO "dumping debug field\n")
(decl-var-and-pvar Gaps_IO_DataFile gid)
(init_parallel_file_for_mpi_fields ptestfield pgid "tmpField_dbg" -1 G_GAPSIO_VERSION G_GAPSIO_NUM_REDUCEWRITE)
(mpi_field_write_to_file ("&" (structp-ref ppis MPI_fieldE)) pgid 0)
(mpi_field_write_to_file ("&" (structp-ref ppis MPI_fieldB)) pgid 1)
(mpi_field_write_to_file ("&" (structp-ref ppis MPI_fieldE_ext)) pgid 2)
(mpi_field_write_to_file ("&" (structp-ref ppis MPI_fieldB_ext)) pgid 3)
)
)
(define-jfnk_newton_space jns)
(if M_USE_SMALL_TIMESTEP_MODE
(begin
(init_implicit_particle_mpi ppis)
(if M_USE_MIDP_IMPLICIT
(init_jfnk_newton_space ("&" jns) ("&" ppis->MPI_fieldE1) nonlin_fun_midp_vlasov_maxwell M_JFNK_SOLVE_ERR M_JFNK_BICGSTAB_SOLVE_ERR 18 8 M_JFNK_EPSILON ppis)
(init_jfnk_newton_space ("&" jns) ("&" ppis->MPI_fieldE) nonlin_fun_cur_min_curlB M_JFNK_SOLVE_ERR M_JFNK_BICGSTAB_SOLVE_ERR 18 8 M_JFNK_EPSILON ppis)
) ;newton_error bicg_error dx_epsl
;(init_jfnk_newton_space ("&" jns) ("&" ppis->MPI_fieldE) one_step_calc_current 1e-12 1e-5 4 4 1e-6 ppis)
(jfnk_newton_init_parameters ("&" jns) 1 1 pmass pchg)
;(if USE_INIT_EB0 (begin (blas_yisax_Field3D_MPI ("&" ppis->MPI_fieldE) ("&" ppis->MPI_fieldE) 1 ("&" ppis->MPI_fieldE)) (blas_yisax_Field3D_MPI ("&" ppis->MPI_fieldB) ("&" ppis->MPI_fieldB) 1 ("&" ppis->MPI_fieldB))))
)
)
(if M_USE_FULLY_IMPLICIT_ELECTRON
(begin
(init_implicit_particle_mpi ppis)
(init_jfnk_newton_space ("&" jns) ("&" ppis->MPI_fieldE) nonlin_fun_shell_for_mask M_JFNK_SOLVE_ERR M_JFNK_BICGSTAB_SOLVE_ERR 18 8 M_JFNK_EPSILON ppis)
(jfnk_newton_init_parameters ("&" jns) 1 1 pmass pchg)
)
)
(if M_USE_ITG_MODE
;(blas_yisax_Field3D_MPI ("&" ppis->MPI_fieldE_ext) ("&" ppis->MPI_fieldE_ext) -1 ("&" ppis->MPI_fieldE_ext))
(blas_yisax_Field3D_MPI ("&" ppis->MPI_fieldB1) ("&" ppis->MPI_fieldB1) -1 ("&" ppis->MPI_fieldE)) ; B1 is -Te
)
(cond
(0
(init_single_particle_fmpi ("&" (structp-ref ppis MPI_fieldE)))
)
(M_USE_USER_DEFINED_PARTICLE_DISTRIBUTION
(init_user_defined_particle_fmpi ("&" (structp-ref ppis MPI_fieldE)))
(call_particle_sort_mpi ppis 0 0)
(call_particle_sort_mpi ppis 1 0)
(call_particle_sort_mpi ppis 2 0)
)
(M_USE_INIT_PARTICLE_FILE
(decl-var-and-pvar Gaps_IO_DataFile gid_grid)
(decl-var-and-pvar Gaps_IO_DataFile gid_cu)
(init_parallel_file_particle_for_mpi_fields_V0 ("&" (structp-ref ppis MPI_fieldE)) pgid_grid pgid_cu pgcache pcucache "GRID_PARTICLE_file" "CU_PARTICLE_file" 0 1)
(LOG_RECORD_INFO "rank=%d, Loading particles ...\n" rank)