1 /*
2     Copyright (C) 1998  Dennis Roddeman
3     email: dennis.roddeman@feat.nl
4 
5     This program is free software; you can redistribute it and/or modify
6     it under the terms of the GNU General Public License as published by
7     the Free Software Foundation; either version 2 of the License, or
8     (at your option) any later version.
9 
10     This program is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13     GNU General Public License for more details.
14 
15 
16     You should have received a copy of the GNU General Public License
17     along with this program; if not, write to the Free Software Foundation
18     59 Temple Place, Suite 330, Boston, MA, 02111-1307, USA
19 */
20 
21 #include "tochnog.h"
22 
check(long int idat,long int task)23 long int check( long int idat, long int task )
24 
25 {
26   long int data_number=0, ok=1;
27 
28   data_number = labs( idat );
29 
30   if ( data_number==HEX8 )
31     return 0;
32   if ( data_number==HEX27 )
33     return 0;
34   if ( data_number==TET4 )
35     return 0;
36   if ( data_number==TET10 )
37     return 0;
38   if ( data_number==QUAD4 )
39     return 0;
40   if ( data_number==QUAD9 )
41     return 0;
42   if ( data_number==QUAD16 )
43     return 0;
44   if ( data_number==TRIA3 )
45     return 0;
46   if ( data_number==TRIA6 )
47     return 0;
48   if ( data_number==BAR2 )
49     return 0;
50   if ( data_number==BAR3 )
51     return 0;
52 
53   if ( data_number==NODE )
54     ok = 1;
55   if ( data_number==ELEMENT )
56     ok = 1;
57   if ( data_number==TRUSS ) {
58     ok = check_unknown_atleastone( "materi_velocity_integrated",
59       "materi_displacement", task );
60   }
61   if ( data_number==TRUSSBEAM ) {
62     ok = check_unknown_atleastone( "materi_velocity_integrated",
63       "materi_displacement", task );
64     ok = ok && check_unknown( "beam_rotation", YES, task );
65     ok = ok && check_ndim( 2, 3, task );
66   }
67   if ( data_number==BAR )
68     ok = check_ndim( 1, 1, task );
69   if ( data_number==BOUNDA_FORCE )
70     ok = check_unknowns_are_specified( task );
71   if ( data_number==BOUNDA_SINE )
72     ok = check_unknowns_are_specified( task );
73   if ( data_number==BOUNDA_TIME )
74     ok = check_unknowns_are_specified( task );
75   if ( data_number==BOUNDA_TIME_FILE )
76     ok = check_unknowns_are_specified( task );
77   if ( data_number==BOUNDA_UNKNOWN )
78     ok = check_unknowns_are_specified( task );
79   if ( data_number==BRICK )
80     ok = check_ndim( 3, 3, task );
81   if ( data_number==CIRCLE )
82     ok = check_ndim( 2, 2, task );
83   if ( data_number==CIRCLE_HOLLOW )
84     ok = check_ndim( 2, 2, task );
85   if ( data_number==CONDIF ) {
86     ok = check_unknown( "condif_temperature", YES, task );
87     ok = ok && check_unknown( "wave_scalar", NO, task );
88   }
89   if ( data_number==CONDIF_CONVECTION ) {
90     ok = check_ndim( 2, 3, task );
91     ok = ok && check_unknown( "condif_temperature", YES, task );
92   }
93   if ( data_number==CONDIF_CONVECTION_GEOMETRY ) {
94     ok = check_ndim( 2, 3, task );
95     ok = ok && check_unknown( "condif_temperature", YES, task );
96   }
97   if ( data_number==CONDIF_RADIATION ) {
98     ok = check_ndim( 2, 3, task );
99     ok = check_unknown( "condif_temperature", YES, task );
100   }
101   if ( data_number==CONDIF_RADIATION_GEOMETRY ) {
102     ok = check_ndim( 2, 3, task );
103     ok = check_unknown( "condif_temperature", YES, task );
104   }
105   if ( data_number==CONTACT_FRICTION )
106     ok = check_unknown( "materi_velocity", YES, task );
107   if ( data_number==CONTACT_GEOMETRY )
108     ok = check_unknown( "materi_velocity", YES, task );
109   if ( data_number==CONTACT_GEOMETRY_SWITCH )
110     ok = check_unknown( "materi_velocity", YES, task );
111   if ( data_number==CONTACT_HEATGENERATION ) {
112     ok = check_unknown( "materi_velocity", YES, task );
113     ok = ok && check_unknown( "condif_temperature", YES, task );
114   }
115   if ( data_number==CONTACT_PENALTY_PRESSURE ) {
116     ok = check_unknown( "materi_velocity", YES, task );
117     ok = ok && check_unknown( "groundflow_pressure", YES, task );
118   }
119   if ( data_number==CONTACT_PENALTY_TEMPERATURE ) {
120     ok = check_unknown( "materi_velocity", YES, task );
121     ok = ok && check_unknown( "condif_temperature", YES, task );
122   }
123   if ( data_number==CONTACT_PENALTY_VELOCITY )
124     ok = check_unknown( "materi_velocity", YES, task );
125   if ( data_number==CONTACT_RELAXATION )
126     ok = check_unknown( "materi_velocity", YES, task );
127   if ( data_number==CONTACTSPRING ) {
128     if      ( !materi_displacement )
129       ok = check_unknown( "materi_velocity_integrated", YES, task );
130     else if ( !materi_velocity_integrated )
131       ok = check_unknown( "materi_displacement", YES, task );
132   }
133   if ( data_number==CONTROL_CRACK ) {
134     ok = check_unknown( "materi_velocity", YES, task );
135     ok = ok && check_unknown( "materi_stress", YES, task );
136   }
137   if ( data_number==CONTROL_EIGEN )
138     ok = check_unknowns_are_specified( task );
139   if ( data_number==CONTROL_EIGEN_SCALE )
140     ok = check_unknowns_are_specified( task );
141   if ( data_number==CONTROL_MESH_GENERATE_BEAM ) {
142     ok = check_unknown_atleastone( "materi_velocity_integrated",
143       "materi_displacement", task );
144     ok = ok && check_unknown( "beam_rotation", YES, task );
145     ok = ok && check_ndim( 2, 3, task );
146   }
147   if ( data_number==CONTROL_MESH_GENERATE_CONTACTSPRING )
148     ok = check_unknown( "materi_velocity", YES, task );
149   if ( data_number==CONTROL_MESH_GENERATE_CONTACTSPRING_ELEMENT )
150     ok = check_unknown( "materi_velocity", YES, task );
151   if ( data_number==CONTROL_MESH_GENERATE_SPRING1 )
152     ok = check_unknown( "materi_velocity", YES, task );
153   if ( data_number==CONTROL_MESH_GENERATE_SPRING2 )
154     ok = check_unknown( "materi_velocity", YES, task );
155   if ( data_number==CONTROL_MESH_GENERATE_TRUSS )
156     ok = check_unknown( "materi_velocity", YES, task );
157   if ( data_number==CONTROL_MESH_GENERATE_TRUSSBEAM ) {
158     ok = check_unknown_atleastone( "materi_velocity_integrated",
159       "materi_displacement", task );
160     ok = ok && check_unknown( "beam_rotation", YES, task );
161     ok = ok && check_ndim( 2, 3, task );
162   }
163   if ( data_number==CONTROL_MESH_GENERATE_TRUSS_BEAM_LOOSE )
164     ok = check_unknown( "materi_velocity", YES, task );
165   if ( data_number==CONTROL_MESH_GENERATE_TRUSS_BEAM_MACRO )
166     ok = check_unknown( "materi_velocity", YES, task );
167   if ( data_number==CONTROL_MESH_MACRO_ELEMENT )
168     ok = check_ndim( 2, 3, task );
169   if ( data_number==CONTROL_MESH_SPLIT )
170     ok = check_ndim( 2, 3, task );
171   if ( data_number==CONTROL_OPTIONS_SOLVER )
172     ok = check_unknowns_are_specified( task );
173   if ( data_number==CONTROL_PRINT_GMV )
174     ok = check_ndim( 2, 3, task );
175   if ( data_number==CONTROL_PRINT_GID )
176     ok = check_ndim( 2, 3, task );
177   if ( data_number==CONTROL_PRINT_UNKNOWNS )
178     ok = check_unknowns_are_specified( task );
179   if ( data_number==CONTROL_PRINT_UNKNOWNSRHSIDE )
180     ok = check_unknowns_are_specified( task );
181   if ( data_number==CONTROL_RELAXATION_CONDIF_TEMPERATURE )
182     ok = check_unknown( "condif_temperature", YES, task );
183   if ( data_number==CONTROL_RELAXATION_MAXWELL_E ) {
184     ok = check_ndim( 2, 3, task );
185     ok = ok && check_unknown( "maxwell_er", YES, task );
186     ok = ok && check_unknown( "maxwell_ei", YES, task );
187   }
188   if ( data_number==CONTROL_RELAXATION_GROUNDFLOW_PRESSURE )
189     ok = check_unknown( "groundflow_pressure", YES, task );
190   if ( data_number==CONTROL_RELAXATION_WAVE_FSCALAR )
191     ok = check_unknown( "wave_fscalar", YES, task );
192   if ( data_number==CONTROL_RELAXATION_MATERI_VELOCITY )
193     ok = check_unknown( "materi_velocity", YES, task );
194   if ( data_number==CONTROL_UNKNOWN_FREEZE )
195     ok = check_unknowns_are_specified( task );
196   if ( data_number==CONTROL_UNKNOWN_RESET_GEOMETRY )
197     ok = check_unknowns_are_specified( task );
198   if ( data_number==CONTROL_UNKNOWN_RESET_UNKNOWN )
199     ok = check_unknowns_are_specified( task );
200   if ( data_number==CONTROL_UNKNOWN_RESET_VALUE )
201     ok = check_unknowns_are_specified( task );
202   if ( data_number==CONTROL_TIMESTEP_ITERATIONS_AUTOMATIC )
203     ok = check_unknowns_are_specified( task );
204   if ( data_number==CRACK_DIRECTION ) {
205     ok = check_unknown( "materi_velocity", YES, task );
206     ok = ok && check_unknown( "materi_stress", YES, task );
207   }
208   if ( data_number==CRACK_ELEMENTGROUP ) {
209     ok = check_unknown( "materi_velocity", YES, task );
210     ok = ok && check_unknown( "materi_stress", YES, task );
211   }
212   if ( data_number==CRACK_LENGTH ) {
213     ok = check_unknown( "materi_velocity", YES, task );
214     ok = ok && check_unknown( "materi_stress", YES, task );
215   }
216   if ( data_number==CRACK_NODES ) {
217     ok = check_unknown( "materi_velocity", YES, task );
218     ok = ok && check_unknown( "materi_stress", YES, task );
219   }
220   if ( data_number==CRACK_STRESSINTENSITYFACTOR ) {
221     ok = check_unknown( "materi_velocity", YES, task );
222     ok = ok && check_unknown( "materi_stress", YES, task );
223   }
224   if ( data_number==CRACK_TIP ) {
225     ok = check_unknown( "materi_velocity", YES, task );
226     ok = ok && check_unknown( "materi_stress", YES, task );
227   }
228   if ( data_number==CYLINDER_HOLLOW )
229     ok = check_ndim( 3, 3, task );
230   if ( data_number==DEPENDENCY_DIAGRAM )
231     ok = check_unknowns_are_specified( task );
232   if ( data_number==DEPENDENCY_ITEM )
233     ok = check_unknowns_are_specified( task );
234   if ( data_number==DOF_LABEL )
235     ok = check_unknowns_are_specified( task );
236   if ( data_number==ELEMENT_BEAM_MOMENT ) {
237     ok = check_unknown_atleastone( "materi_velocity_integrated",
238       "materi_displacement", task );
239     ok = ok && check_unknown( "beam_rotation", YES, task );
240     ok = ok && check_ndim( 2, 3, task );
241   }
242   if ( data_number==ELEMENT_TRUSS_FORCE )
243     ok = check_unknown( "materi_velocity", YES, task );
244   if ( data_number==FORCE_ELEMENT_EDGE )
245     ok = check_unknowns_are_specified( task );
246   if ( data_number==FORCE_ELEMENT_EDGE_NORMAL )
247     ok = check_unknown( "materi_velocity", YES, task );
248   if ( data_number==FORCE_ELEMENT_EDGE_NORMAL_SINE )
249     ok = check_unknowns_are_specified( task );
250   if ( data_number==FORCE_ELEMENT_EDGE_NORMAL_TIME )
251     ok = check_unknowns_are_specified( task );
252   if ( data_number==FORCE_ELEMENT_EDGE_GEOMETRY )
253     ok = check_unknowns_are_specified( task );
254   if ( data_number==FORCE_ELEMENT_EDGE_SINE )
255     ok = check_unknowns_are_specified( task );
256   if ( data_number==FORCE_ELEMENT_EDGE_TIME )
257     ok = check_unknowns_are_specified( task );
258   if ( data_number==FORCE_ELEMENT_VOLUME )
259     ok = check_unknowns_are_specified( task );
260   if ( data_number==FORCE_ELEMENT_VOLUME_FACTOR )
261     ok = check_unknowns_are_specified( task );
262   if ( data_number==FORCE_ELEMENT_VOLUME_GEOMETRY )
263     ok = check_unknowns_are_specified( task );
264   if ( data_number==FORCE_ELEMENT_VOLUME_SINE ) {
265     ok = check_unknowns_are_specified( task );
266     ok = ok && check_ndim( 1, 2, task );
267   }
268   if ( data_number==FORCE_ELEMENT_VOLUME_TIME ) {
269     ok = check_unknowns_are_specified( task );
270     ok = ok && check_ndim( 1, 2, task );
271   }
272   if ( data_number==FORCE_GRAVITY ) {
273     ok = check_unknown_atleastone( "materi_stress",
274       "groundflow_pressure", task );
275   }
276   if ( data_number==FORCE_GRAVITY_TIME ) {
277     ok = check_unknown_atleastone( "materi_stress",
278       "groundflow_pressure", task );
279   }
280   if ( data_number==GEOMETRY_BOUNDA_FACTOR )
281     ok = check_ndim( 2, 3, task );
282   if ( data_number==GEOMETRY_BOUNDA_SINE_X )
283     ok = check_ndim( 1, 3, task );
284   if ( data_number==GEOMETRY_BOUNDA_SINE_Y )
285     ok = check_ndim( 2, 3, task );
286   if ( data_number==GEOMETRY_BOUNDA_SINE_Z )
287     ok = check_ndim( 3, 3, task );
288   if ( data_number==GEOMETRY_CIRCLE )
289     ok = check_ndim( 2, 2, task );
290   if ( data_number==GEOMETRY_ELLIPSE )
291     ok = check_ndim( 2, 2, task );
292   if ( data_number==GEOMETRY_CYLINDER )
293     ok = check_ndim( 3, 3, task );
294   if ( data_number==GEOMETRY_CYLINDER_SEGMENT )
295     ok = check_ndim( 3, 3, task );
296   if ( data_number==GEOMETRY_POLYNOMIAL )
297     ok = check_ndim( 2, 3, task );
298   if ( data_number==GEOMETRY_QUADRILATERAL )
299     ok = check_ndim( 2, 3, task );
300   if ( data_number==GEOMETRY_SPHERE )
301     ok = check_ndim( 3, 3, task );
302   if ( data_number==GEOMETRY_SPHERE_SEGMENT )
303     ok = check_ndim( 3, 3, task );
304   if ( data_number==GEOMETRY_TRIANGLE )
305     ok = check_ndim( 2, 3, task );
306   if ( data_number==GROUNDFLOW ) {
307     ok = check_unknown( "groundflow_pressure", YES, task );
308     ok = check_unknown( "wave_scalar", NO, task );
309   }
310   if ( data_number==GROUNDFLOW_DENSITY )
311     ok = check_unknown( "groundflow_pressure", YES, task );
312   if ( data_number==GROUNDFLOW_PHREATICLEVEL )
313     ok = check_unknown_atleastone( "materi_stress",
314       "groundflow_pressure", task );
315   if ( data_number==GROUNDFLOW_PHREATICLEVEL_N ) {
316     ok = check_unknown( "groundflow_pressure", YES, task );
317     ok = ok && check_ndim( 3, 3, task );
318   }
319   if ( data_number==GROUNDFLOW_PHREATICLEVEL_BOUNDA )
320     ok = check_unknown( "groundflow_pressure", YES, task );
321   if ( data_number==GROUNDFLOW_PRESSURE )
322     ok = check_unknown( "groundflow_pressure", YES, task );
323   if ( data_number==GROUNDFLOW_PRESSURE_ATMOSPHERIC )
324     ok = check_unknown( "groundflow_pressure", YES, task );
325   if ( data_number==GROUP_BEAM_INERTIA ) {
326     ok = check_unknown_atleastone( "materi_velocity_integrated",
327       "materi_displacement", task );
328     ok = ok && check_unknown( "beam_rotation", YES, task );
329     ok = ok && check_ndim( 2, 3, task );
330   }
331   if ( data_number==GROUP_BEAM_MEMORY ) {
332     ok = check_unknown_atleastone( "materi_velocity_integrated",
333       "materi_displacement", task );
334     ok = ok && check_unknown( "beam_rotation", YES, task );
335     ok = ok && check_ndim( 2, 3, task );
336   }
337   if ( data_number==GROUP_BEAM_PLANE ) {
338     ok = check_unknown_atleastone( "materi_velocity_integrated",
339       "materi_displacement", task );
340     ok = ok && check_unknown( "beam_rotation", YES, task );
341     ok = ok && check_ndim( 3, 3, task );
342   }
343   if ( data_number==GROUP_BEAM_YOUNG ) {
344     ok = check_unknown_atleastone( "materi_velocity_integrated",
345       "materi_displacement", task );
346     ok = ok && check_unknown( "beam_rotation", YES, task );
347     ok = ok && check_ndim( 2, 3, task );
348   }
349   if ( data_number==GROUP_CONDIF_ABSORPTION )
350     ok = check_unknown( "condif_temperature", YES, task );
351   if ( data_number==GROUP_CONDIF_CONDUCTIVITY )
352     ok = check_unknown( "condif_temperature", YES, task );
353   if ( data_number==GROUP_CONDIF_DENSITY )
354     ok = check_unknown( "condif_temperature", YES, task );
355   if ( data_number==GROUP_CONDIF_CAPACITY )
356     ok = check_unknown( "condif_temperature", YES, task );
357   if ( data_number==GROUP_CONDIF_FLOW )
358     ok = check_unknown( "condif_temperature", YES, task );
359   if ( data_number==GROUP_CONTACTSPRING_COHESION ) {
360     if      ( !materi_displacement )
361       ok = check_unknown( "materi_velocity_integrated", YES, task );
362     else if ( !materi_velocity_integrated )
363       ok = check_unknown( "materi_displacement", YES, task );
364   }
365   if ( data_number==GROUP_CONTACTSPRING_DIRECTION ) {
366     if      ( !materi_displacement )
367       ok = check_unknown( "materi_velocity_integrated", YES, task );
368     else if ( !materi_velocity_integrated )
369       ok = check_unknown( "materi_displacement", YES, task );
370   }
371   if ( data_number==GROUP_CONTACTSPRING_FRICTION ) {
372     if      ( !materi_displacement )
373       ok = check_unknown( "materi_velocity_integrated", YES, task );
374     else if ( !materi_velocity_integrated )
375       ok = check_unknown( "materi_displacement", YES, task );
376   }
377   if ( data_number==GROUP_CONTACTSPRING_FRICTION_AUTOMATIC ) {
378     if      ( !materi_displacement )
379       ok = check_unknown( "materi_velocity_integrated", YES, task );
380     else if ( !materi_velocity_integrated )
381       ok = check_unknown( "materi_displacement", YES, task );
382   }
383   if ( data_number==GROUP_CONTACTSPRING_MEMORY ) {
384     if      ( !materi_displacement )
385       ok = check_unknown( "materi_velocity_integrated", YES, task );
386     else if ( !materi_velocity_integrated )
387       ok = check_unknown( "materi_displacement", YES, task );
388   }
389   if ( data_number==GROUP_CONTACTSPRING_STIFFNESS ) {
390     if      ( !materi_displacement )
391       ok = check_unknown( "materi_velocity_integrated", YES, task );
392     else if ( !materi_velocity_integrated )
393       ok = check_unknown( "materi_displacement", YES, task );
394   }
395   if ( data_number==GROUP_GROUNDFLOW_CAPACITY )
396     ok = check_unknown( "groundflow_pressure", YES, task );
397   if ( data_number==GROUP_GROUNDFLOW_MATERIDIVERGENCE ) {
398     ok = check_unknown( "groundflow_pressure", YES, task );
399     ok = ok && check_unknown( "materi_velocity", YES, task );
400   }
401   if ( data_number==GROUP_GROUNDFLOW_PERMEABILITY )
402     ok = check_unknown( "groundflow_pressure", YES, task );
403   if ( data_number==GROUP_INTEGRATION_POINTS )
404     ok = check_unknowns_are_specified( task );
405   if ( data_number==GROUP_MATERI_DAMAGE_MAZARS )
406     ok = check_unknown( "materi_damage", YES, task );
407   if ( data_number==GROUP_MATERI_DAMPING )
408     ok = check_unknown( "materi_velocity", YES, task );
409   if ( data_number==GROUP_MATERI_DENSITY )
410     ok = check_unknown( "materi_velocity", YES, task );
411   if ( data_number==GROUP_MATERI_DENSITY_GROUNDFLOW ) {
412     ok = check_unknown( "materi_velocity", YES, task );
413     ok = ok && check_unknown( "groundflow_pressure", YES, task );
414   }
415   if ( data_number==GROUP_MATERI_ELASTI_CAMCLAY_G ) {
416     ok = check_unknown( "materi_stress", YES, task );
417     ok = ok && check_unknown( "materi_history_variables", YES, task );
418   }
419   if ( data_number==GROUP_MATERI_ELASTI_CAMCLAY_POISSON ) {
420     ok = check_unknown( "materi_stress", YES, task );
421     ok = ok && check_unknown( "materi_history_variables", YES, task );
422   }
423   if ( data_number==GROUP_MATERI_ELASTI_COMPRESSIBILITY ) {
424     ok = check_unknown( "materi_stress", YES, task );
425     ok = ok && check_unknown( "materi_velocity", YES, task );
426   }
427   if ( data_number==GROUP_MATERI_ELASTI_LADE ) {
428     ok = check_unknown( "materi_stress", YES, task );
429     ok = ok && check_unknown( "materi_velocity", YES, task );
430     ok = ok && check_unknown( "materi_strain_total", YES, task );
431   }
432   if ( data_number==GROUP_MATERI_ELASTI_POISSON ) {
433     ok = check_unknown( "materi_stress", YES, task );
434     ok = ok && check_unknown( "materi_velocity", YES, task );
435   }
436   if ( data_number==GROUP_MATERI_ELASTI_TRANSVERSE_ISOTROPY ) {
437     ok = check_unknown( "materi_stress", YES, task );
438     ok = ok && check_unknown( "materi_velocity", YES, task );
439     ok = ok && check_unknown( "materi_strain_total", YES, task );
440   }
441   if ( data_number==GROUP_MATERI_ELASTI_YOUNG ) {
442     ok = check_unknown( "materi_stress", YES, task );
443     ok = ok && check_unknown( "materi_velocity", YES, task );
444   }
445   if ( data_number==GROUP_MATERI_ELASTI_YOUNG_POLYNOMIAL ) {
446     ok = check_unknown( "materi_stress", YES, task );
447     ok = ok && check_unknown( "materi_velocity", YES, task );
448     ok = ok && check_unknown( "materi_strain_total", YES, task );
449   }
450   if ( data_number==GROUP_MATERI_ELASTI_YOUNG_POWER ) {
451     ok = check_unknown( "materi_stress", YES, task );
452     ok = ok && check_unknown( "materi_velocity", YES, task );
453     ok = ok && check_unknown( "materi_strain_total", YES, task );
454   }
455   if ( data_number==GROUP_MATERI_EXPANSION_LINEAR ) {
456     ok = check_unknown( "condif_temperature", YES, task );
457     ok = ok && check_unknown( "materi_velocity", YES, task );
458   }
459   if ( data_number==GROUP_MATERI_EXPANSION_VOLUME ) {
460     ok = check_unknown( "condif_temperature", YES, task );
461     ok = ok && check_unknown( "materi_velocity", YES, task );
462   }
463   if ( data_number==GROUP_MATERI_FAILURE_DAMAGE ) {
464     ok = check_unknown( "materi_damage", YES, task );
465     ok = ok && check_unknown( "materi_strain_total", YES, task );
466   }
467   if ( data_number==GROUP_MATERI_FAILURE_CRUCHING )
468     ok = check_unknown( "materi_strain_total", YES, task );
469   if ( data_number==GROUP_MATERI_FAILURE_PLASTI_KAPPA )
470     ok = check_unknown( "materi_plasti_kappa", YES, task );
471   if ( data_number==GROUP_MATERI_FAILURE_RUPTURE )
472     ok = check_unknown( "materi_strain_total", YES, task );
473   if ( data_number==GROUP_MATERI_FAILURE_VOIDFRACTION )
474     ok = check_unknown( "materi_void_fraction", YES, task );
475   if ( data_number==GROUP_MATERI_HYPER_BESSELING ) {
476     ok = ok && check_unknown( "materi_strain_total", YES, task );
477     ok = ok && check_unknown( "materi_strain_elasti", YES, task );
478     ok = ok && check_unknown( "materi_stress", YES, task );
479   }
480   if ( data_number==GROUP_MATERI_HYPER_MOONEY_RIVLIN ) {
481     ok = ok && check_unknown( "materi_strain_total", YES, task );
482     ok = ok && check_unknown( "materi_strain_elasti", YES, task );
483     ok = ok && check_unknown( "materi_stress", YES, task );
484   }
485   if ( data_number==GROUP_MATERI_HYPER_VOLUMETRIC_LINEAR ) {
486     ok = ok && check_unknown( "materi_strain_total", YES, task );
487     ok = ok && check_unknown( "materi_strain_elasti", YES, task );
488     ok = ok && check_unknown( "materi_stress", YES, task );
489   }
490   if ( data_number==GROUP_MATERI_HYPER_VOLUMETRIC_MURNAGHAN ) {
491     ok = ok && check_unknown( "materi_strain_total", YES, task );
492     ok = ok && check_unknown( "materi_strain_elasti", YES, task );
493     ok = ok && check_unknown( "materi_stress", YES, task );
494   }
495   if ( data_number==GROUP_MATERI_HYPER_VOLUMETRIC_OGDEN ) {
496     ok = ok && check_unknown( "materi_strain_total", YES, task );
497     ok = ok && check_unknown( "materi_strain_elasti", YES, task );
498     ok = ok && check_unknown( "materi_stress", YES, task );
499   }
500   if ( data_number==GROUP_MATERI_HYPER_VOLUMETRIC_SIMOTAYLOR ) {
501     ok = ok && check_unknown( "materi_strain_total", YES, task );
502     ok = ok && check_unknown( "materi_strain_elasti", YES, task );
503     ok = ok && check_unknown( "materi_stress", YES, task );
504   }
505   if ( data_number==GROUP_MATERI_MAXWELL_CHAIN )
506     ok = check_unknown( "materi_maxwell_stress", YES, task );
507   if ( data_number==GROUP_MATERI_MAXWELL_CHAIN_NONLINEAR )
508     ok = check_unknown( "materi_maxwell_stress", YES, task );
509   if ( data_number==GROUP_MATERI_MEMBRANE ) {
510     ok = check_ndim( 1, 2, task );
511     ok = ok & check_unknown( "materi_stress", YES, task );
512     ok = ok & check_unknown( "groundflow_pressure", NO, task );
513   }
514   if ( data_number==GROUP_MATERI_MEMORY )
515     ok = check_unknown( "materi_stress", YES, task );
516   if ( data_number==GROUP_MATERI_PLASTI_CAMCLAY ) {
517     ok = check_unknown( "materi_stress", YES, task );
518     ok = ok && check_unknown( "materi_history_variables", YES, task );
519     ok = ok && check_unknown( "materi_strain_plasti", YES, task );
520   }
521   if ( data_number==GROUP_MATERI_PLASTI_CAP ) {
522     ok = check_unknown( "materi_stress", YES, task );
523     ok = ok && check_unknown( "materi_strain_plasti", YES, task );
524   }
525   if ( data_number==GROUP_MATERI_PLASTI_COMPRESSION ) {
526     ok = check_unknown( "materi_stress", YES, task );
527     ok = ok && check_unknown( "materi_strain_plasti", YES, task );
528   }
529   if ( data_number==GROUP_MATERI_PLASTI_DIPRISCO ) {
530     ok = check_unknown( "materi_stress", YES, task );
531     ok = ok && check_unknown( "materi_history_variables", YES, task );
532     ok = ok && check_unknown( "materi_strain_plasti", YES, task );
533   }
534   if ( data_number==GROUP_MATERI_PLASTI_DIPRISCO_RT ) {
535     ok = check_unknown( "materi_stress", YES, task );
536     ok = ok && check_unknown( "materi_history_variables", YES, task );
537     ok = ok && check_unknown( "materi_strain_plasti", YES, task );
538   }
539   if ( data_number==GROUP_MATERI_PLASTI_DRUCKPRAG ) {
540     ok = check_unknown( "materi_stress", YES, task );
541     ok = ok && check_unknown( "materi_strain_plasti", YES, task );
542   }
543   if ( data_number==GROUP_MATERI_PLASTI_DRUCKPRAG_TENSIONCUTOFF ) {
544     ok = check_unknown( "materi_stress", YES, task );
545     ok = ok && check_unknown( "materi_strain_plasti", YES, task );
546   }
547   if ( data_number==GROUP_MATERI_PLASTI_GURSON ) {
548     ok = check_unknown( "materi_stress", YES, task );
549     ok = ok && check_unknown( "materi_strain_plasti", YES, task );
550     ok = ok && check_unknown( "materi_void_fraction", YES, task );
551   }
552   if ( data_number==GROUP_MATERI_PLASTI_HLC ) {
553     ok = check_unknown( "materi_stress", YES, task );
554     ok = ok && check_unknown( "materi_strain_plasti", YES, task );
555     ok = ok && check_unknown( "materi_void_fraction", YES, task );
556   }
557   if ( data_number==GROUP_MATERI_PLASTI_HEATGENERATION ) {
558     ok = check_unknown( "materi_stress", YES, task );
559     ok = ok && check_unknown( "materi_strain_plasti", YES, task );
560     ok = ok && check_unknown( "condif_temperature", YES, task );
561   }
562   if ( data_number==GROUP_MATERI_PLASTI_HYPO_INTERGRANULARSTRAIN ) {
563     ok = check_unknown( "materi_stress", YES, task );
564     ok = ok && check_unknown( "materi_strain_intergranular", YES, task );
565   }
566   if ( data_number==GROUP_MATERI_PLASTI_HYPO_PRESSUREDEPENDENTVOIDRATIO ) {
567     ok = check_unknown( "materi_stress", YES, task );
568     ok = ok && check_unknown( "materi_history_variables", YES, task );
569   }
570   if ( data_number==GROUP_MATERI_PLASTI_HYPO_WOLFERSDORFF ) {
571     ok = check_unknown( "materi_stress", YES, task );
572     ok = ok && check_unknown( "materi_history_variables", YES, task );
573   }
574   if ( data_number==GROUP_MATERI_PLASTI_KINEMATIC_HARDENING ) {
575     ok = check_unknown( "materi_stress", YES, task );
576     ok = ok && check_unknown( "materi_strain_plasti", YES, task );
577     ok = ok && check_unknown( "materi_plasti_rho", YES, task );
578   }
579   if ( data_number==GROUP_MATERI_PLASTI_MATSUOKANAKAI ) {
580     ok = check_unknown( "materi_stress", YES, task );
581     ok = ok && check_unknown( "materi_strain_plasti", YES, task );
582   }
583   if ( data_number==GROUP_MATERI_PLASTI_MOHRCOUL ) {
584     ok = check_unknown( "materi_stress", YES, task );
585     ok = ok && check_unknown( "materi_strain_plasti", YES, task );
586   }
587   if ( data_number==GROUP_MATERI_PLASTI_MOHRCOUL_SOFTENING ) {
588     ok = check_unknown( "materi_stress", YES, task );
589     ok = ok && check_unknown( "materi_strain_plasti", YES, task );
590     ok = ok && check_unknown( "materi_plasti_kappa", YES, task );
591   }
592   if ( data_number==GROUP_MATERI_PLASTI_STRESS ) {
593     ok = check_unknown( "materi_stress", YES, task );
594     ok = ok && check_unknown( "materi_strain_plasti", YES, task );
595   }
596   if ( data_number==GROUP_MATERI_PLASTI_TENSION ) {
597     ok = check_unknown( "materi_stress", YES, task );
598     ok = ok && check_unknown( "materi_strain_plasti", YES, task );
599   }
600   if ( data_number==GROUP_MATERI_PLASTI_USER ) {
601     ok = check_unknown( "materi_stress", YES, task );
602     ok = ok && check_unknown( "materi_strain_plasti", YES, task );
603   }
604   if ( data_number==GROUP_MATERI_PLASTI_VISCO_EXPONENTIAL ) {
605     ok = check_unknown( "materi_stress", YES, task );
606     ok = ok && check_unknown( "materi_strain_plasti", YES, task );
607   }
608   if ( data_number==GROUP_MATERI_PLASTI_VISCO_POWER ) {
609     ok = check_unknown( "materi_stress", YES, task );
610     ok = ok && check_unknown( "materi_strain_plasti", YES, task );
611   }
612   if ( data_number==GROUP_MATERI_PLASTI_VONMISES ) {
613     ok = check_unknown( "materi_stress", YES, task );
614     ok = ok && check_unknown( "materi_strain_plasti", YES, task );
615   }
616   if ( data_number==GROUP_MATERI_PLASTI_VONMISES_NADAI ) {
617     ok = check_unknown( "materi_stress", YES, task );
618     ok = ok && check_unknown( "materi_strain_plasti", YES, task );
619     ok = ok && check_unknown( "materi_plasti_kappa", YES, task );
620   }
621   if ( data_number==GROUP_MAXWELL_FREQUENCY_EIGEN ) {
622     ok = check_unknown( "residue", NO, task );
623     ok = ok && check_unknown( "maxwell_er", YES, task );
624     ok = ok && check_unknown( "maxwell_ei", YES, task );
625   }
626   if ( data_number==GROUP_MAXWELL_FREQUENCY_EPSILON ) {
627     ok = check_unknown( "residue", NO, task );
628     ok = ok && check_unknown( "maxwell_er", YES, task );
629     ok = ok && check_unknown( "maxwell_ei", YES, task );
630   }
631   if ( data_number==GROUP_MAXWELL_FREQUENCY_PML_EPSILONANDMU ) {
632     ok = check_unknown( "residue", NO, task );
633     ok = ok && check_unknown( "maxwell_er", YES, task );
634     ok = ok && check_unknown( "maxwell_ei", YES, task );
635   }
636   if ( data_number==GROUP_MAXWELL_FREQUENCY_PML_PLANES ) {
637     ok = check_unknown( "residue", NO, task );
638     ok = ok && check_unknown( "maxwell_er", YES, task );
639     ok = ok && check_unknown( "maxwell_ei", YES, task );
640   }
641   if ( data_number==GROUP_MAXWELL_FREQUENCY_EPSILON_ANISOTROPIC ) {
642     ok = check_unknown( "residue", NO, task );
643     ok = ok && check_unknown( "maxwell_er", YES, task );
644     ok = ok && check_unknown( "maxwell_ei", YES, task );
645   }
646   if ( data_number==GROUP_MAXWELL_FREQUENCY_J ) {
647     ok = check_unknown( "residue", NO, task );
648     ok = ok && check_unknown( "maxwell_er", YES, task );
649     ok = ok && check_unknown( "maxwell_ei", YES, task );
650   }
651   if ( data_number==GROUP_MAXWELL_FREQUENCY_MU ) {
652     ok = check_unknown( "residue", NO, task );
653     ok = ok && check_unknown( "maxwell_er", YES, task );
654     ok = ok && check_unknown( "maxwell_ei", YES, task );
655   }
656   if ( data_number==GROUP_MAXWELL_FREQUENCY_PENALTY ) {
657     ok = check_unknown( "residue", NO, task );
658     ok = ok && check_unknown( "maxwell_er", YES, task );
659     ok = ok && check_unknown( "maxwell_ei", YES, task );
660   }
661   if ( data_number==GROUP_MAXWELL_TIME_EPSILON ) {
662     ok = check_unknown( "residue", NO, task );
663     ok = ok && check_unknown( "maxwell_e", YES, task );
664   }
665   if ( data_number==GROUP_MAXWELL_TIME_EPSILON_ANISOTROPIC ) {
666     ok = check_unknown( "residue", NO, task );
667     ok = ok && check_unknown( "maxwell_e", YES, task );
668   }
669   if ( data_number==GROUP_MAXWELL_TIME_J ) {
670     ok = check_unknown( "residue", NO, task );
671     ok = ok && check_unknown( "maxwell_e", YES, task );
672   }
673   if ( data_number==GROUP_MAXWELL_TIME_MU ) {
674     ok = check_unknown( "residue", NO, task );
675     ok = ok && check_unknown( "maxwell_e", YES, task );
676   }
677   if ( data_number==GROUP_MAXWELL_TIME_PENALTY ) {
678     ok = check_unknown( "residue", NO, task );
679     ok = ok && check_unknown( "maxwell_e", YES, task );
680   }
681   if ( data_number==GROUP_SPRING_DIRECTION ) {
682     if      ( !materi_displacement )
683       ok = check_unknown( "materi_velocity_integrated", YES, task );
684     else if ( !materi_velocity_integrated )
685       ok = check_unknown( "materi_displacement", YES, task );
686   }
687   if ( data_number==GROUP_SPRING_PLASTI ) {
688     if      ( !materi_displacement )
689       ok = check_unknown( "materi_velocity_integrated", YES, task );
690     else if ( !materi_velocity_integrated )
691       ok = check_unknown( "materi_displacement", YES, task );
692   }
693   if ( data_number==GROUP_SPRING_STIFFNESS ) {
694     if      ( !materi_displacement )
695       ok = check_unknown( "materi_velocity_integrated", YES, task );
696     else if ( !materi_velocity_integrated )
697       ok = check_unknown( "materi_displacement", YES, task );
698   }
699   if ( data_number==NODE_RHSIDE )
700     ok = check_unknowns_are_specified( task );
701   if ( data_number==GROUP_MATERI_STOKES )
702     ok = check_unknown( "materi_velocity", YES, task );
703   if ( data_number==GROUP_MATERI_VISCOSITY )
704     ok = check_unknown( "materi_velocity", YES, task );
705   if ( data_number==GROUP_MATERI_VISCOSITY_USER )
706     ok = check_unknown( "materi_velocity", YES, task );
707   if ( data_number==GROUP_MATERI_VISCOSITY_HEATGENERATION )
708   {
709     ok = check_unknown( "materi_velocity", YES, task );
710     ok = ok && check_unknown( "condif_temperature", YES, task );
711   }
712   if ( data_number==GROUP_TRUSS_AREA )
713     ok = check_unknown_atleastone( "materi_velocity_integrated",
714       "materi_displacement", task );
715   if ( data_number==GROUP_TRUSS_DENSITY )
716     ok = check_unknown_atleastone( "materi_velocity_integrated",
717       "materi_displacement", task );
718   if ( data_number==GROUP_TRUSS_MEMORY )
719     ok = check_unknown_atleastone( "materi_velocity_integrated",
720       "materi_displacement", task );
721   if ( data_number==GROUP_TRUSS_PLASTI )
722     ok = check_unknown_atleastone( "materi_velocity_integrated",
723       "materi_displacement", task );
724   if ( data_number==GROUP_TRUSS_ROPE )
725     ok = check_unknown_atleastone( "materi_velocity_integrated",
726       "materi_displacement", task );
727   if ( data_number==GROUP_TRUSS_YOUNG )
728     ok = check_unknown_atleastone( "materi_velocity_integrated",
729       "materi_displacement", task );
730   if ( data_number==GROUP_TYPE )
731     ok = check_unknowns_are_specified( task );
732   if ( data_number==GROUP_USER_DATA )
733     ok = check_unknown( "materi_strain_total", YES, task );
734   if ( data_number==GROUP_USER_UMAT )
735     ok = check_unknown( "materi_strain_total", YES, task );
736   if ( data_number==GROUP_WAVE_SPEED_OF_SOUND ) {
737     ok = check_unknown( "wave_scalar", YES, task );
738     ok = ok && check_unknown( "wave_fscalar", YES, task );
739   }
740   if ( data_number==MATERI )
741     ok = ok && check_unknown( "wave_scalar", NO, task );
742   if ( data_number==MATERI_STRAINENERGY )
743     ok = check_unknown( "materi_strainenergy", YES, task );
744   if ( data_number==MATERI_STRAIN_ELASTI )
745     ok = check_unknown( "materi_strain_elasti", YES, task );
746   if ( data_number==MATERI_STRAIN_PLASTI )
747     ok = check_unknown( "materi_strain_plasti", YES, task );
748   if ( data_number==MATERI_STRAIN_TOTAL )
749     ok = check_unknown( "materi_strain_total", YES, task );
750   if ( data_number==MATERI_STRESS )
751     ok = check_unknown( "materi_stress", YES, task );
752   if ( data_number==MATERI_VELOCITY )
753     ok = check_unknown( "materi_velocity", YES, task );
754   if ( data_number==MATERI_WORK ) {
755     ok = check_unknown( "materi_stress", YES, task );
756     ok = check_unknown( "materi_velocity", YES, task );
757   }
758   if ( data_number==MAXWELL_ECOMPLEX ) {
759     ok = check_unknown( "maxwell_er", YES, task );
760     ok = ok && check_unknown( "maxwell_ei", YES, task );
761   }
762   if ( data_number==MAXWELL_FREQUENCY_EXCITATION ) {
763     ok = check_unknown( "maxwell_er", YES, task );
764     ok = ok && check_unknown( "maxwell_ei", YES, task );
765     ok = ok && check_unknown( "residue", NO, task );
766   }
767   if ( data_number==MAXWELL_SCATTER_ENERGYCONSERVATION ) {
768     ok = check_unknown( "residue", NO, task );
769     ok = ok && check_unknown( "maxwell_er", YES, task );
770     ok = ok && check_unknown( "maxwell_ei", YES, task );
771   }
772   if ( data_number==MAXWELL_SCATTER_MATRIX_AMPLITUDE ) {
773     ok = check_ndim( 2, 3, task );
774     ok = ok && check_unknown( "maxwell_er", YES, task );
775     ok = ok && check_unknown( "maxwell_ei", YES, task );
776   }
777   if ( data_number==MAXWELL_SCATTER_MATRIX_AMPLITUDEDB ) {
778     ok = check_ndim( 2, 3, task );
779     ok = ok && check_unknown( "maxwell_er", YES, task );
780     ok = ok && check_unknown( "maxwell_ei", YES, task );
781   }
782   if ( data_number==MAXWELL_SCATTER_MATRIX_IMAGINARY ) {
783     ok = check_ndim( 2, 3, task );
784     ok = ok && check_unknown( "maxwell_er", YES, task );
785     ok = ok && check_unknown( "maxwell_ei", YES, task );
786   }
787   if ( data_number==MAXWELL_SCATTER_MATRIX_PHASE ) {
788     ok = check_ndim( 2, 3, task );
789     ok = ok && check_unknown( "maxwell_er", YES, task );
790     ok = ok && check_unknown( "maxwell_ei", YES, task );
791   }
792   if ( data_number==MAXWELL_SCATTER_MATRIX_REAL ) {
793     ok = check_ndim( 2, 3, task );
794     ok = ok && check_unknown( "maxwell_er", YES, task );
795     ok = ok && check_unknown( "maxwell_ei", YES, task );
796   }
797   if ( data_number==MAXWELL_SCATTER_PARAMETERS ) {
798     ok = check_ndim( 2, 3, task );
799     ok = ok && check_unknown( "maxwell_er", YES, task );
800     ok = ok && check_unknown( "maxwell_ei", YES, task );
801   }
802   if ( data_number==MAXWELL_SCATTER_PORT_INPUT ) {
803     ok = check_ndim( 2, 3, task );
804     ok = ok && check_unknown( "maxwell_er", YES, task );
805     ok = ok && check_unknown( "maxwell_ei", YES, task );
806   }
807   if ( data_number==MAXWELL_SCATTER_PORT_OUTPUT ) {
808     ok = check_ndim( 2, 3, task );
809     ok = ok && check_unknown( "maxwell_er", YES, task );
810     ok = ok && check_unknown( "maxwell_ei", YES, task );
811   }
812   if ( data_number==NODE_DAMPING )
813     ok = check_unknown( "materi_velocity", YES, task );
814   if ( data_number==NODE_DOF )
815     ok = check_unknowns_are_specified( task );
816   if ( data_number==NODE_DOF_CALCUL )
817     ok = check_unknowns_are_specified( task );
818   if ( data_number==NODE_EIGEN )
819     ok = check_unknowns_are_specified( task );
820   if ( data_number==NODE_MASS )
821     ok = check_unknown( "materi_velocity", YES, task );
822   if ( data_number==NODE_STIFFNESS ) {
823     if      ( !materi_displacement )
824       ok = check_unknown( "materi_velocity_integrated", YES, task );
825     else if ( !materi_velocity_integrated )
826       ok = check_unknown( "materi_displacement", YES, task );
827   }
828   if ( data_number==GROUP_AXISYMMETRIC )
829     ok = check_ndim( 1, 2, task );
830   if ( data_number==OPTIONS_INERTIA )
831     ok = check_unknowns_are_specified( task );
832   if ( data_number==OPTIONS_MESH )
833     ok = check_unknown( "materi_velocity", YES, task );
834   if ( data_number==OPTIONS_NONLOCAL ) {
835     ok = check_unknown( "materi_plasti_f", YES, task );
836     ok = ok && check_unknown( "materi_plasti_f_nonlocal", YES, task );
837   }
838   if ( data_number==OPTIONS_NONLOCAL_SOFTVAR ) {
839     ok = check_unknown( "materi_plasti_softvar_local", YES, task );
840     ok = ok && check_unknown( "materi_plasti_softvar_nonlocal", YES, task );
841   }
842   if ( data_number==OPTIONS_RESIDUEFACTOR )
843     ok = check_unknowns_are_specified( task );
844   if ( data_number==OPTIONS_STABILIZATION )
845     ok = check_unknowns_are_specified( task );
846   if ( data_number==POST_LINE )
847     ok = check_unknowns_are_specified( task );
848   if ( data_number==POST_LINE_N )
849     ok = check_unknowns_are_specified( task );
850   if ( data_number==POST_LINE_DOF )
851     ok = check_unknowns_are_specified( task );
852   if ( data_number==POST_POINT )
853     ok = check_unknowns_are_specified( task );
854   if ( data_number==POST_POINT_DOF )
855     ok = check_unknowns_are_specified( task );
856   if ( data_number==POST_QUADRILATERAL ) {
857     ok = check_ndim( 2, 3, task );
858     ok = ok && check_unknowns_are_specified( task );
859   }
860   if ( data_number==POST_QUADRILATERAL_N ) {
861     ok = check_ndim( 2, 3, task );
862     ok = ok && check_unknowns_are_specified( task );
863   }
864   if ( data_number==POST_QUADRILATERAL_DOF ) {
865     ok = check_ndim( 2, 3, task  );
866     ok = ok && check_unknowns_are_specified( task );
867   }
868   if ( data_number==PRINT_FAILURE )
869     ok = check_unknown( "materi_stress", YES, task );
870   if ( data_number==RECTANGLE )
871     ok = check_ndim( 2, 2, task );
872   if ( data_number==ROTATION_X_AXIS ) {
873     ok = check_unknown( "materi_velocity", YES, task );
874     ok = ok && check_ndim( 3, 3, task );
875   }
876   if ( data_number==ROTATION_Y_AXIS ) {
877     ok = check_unknown( "materi_velocity", YES, task );
878     ok = ok && check_ndim( 3, 3, task );
879   }
880   if ( data_number==ROTATION_Z_AXIS ) {
881     ok = check_unknown( "materi_velocity", YES, task );
882     ok = ok && check_ndim( 2, 3, task );
883   }
884   if ( data_number==SLIDE_GEOMETRY )
885     ok = check_unknown( "materi_velocity", YES, task );
886   if ( data_number==SLIDE_PENALTY )
887     ok = check_unknown( "materi_velocity", YES, task );
888   if ( data_number==SLIDE_FRICTION )
889     ok = check_unknown( "materi_velocity", YES, task );
890   if ( data_number==SPRING1 ||  data_number==SPRING2 ) {
891     if      ( !materi_displacement )
892       ok = check_unknown( "materi_velocity_integrated", YES, task );
893     else if ( !materi_velocity_integrated )
894       ok = check_unknown( "materi_displacement", YES, task );
895   }
896   if ( data_number==TENDON ) {
897     ok = check_unknown( "materi_stress", YES, task );
898   }
899   if ( data_number==TENDON_ELASTI ) {
900     ok = check_unknown( "materi_stress", YES, task );
901     ok = ok && check_unknown( "materi_velocity", YES, task );
902   }
903   if ( data_number==TENDON_EXPANSION ) {
904     ok = check_unknown( "materi_stress", YES, task );
905     ok = ok && check_unknown( "condif_temperature", YES, task );
906   }
907   if ( data_number==TENDON_PLASTI ) {
908     ok = check_unknown( "materi_stress", YES, task );
909     ok = ok && check_unknown( "materi_velocity", YES, task );
910   }
911   if ( data_number==TENDON_STRESS ) {
912     ok = check_unknown( "materi_stress", YES, task );
913     ok = ok && check_unknown( "materi_velocity", YES, task );
914   }
915   if ( data_number==TENDON_STRESS_TIME ) {
916     ok = check_unknown( "materi_stress", YES, task );
917     ok = ok && check_unknown( "materi_velocity", YES, task );
918   }
919   if ( data_number==GROUP_VOLUME_FACTOR )
920     ok = check_ndim( 1, 2, task );
921   if ( data_number==VOLUME_FACTOR )
922     ok = check_ndim( 1, 2, task );
923   if ( data_number==WAVE ) {
924     ok = check_unknown( "wave_scalar", YES, task );
925     ok = ok && check_unknown( "wave_fscalar", YES, task );
926     ok = ok && check_unknown( "materi_velocity", NO, task );
927   }
928 
929   return ok;
930 }
931 
932 
check_ndim(long int lower,long int higher,long int task)933 long int check_ndim( long int lower, long int higher, long int task )
934 
935 {
936   long int ok=1;
937 
938   if ( ndim<lower || ndim>higher ) {
939     if ( task==CHECK_USAGE_AND_ERROR ) {
940       pri( "\n\n Error: inconsistent with number_of_space_dimensions." );
941       exit(TN_EXIT_STATUS);
942     }
943     else {
944       assert( task==CHECK_USAGE );
945       ok = 0;
946     }
947   }
948 
949   return ok;
950 }
951 
check_unknown(const char * str,long int initialization_needs_to_exist,long int task)952 long int check_unknown(const char* str, long int initialization_needs_to_exist,
953   long int task )
954 
955 {
956   long int iinitia=0, initialization_exists=0, ok=1, ninitia=0;
957 
958   ninitia = db_len( INITIALIZATION_VALUES, 0, VERSION_NORMAL );
959 
960   for ( iinitia=0; iinitia<ninitia; iinitia++ ) {
961     if ( !strcmp(str,initialization_names[iinitia]) )
962       initialization_exists = 1;
963   }
964 
965   if ( initialization_needs_to_exist==YES && !initialization_exists ) {
966     if ( task==CHECK_USAGE_AND_ERROR ) {
967       cout << "\n\nError: " << str << " should be initialized.\n";
968       exit(TN_EXIT_STATUS);
969     }
970     else {
971       assert( task==CHECK_USAGE );
972       ok = 0;
973     }
974   }
975   else if ( initialization_needs_to_exist==NO && initialization_exists ) {
976     if ( task==CHECK_USAGE_AND_ERROR ) {
977       cout << "\n\nError: " << str << " should not be initialized.\n";
978       exit(TN_EXIT_STATUS);
979     }
980     else {
981       assert( task==CHECK_USAGE );
982       ok = 0;
983     }
984   }
985 
986   return ok;
987 }
988 
check_unknown_atleastone(const char * str1,const char * str2,long int task)989 long int check_unknown_atleastone( const char* str1, const char* str2, long int task )
990 
991 {
992   long int iinitia=0, initialization1_exists=0,
993     initialization2_exists=0, ok=1, ninitia=0;
994 
995   ninitia = db_len( INITIALIZATION_VALUES, 0, VERSION_NORMAL );
996 
997   for ( iinitia=0; iinitia<ninitia; iinitia++ ) {
998     if ( !strcmp(str1,initialization_names[iinitia]) )
999       initialization1_exists = 1;
1000     if ( !strcmp(str2,initialization_names[iinitia]) )
1001       initialization2_exists = 1;
1002   }
1003 
1004   if ( !initialization1_exists && !initialization2_exists ) {
1005     if ( task==CHECK_USAGE_AND_ERROR ) {
1006       cout << "\n\nError:  at least one of " << str1 <<  " or " <<
1007         str2 << " should be initialized.\n";
1008       exit(TN_EXIT_STATUS);
1009     }
1010     else {
1011       assert( task==CHECK_USAGE );
1012       ok = 0;
1013     }
1014   }
1015 
1016   return ok;
1017 }
1018 
check_unknown_minimum(char str[],long int min,long int task)1019 long int check_unknown_minimum( char str[], long int min, long int task )
1020 
1021 {
1022   long int ok=1, iinitia=0, ninitia=0, initialization_value=0,
1023     initialization_values[DATA_ITEM_SIZE];
1024   double ddum[1];
1025 
1026   db( INITIALIZATION_VALUES, 0, initialization_values, ddum,
1027     ninitia, VERSION_NORMAL, GET );
1028 
1029   for ( iinitia=0; iinitia<ninitia; iinitia++ ) {
1030     if ( !strcmp(str,initialization_names[iinitia]) )
1031       initialization_value = initialization_values[iinitia];
1032   }
1033 
1034   if ( initialization_value<min ) {
1035     if ( task==CHECK_USAGE_AND_ERROR ) {
1036       cout << "\n\nError: " << str << " should be " << min << ".\n";
1037       exit(TN_EXIT_STATUS);
1038     }
1039     else {
1040       assert( task==CHECK_USAGE );
1041       ok = 0;
1042     }
1043   }
1044 
1045   return ok;
1046 }
1047 
1048 
check_unknowns_are_specified(long int task)1049 long int check_unknowns_are_specified( long int task )
1050 
1051 {
1052   long int ok=1;
1053 
1054   if ( nuknwn==0 ) {
1055     if ( task==CHECK_USAGE_AND_ERROR ) {
1056       pri( "\n\nError: no unknowns (e.g. condif_temperature, ..) initialized");
1057       exit(TN_EXIT_STATUS);
1058     }
1059     else {
1060       assert( task==CHECK_USAGE );
1061       ok = 0;
1062     }
1063   }
1064 
1065   return ok;
1066 }
1067