112 xmlTextWriterPtr writer;
114 char isaacinfo[16] =
" I.S.A.A.C.S. v";
115 char xmlinfo[11]=
" XML file ";
116 const xmlChar intro[50]=
"";
122 writer = xmlNewTextWriterFilename(uri, 0);
123 if (writer == NULL)
return 0;
124 rc = xmlTextWriterSetIndent(writer, 1);
125 if (rc < 0)
return 0;
129 rc = xmlTextWriterStartDocument(writer, NULL,
MY_ENCODING, NULL);
130 if (rc < 0)
return 0;
133 strcpy((
char *)intro, isaacinfo);
134 strcat((
char *)intro,
"1.0");
135 strcat((
char *)intro, xmlinfo);
136 rc = xmlTextWriterWriteComment(writer, intro);
137 if (rc < 0)
return 0;
138 rc = xmlTextWriterStartElement(writer, BAD_CAST
"isaacs-xml");
139 if (rc < 0)
return 0;
148 rc = xmlTextWriterWriteComment(writer, (
const xmlChar *)
" Data format and file containing the configuration(s) ");
149 if (rc < 0)
return 0;
150 rc = xmlTextWriterStartElement(writer, BAD_CAST (
const xmlChar *)
"data");
151 if (rc < 0)
return 0;
178 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"type",
"%s",
reg_types[reg]);
179 if (rc < 0)
return 0;
180 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"file",
"%s",
active_project -> coordfile);
181 if (rc < 0)
return 0;
182 rc = xmlTextWriterEndElement(writer);
183 if (rc < 0)
return 0;
203 rc = xmlTextWriterWriteComment(writer, (
const xmlChar *)
" Chemistry information ");
204 if (rc < 0)
return 0;
205 rc = xmlTextWriterStartElement(writer, BAD_CAST (
const xmlChar *)
"chemistry");
206 if (rc < 0)
return 0;
207 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"atoms",
"%d",
active_project -> natomes);
208 if (rc < 0)
return 0;
209 rc = xmlTextWriterStartElement(writer, BAD_CAST (
const xmlChar *)
"species");
210 if (rc < 0)
return 0;
212 rc = xmlTextWriterWriteAttribute(writer, BAD_CAST (
const xmlChar *)
"number", BAD_CAST
val);
214 if (rc < 0)
return 0;
217 rc = xmlTextWriterStartElement(writer, BAD_CAST (
const xmlChar *)
"label");
218 if (rc < 0)
return 0;
219 val = g_strdup_printf(
"%d",i);
220 rc = xmlTextWriterWriteAttribute(writer, BAD_CAST (
const xmlChar *)
"id", BAD_CAST
val);
222 if (rc < 0)
return 0;
223 rc = xmlTextWriterWriteFormatString (writer,
"%s",
active_chem ->
label[i]);
224 if (rc < 0)
return 0;
225 rc = xmlTextWriterEndElement(writer);
226 if (rc < 0)
return 0;
228 rc = xmlTextWriterEndElement(writer);
229 if (rc < 0)
return 0;
232 rc = xmlTextWriterStartElement(writer, BAD_CAST (
const xmlChar *)
"element");
233 if (rc < 0)
return 0;
234 rc = xmlTextWriterWriteAttribute(writer, BAD_CAST (
const xmlChar *)
"symbol", BAD_CAST
active_chem ->
label[i]);
235 if (rc < 0)
return 0;
236 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"name",
"%s ",
active_chem ->
element[i]);
237 if (rc < 0)
return 0;
238 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"z",
"%d", (
int)
active_chem -> chem_prop[
CHEM_Z][i]);
239 if (rc < 0)
return 0;
240 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"mass",
"%f",
active_chem -> chem_prop[
CHEM_M][i]);
241 if (rc < 0)
return 0;
242 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"rad",
"%d", 0);
243 if (rc < 0)
return 0;
244 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"radius",
"%f",
active_chem -> chem_prop[
CHEM_R][i]);
245 if (rc < 0)
return 0;
246 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"nscatt",
"%f",
active_chem -> chem_prop[
CHEM_N][i]);
247 if (rc < 0)
return 0;
248 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"xscatt",
"%f",
active_chem -> chem_prop[
CHEM_Z][i]);
249 if (rc < 0)
return 0;
250 rc = xmlTextWriterEndElement(writer);
251 if (rc < 0)
return 0;
253 rc = xmlTextWriterEndElement(writer);
254 if (rc < 0)
return 0;
277 rc = xmlTextWriterWriteComment(writer, (
const xmlChar *)
" Box information ");
278 if (rc < 0)
return 0;
279 rc = xmlTextWriterStartElement(writer, BAD_CAST (
const xmlChar *)
"box");
280 if (rc < 0)
return 0;
283 rc = xmlTextWriterStartElement(writer, BAD_CAST (
const xmlChar *)
"edges");
284 if (rc < 0)
return 0;
285 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"a",
"%f",
active_box ->
param[0][0]);
286 if (rc < 0)
return 0;
287 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"b",
"%f",
active_box ->
param[0][1]);
288 if (rc < 0)
return 0;
289 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"c",
"%f",
active_box ->
param[0][2]);
290 if (rc < 0)
return 0;
291 rc = xmlTextWriterEndElement(writer);
292 if (rc < 0)
return 0;
293 rc = xmlTextWriterStartElement(writer, BAD_CAST (
const xmlChar *)
"angles");
294 if (rc < 0)
return 0;
295 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"alpha",
"%f",
active_box ->
param[1][0]);
296 if (rc < 0)
return 0;
297 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"beta",
"%f",
active_box ->
param[1][1]);
298 if (rc < 0)
return 0;
299 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"gamma",
"%f",
active_box ->
param[1][2]);
300 if (rc < 0)
return 0;
301 rc = xmlTextWriterEndElement(writer);
302 if (rc < 0)
return 0;
306 rc = xmlTextWriterStartElement(writer, BAD_CAST (
const xmlChar *)
"edges");
307 if (rc < 0)
return 0;
308 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"a",
"%f", 0.0);
309 if (rc < 0)
return 0;
310 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"b",
"%f", 0.0);
311 if (rc < 0)
return 0;
312 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"c",
"%f", 0.0);
313 if (rc < 0)
return 0;
314 rc = xmlTextWriterEndElement(writer);
315 if (rc < 0)
return 0;
316 rc = xmlTextWriterStartElement(writer, BAD_CAST (
const xmlChar *)
"angles");
317 if (rc < 0)
return 0;
318 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"alpha",
"%f", 0.0);
319 if (rc < 0)
return 0;
320 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"beta",
"%f", 0.0);
321 if (rc < 0)
return 0;
322 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"gamma",
"%f", 0.0);
323 if (rc < 0)
return 0;
324 rc = xmlTextWriterEndElement(writer);
325 if (rc < 0)
return 0;
327 rc = xmlTextWriterStartElement(writer, BAD_CAST (
const xmlChar *)
"vectors");
328 if (rc < 0)
return 0;
331 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"a.x",
"%f",
active_box -> vect[0][0]);
332 if (rc < 0)
return 0;
333 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"a.y",
"%f",
active_box -> vect[0][1]);
334 if (rc < 0)
return 0;
335 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"a.z",
"%f",
active_box -> vect[0][2]);
336 if (rc < 0)
return 0;
337 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"b.x",
"%f",
active_box -> vect[1][0]);
338 if (rc < 0)
return 0;
339 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"b.y",
"%f",
active_box -> vect[1][1]);
340 if (rc < 0)
return 0;
341 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"b.z",
"%f",
active_box -> vect[1][2]);
342 if (rc < 0)
return 0;
343 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"c.x",
"%f",
active_box -> vect[2][0]);
344 if (rc < 0)
return 0;
345 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"c.y",
"%f",
active_box -> vect[2][1]);
346 if (rc < 0)
return 0;
347 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"c.z",
"%f",
active_box -> vect[2][2]);
348 if (rc < 0)
return 0;
352 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"a.x",
"%f", 0.0);
353 if (rc < 0)
return 0;
354 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"a.y",
"%f", 0.0);
355 if (rc < 0)
return 0;
356 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"a.z",
"%f", 0.0);
357 if (rc < 0)
return 0;
358 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"b.x",
"%f", 0.0);
359 if (rc < 0)
return 0;
360 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"b.y",
"%f", 0.0);
361 if (rc < 0)
return 0;
362 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"b.z",
"%f", 0.0);
363 if (rc < 0)
return 0;
364 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"c.x",
"%f", 0.0);
365 if (rc < 0)
return 0;
366 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"c.y",
"%f", 0.0);
367 if (rc < 0)
return 0;
368 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"c.z",
"%f", 0.0);
369 if (rc < 0)
return 0;
371 rc = xmlTextWriterEndElement(writer);
372 if (rc < 0)
return 0;
373 rc = xmlTextWriterEndElement(writer);
374 if (rc < 0)
return 0;
383 rc = xmlTextWriterWriteComment(writer, (
const xmlChar *)
" PBC information ");
384 if (rc < 0)
return 0;
385 rc = xmlTextWriterStartElement(writer, BAD_CAST (
const xmlChar *)
"pbc");
386 if (rc < 0)
return 0;
389 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"apply",
"%s",
"TRUE");
393 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"apply",
"%s",
"FALSE");
395 if (rc < 0)
return 0;
398 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"fractional",
"%s",
"TRUE");
402 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"fractional",
"%s",
"FALSE");
404 if (rc < 0)
return 0;
405 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"fractype",
"%d",
active_cell -> frac);
406 if (rc < 0)
return 0;
407 rc = xmlTextWriterEndElement(writer);
408 if (rc < 0)
return 0;
419 rc = xmlTextWriterWriteComment(writer, (
const xmlChar *)
" Cutoffs information ");
420 if (rc < 0)
return 0;
421 rc = xmlTextWriterStartElement(writer, BAD_CAST (
const xmlChar *)
"cutoffs");
422 if (rc < 0)
return 0;
423 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"total",
"%f",
active_chem -> grtotcutoff);
424 if (rc < 0)
return 0;
425 rc = xmlTextWriterStartElement(writer, BAD_CAST (
const xmlChar *)
"partials");
426 if (rc < 0)
return 0;
433 ncut = g_malloc0 (lgt*
sizeof*ncut);
437 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST ncut,
"%f",
active_chem -> cutoffs[i][j]);
438 if (rc < 0)
return 0;
443 rc = xmlTextWriterEndElement(writer);
444 if (rc < 0)
return 0;
445 rc = xmlTextWriterEndElement(writer);
446 if (rc < 0)
return 0;
458 rc = xmlTextWriterWriteComment(writer, (
const xmlChar *)
" Time series ");
459 if (rc < 0)
return 0;
460 rc = xmlTextWriterStartElement(writer, BAD_CAST (
const xmlChar *)
"time-series");
461 if (rc < 0)
return 0;
462 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"dt",
"%f", 0.0);
463 if (rc < 0)
return 0;
464 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"unit",
"t [%s]",
untime[
active_project -> tunit]);
465 if (rc < 0)
return 0;
466 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"ndt",
"%d", 1);
467 if (rc < 0)
return 0;
468 rc = xmlTextWriterEndElement(writer);
469 if (rc < 0)
return 0;
476 rc = xmlTextWriterWriteComment(writer, (
const xmlChar *)
" Apply project ");
477 if (rc < 0)
return 0;
480 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"project",
"%s",
"TRUE");
484 rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (
const xmlChar *)
"project",
"%s",
"FALSE");
486 if (rc < 0)
return 0;
488 rc = xmlTextWriterEndElement(writer);
489 if (rc < 0)
return 0;
491 rc = xmlTextWriterEndDocument(writer);
492 if (rc < 0)
return 0;
494 xmlFreeTextWriter(writer);