Skip to content

Commit cbd0342

Browse files
committed
Add a test and make output on a DG mesh safe.
1 parent dceddcb commit cbd0342

File tree

5 files changed

+343
-1
lines changed

5 files changed

+343
-1
lines changed

femtools/VTK_interfaces.F90

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ subroutine vtk_write_fields(filename, index, position, model, sfields,&
268268
if (present(projection)) then
269269
lprojection = projection
270270
else
271-
lprojection = 0
271+
lprojection = DGIFY
272272
end if
273273

274274
if (present(stat)) stat = 0
@@ -289,6 +289,7 @@ subroutine vtk_write_fields(filename, index, position, model, sfields,&
289289
if ( (tfields(i)%mesh%continuity .lt. 0 .and. tfields(i)%mesh%shape%degree /= 0) ) dgify_fields = .true.
290290
end do
291291
end if
292+
if (model%continuity .lt. 0) lprojection = DGIFY
292293

293294
if (present(number_of_partitions)) then
294295
nparts = number_of_partitions
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?xml version='1.0' encoding='utf-8'?>
2+
<testproblem>
3+
<name>io_projection</name>
4+
<owner userid="jrper"/>
5+
<problem_definition length="short" nprocs="1">
6+
<command_line>fluidity io_projection_lumped.flml
7+
fluidity io_projection_full.flml</command_line>
8+
</problem_definition>
9+
<variables>
10+
<variable name="lumped_stats" language="python">from fluidity_tools import stat_parser
11+
s=stat_parser('io_projection_lumped.stat')
12+
sdata=s['Fluid']['Scalar']
13+
vdata=s['Fluid']['Velocity%magnitude']
14+
tdata=s['Fluid']['Tensor%magnitude']
15+
lumped_stats=[[sdata['min'],vdata['min'],tdata['min']],
16+
[sdata['max'],vdata['max'],tdata['max']],
17+
sdata['integral']]</variable>
18+
<variable name="full_stats" language="python">from fluidity_tools import stat_parser
19+
s=stat_parser('io_projection_full.stat')
20+
sdata=s['Fluid']['Scalar']
21+
vdata=s['Fluid']['Velocity%magnitude']
22+
tdata=s['Fluid']['Tensor%magnitude']
23+
full_stats=[[sdata['min'],vdata['min'],tdata['min']],
24+
[sdata['max'],vdata['max'],tdata['max']],
25+
sdata['integral']]</variable>
26+
</variables>
27+
<pass_tests>
28+
<test name="minimum" language="python">assert(all([abs(x[0]-x[1])&lt;1.0e-8 for x in zip(lumped_stats[0],[0, 1, 0])]) and
29+
all([abs(x[0]-x[1])&lt;1.0e-8 for x in zip(full_stats[0],[0, 1, 0])]))</test>
30+
<test name="maximum" language="python">from numpy import sqrt
31+
assert(all([abs(x[0]-x[1])&lt;1.0e-8 for x in zip(lumped_stats[1],[1, 1, sqrt(2)])]) and
32+
all([abs(x[0]-x[1])&lt;1.0e-8 for x in zip(full_stats[1],[1, 1, sqrt(2)])]))</test>
33+
<test name="integral" language="python">from numpy import sqrt
34+
assert(abs(lumped_stats[2]-0.5)&lt;1.0e-8 and abs(full_stats[2]-0.5)&lt;1.0e-8)</test>
35+
</pass_tests>
36+
</testproblem>
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
<?xml version='1.0' encoding='utf-8'?>
2+
<fluidity_options>
3+
<simulation_name>
4+
<string_value lines="1">io_projection_full</string_value>
5+
</simulation_name>
6+
<problem_type>
7+
<string_value lines="1">fluids</string_value>
8+
</problem_type>
9+
<geometry>
10+
<dimension>
11+
<integer_value rank="0">2</integer_value>
12+
</dimension>
13+
<mesh name="CoordinateMesh">
14+
<from_file file_name="square">
15+
<format name="gmsh"/>
16+
<stat>
17+
<include_in_stat/>
18+
</stat>
19+
</from_file>
20+
</mesh>
21+
<mesh name="VelocityMesh">
22+
<from_mesh>
23+
<mesh name="CoordinateMesh"/>
24+
<mesh_continuity>
25+
<string_value>discontinuous</string_value>
26+
</mesh_continuity>
27+
<stat>
28+
<exclude_from_stat/>
29+
</stat>
30+
</from_mesh>
31+
</mesh>
32+
<quadrature>
33+
<degree>
34+
<integer_value rank="0">5</integer_value>
35+
</degree>
36+
</quadrature>
37+
</geometry>
38+
<io>
39+
<dump_format>
40+
<string_value>vtk</string_value>
41+
</dump_format>
42+
<dump_period>
43+
<constant>
44+
<real_value rank="0">0</real_value>
45+
</constant>
46+
</dump_period>
47+
<disable_dump_at_start/>
48+
<output_mesh name="CoordinateMesh"/>
49+
<project>
50+
<full_projection>
51+
<solver>
52+
<iterative_method name="cg"/>
53+
<preconditioner name="sor"/>
54+
<relative_error>
55+
<real_value rank="0">1.0e-7</real_value>
56+
</relative_error>
57+
<max_iterations>
58+
<integer_value rank="0">1000</integer_value>
59+
</max_iterations>
60+
<never_ignore_solver_failures/>
61+
<diagnostics>
62+
<monitors/>
63+
</diagnostics>
64+
</solver>
65+
</full_projection>
66+
</project>
67+
<stat/>
68+
</io>
69+
<timestepping>
70+
<current_time>
71+
<real_value rank="0">0.0</real_value>
72+
</current_time>
73+
<timestep>
74+
<real_value rank="0">1.0</real_value>
75+
</timestep>
76+
<finish_time>
77+
<real_value rank="0">1.0</real_value>
78+
</finish_time>
79+
</timestepping>
80+
<material_phase name="Fluid">
81+
<vector_field name="Velocity" rank="1">
82+
<prescribed>
83+
<mesh name="VelocityMesh"/>
84+
<value name="WholeMesh">
85+
<python>
86+
<string_value lines="20" type="code" language="python">def val(X,t):
87+
if 'n' in persistent:
88+
n=persistent['n']
89+
else:
90+
n=0
91+
92+
persistent['n'] = n+1
93+
return (n%2,(n+1)%2)</string_value>
94+
</python>
95+
</value>
96+
<output/>
97+
<stat>
98+
<include_in_stat/>
99+
</stat>
100+
<detectors>
101+
<exclude_from_detectors/>
102+
</detectors>
103+
</prescribed>
104+
</vector_field>
105+
<scalar_field name="Scalar" rank="0">
106+
<prescribed>
107+
<mesh name="VelocityMesh"/>
108+
<value name="WholeMesh">
109+
<python>
110+
<string_value lines="20" type="code" language="python">def val(X,t):
111+
if 'n' in persistent:
112+
n=persistent['n']
113+
else:
114+
n=0
115+
116+
persistent['n'] = n+1
117+
return n%2</string_value>
118+
</python>
119+
</value>
120+
<output/>
121+
<stat/>
122+
<detectors>
123+
<exclude_from_detectors/>
124+
</detectors>
125+
</prescribed>
126+
</scalar_field>
127+
<vector_field name="Tensor" rank="1">
128+
<prescribed>
129+
<mesh name="VelocityMesh"/>
130+
<value name="WholeMesh">
131+
<python>
132+
<string_value lines="20" type="code" language="python">def val(X,t):
133+
if 'n' in persistent:
134+
n=persistent['n']
135+
else:
136+
n=0
137+
138+
persistent['n'] = n+1
139+
return [n%2,n%2]</string_value>
140+
</python>
141+
</value>
142+
<output/>
143+
<stat>
144+
<include_in_stat/>
145+
</stat>
146+
<detectors>
147+
<exclude_from_detectors/>
148+
</detectors>
149+
</prescribed>
150+
</vector_field>
151+
</material_phase>
152+
</fluidity_options>
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
<?xml version='1.0' encoding='utf-8'?>
2+
<fluidity_options>
3+
<simulation_name>
4+
<string_value lines="1">io_projection_lumped</string_value>
5+
</simulation_name>
6+
<problem_type>
7+
<string_value lines="1">fluids</string_value>
8+
</problem_type>
9+
<geometry>
10+
<dimension>
11+
<integer_value rank="0">2</integer_value>
12+
</dimension>
13+
<mesh name="CoordinateMesh">
14+
<from_file file_name="square">
15+
<format name="gmsh"/>
16+
<stat>
17+
<include_in_stat/>
18+
</stat>
19+
</from_file>
20+
</mesh>
21+
<mesh name="VelocityMesh">
22+
<from_mesh>
23+
<mesh name="CoordinateMesh"/>
24+
<mesh_continuity>
25+
<string_value>discontinuous</string_value>
26+
</mesh_continuity>
27+
<stat>
28+
<exclude_from_stat/>
29+
</stat>
30+
</from_mesh>
31+
</mesh>
32+
<quadrature>
33+
<degree>
34+
<integer_value rank="0">5</integer_value>
35+
</degree>
36+
</quadrature>
37+
</geometry>
38+
<io>
39+
<dump_format>
40+
<string_value>vtk</string_value>
41+
</dump_format>
42+
<dump_period>
43+
<constant>
44+
<real_value rank="0">0</real_value>
45+
</constant>
46+
</dump_period>
47+
<disable_dump_at_start/>
48+
<output_mesh name="CoordinateMesh"/>
49+
<project>
50+
<mass_lumped/>
51+
</project>
52+
<stat/>
53+
</io>
54+
<timestepping>
55+
<current_time>
56+
<real_value rank="0">0.0</real_value>
57+
</current_time>
58+
<timestep>
59+
<real_value rank="0">1.0</real_value>
60+
</timestep>
61+
<finish_time>
62+
<real_value rank="0">1.0</real_value>
63+
</finish_time>
64+
</timestepping>
65+
<material_phase name="Fluid">
66+
<vector_field name="Velocity" rank="1">
67+
<prescribed>
68+
<mesh name="VelocityMesh"/>
69+
<value name="WholeMesh">
70+
<python>
71+
<string_value lines="20" type="code" language="python">def val(X,t):
72+
if 'n' in persistent:
73+
n=persistent['n']
74+
else:
75+
n=0
76+
77+
persistent['n'] = n+1
78+
return (n%2,(n+1)%2)</string_value>
79+
</python>
80+
</value>
81+
<output/>
82+
<stat>
83+
<include_in_stat/>
84+
</stat>
85+
<detectors>
86+
<exclude_from_detectors/>
87+
</detectors>
88+
</prescribed>
89+
</vector_field>
90+
<scalar_field name="Scalar" rank="0">
91+
<prescribed>
92+
<mesh name="VelocityMesh"/>
93+
<value name="WholeMesh">
94+
<python>
95+
<string_value lines="20" type="code" language="python">def val(X,t):
96+
if 'n' in persistent:
97+
n=persistent['n']
98+
else:
99+
n=0
100+
101+
persistent['n'] = n+1
102+
return n%2</string_value>
103+
</python>
104+
</value>
105+
<output/>
106+
<stat/>
107+
<detectors>
108+
<exclude_from_detectors/>
109+
</detectors>
110+
</prescribed>
111+
</scalar_field>
112+
<vector_field name="Tensor" rank="1">
113+
<prescribed>
114+
<mesh name="VelocityMesh"/>
115+
<value name="WholeMesh">
116+
<python>
117+
<string_value lines="20" type="code" language="python">def val(X,t):
118+
if 'n' in persistent:
119+
n=persistent['n']
120+
else:
121+
n=0
122+
123+
persistent['n'] = n+1
124+
return [n%2,n%2]</string_value>
125+
</python>
126+
</value>
127+
<output/>
128+
<stat>
129+
<include_in_stat/>
130+
</stat>
131+
<detectors>
132+
<exclude_from_detectors/>
133+
</detectors>
134+
</prescribed>
135+
</vector_field>
136+
</material_phase>
137+
</fluidity_options>

tests/io_projection/src/square.geo

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
Point(1) = {0,0,0};
2+
Point(2) = {1,0,0};
3+
Point(3) = {1,1,0};
4+
Point(4) = {0,1,0};
5+
6+
Line(1) = {1,2};
7+
Line(2) = {2,3};
8+
Line(3) = {3,4};
9+
Line(4) = {4,1};
10+
11+
Line Loop(1) = {1,2,3,4};
12+
13+
Plane Surface(1) = 1;
14+
15+
Transfinite Line {1,2,3,4} = 8;
16+
Transfinite Surface{1};

0 commit comments

Comments
 (0)