-
Notifications
You must be signed in to change notification settings - Fork 0
/
write_SOFI_json.m
120 lines (105 loc) · 5.37 KB
/
write_SOFI_json.m
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
function [] = write_SOFI_json(path,fd,cube,core,source,receiver,snapshot,filename)
% Write Jason file for SOFI3D
% Input: path {structure vriable} contains path.input, path.output, path.sofi
% fd {structure vriable} contains fd.order, fd.maxtime, fd.timestep
% cube {structure vriable} contains cube parameters
% system {structure variable} contains number of cores
%Check core
%Fix '\' error for windows
path.input = strrep(path.input,'\','\\');
path.output = strrep(path.output,'\','\\');
path.sofi = strrep(path.sofi,'\','\\');
%% Write jason file
fid = fopen(['.',filesep,'sofi3D.json'],'w');
fprintf(fid,'#-----------------------------------------------------------------\n');
fprintf(fid,'# JSON PARAMETER FILE FOR SOFI3D\n');
fprintf(fid,'#-----------------------------------------------------------------\n');
fprintf(fid,'{\n');
fprintf(fid,sprintf('"Domain Decomposition" : "comment",\n\t\t"NPROCX" : "%d",\n\t\t"NPROCY" : "%d",\n\t\t"NPROCZ" : "%d",\n\n', core.NPROCX,core.NPROCY,core.NPROCZ));
fprintf(fid,sprintf('"3-D Grid" : "comment",\n\t\t"NX" : "%d",\n\t\t"NY" : "%d",\n\t\t"NZ" : "%d",\n\t\t"DX" : "%f",\n\t\t"DY" : "%f",\n\t\t"DZ" : "%f",\n\n',cube.nx+ 2*cube.pad, cube.ny+ 2*cube.pad, cube.nz+ 4*cube.pad,cube.res,cube.res,cube.res));
fprintf(fid,sprintf('"FD order" : "comment",\n\t\t"FDORDER" : "%d",\n\t\t"FDORDER_TIME" : "%d",\n\t\t"FDCOEFF" : "2",\n\t\t"fdcoeff values: Taylor=1, Holberg=2" :"comment",\n\n' ,fd.spaceorder, fd.timeorder));
fprintf(fid,sprintf('"Time Stepping" : "comment",\n\t\t"TIME" : "%.12f",\n\t\t"DT" : "%.12f",\n\n',fd.maxtime,fd.timestep));
source.path = strrep(source.path,'\','\\');
fprintf(fid,sprintf(['"Source" : "comment",\n\t\t'...
'"SOURCE_SHAPE" : "%d",\n\t\t'...
'"source shape values: ricker=1;fumue=2;from_SIGNAL_FILE=3;SIN**3=4" : "comment",\n\t\t'...
'"SIGNAL_FILE" : "signal_mseis.tz",\n\t\t'...
'"SOURCE_TYPE" : "%d",\n\t\t'...
'"source_type values (point_source): explosive=1;force_in_x=2;in_y=3;in_z=4;custom=5;earthquake=6" : "comment",\n\t\t'...
'"SOURCE_ALPHA, SOURCE_BETA" : "0.0 , 0.0",\n\t\t'...
'"AMON, STR, DIP, RAKE" : "1.0e2 , 45.0 , 90.0 , 45.0",\n\t\t'...
'"SRCREC" : "1",\n\t\t'...
'"srcrec values : read from SOURCE_FILE=1, PLANE_WAVE=2 (internal)" : "comment",\n\t\t'...
'"SOURCE_FILE" : "%s",\n\t\t'...
'"RUN_MULTIPLE_SHOTS" : "0",\n\t\t'...
'"PLANE_WAVE_DEPTH" : "0.00048",\n\t\t'...
'"PLANE_WAVE_ANGLE" : "0.0",\n\t\t'...
'"TS" : "1e-7",\n\n'],source.shape, source.type, source.path));
fprintf(fid,['"Model" : "comment",\n\t\t"READMOD" : "1",\n\t\t"MFILE" : "',path.input,filesep,cube.name,'",\n\t\t"WRITE_MODELFILES" : "2",\n\n']);
fprintf(fid, sprintf(['"Q-approximation" : "comment",\n\t\t'...
'"L" : "0",\n\t\t'...
'"FREF" : "5.0",\n\t\t'...
'"FL1" : "5.0",\n\t\t'...
'"TAU" : "0.00001",\n\n']));
fprintf(fid, sprintf(['"Boundary Conditions" : "comment",\n\t\t'...
'"FREE_SURF" : "0",\n\t\t'...
'"ABS_TYPE" : "2",\n\t\t'...
'"FW" : "15",\n\t\t'...
'"DAMPING" : "8.0",\n\t\t'...
'"FPML" : "5.0",\n\t\t'...
'"VPPML" : "3500.0",\n\t\t'...
'"NPOWER" : "4.0",\n\t\t'...
'"K_MAX_CPML" : "10.0",\n\t\t'...
'"BOUNDARY" : "0",\n\n']));
if snapshot.snap == 1
mkdir(snapshot.snap_file);
end
snapshot.snap_file = strrep(snapshot.snap_file,'\','\\');
fprintf(fid, sprintf(['"Snapshots" : "comment",\n\t\t'...
'"SNAP" : "%d",\n\t\t'...
'"TSNAP1" : "%.15f",\n\t\t'...
'"TSNAP2" : "%.15f",\n\t\t'...
'"TSNAPINC" : "%.15f",\n\t\t'...
'"IDX" : "%d",\n\t\t'...
'"IDY" : "%d",\n\t\t'...
'"IDZ" : "%d",\n\t\t'...
'"SNAP_FORMAT" : "%d",\n\t\t'...
'"SNAP_FILE" : "%s",\n\t\t'...
'"SNAP_PLANE" : "%d",\n\n'], snapshot.snap,snapshot.Tsanp1,snapshot.Tsanp2,snapshot.Tsanpinc,snapshot.idx,snapshot.idy,snapshot.idz,snapshot.snap_format,snapshot.snap_file,snapshot.snap_plane));
receiver.path = strrep(receiver.path,'\','\\');
fprintf(fid, sprintf(['"Receiver" : "comment",\n\t\t'...
'"SEISMO" : "4",\n\t\t'...
'"READREC" : "1",\n\t\t'...
'"REC_FILE" : "%s",\n\t\t'...
'"REFRECX, REFRECY, REFRECZ" : "0.0 , 0.0 , 0.0",\n\t\t'...
'"XREC1,YREC1, ZREC1" : "0.00045 , 0.00045, 0.00045",\n\t\t'...
'"XREC2,YREC2, ZREC2" : "0.01815 ,0.01735, 0.02815",\n\t\t'...
'"NGEOPH" : "10",\n\n'], receiver.path));
fprintf(fid,sprintf(['"Receiver array" : "comment",\n\t\t'...
'"REC_ARRAY" : "0",\n\t\t'...
'"REC_ARRAY_DEPTH" : "1350.0",\n\t\t'...
'"REC_ARRAY_DIST" : "640.0",\n\t\t'...
'"DRX" : "2",\n\t\t'...
'"DRZ" : "2",\n\n']));
filename = strrep(filename,'.mat','');
if filesep == '\' %Window user
output_rec_name = [path.output,filesep,filesep,filename];
else
output_rec_name = [path.output,filesep,filename];
end
fprintf(fid,sprintf(['"Seismograms" : "comment",\n\t\t'...
'"NDT, NDTSHIFT" : "2, 0",\n\t\t'...
'"SEIS_FORMAT" : "3",\n\t\t'...
'"SEIS_FILE" : "%s",\n\n'], output_rec_name));
fprintf(fid,sprintf(['"Monitoring the simulation" : "comment",\n\t\t'...
'"LOG_FILE" : ".', filesep,'output',filesep,'test.log",\n\t\t'...
'"LOG" : "1",\n\t\t'...
'"OUT_SOURCE_WAVELET" : "1",\n\t\t'...
'"OUT_TIMESTEP_INFO" : "10",\n\n']));
fprintf(fid,sprintf(['"Checkpoints" : "comment",\n\t\t'...
'"CHECKPTREAD" : "0",\n\t\t'...
'"CHECKPTWRITE" : "0",\n\t\t'...
'"CHECKPT_FILE" : "tmp/checkpoint_sofi3D",\n']));
fprintf(fid,'}');
fclose(fid);
end