Files @ b7792cb187f7
Branch filter:

Location: MD/arcos/src/rt.c - annotation

greta
Edited file README via RhodeCode
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
d6faa5ffcedf
/** @file rt.c
 *  @brief Module of the Kinetics. */

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include <libconfig.h>

#include "parameters.h"
#include "proto.h"
#include "species.h"
#include "reaction.h"

#define MAX_SPECIES 15
#define MAX_REACTIONS 30
#define MAX_SEEDS 15

/** @brief Photoionization */
reaction_t react_photo = {TRUE, 0, 0, {0}, {0}, {""}, {""}, NULL, NULL, NULL, 0.0, NULL};

species_t  *spec_index[MAX_SPECIES];
reaction_t *reaction_index[MAX_REACTIONS];
seed_t     *seed_index[MAX_SEEDS];
int        no_reactions;

/** @brief Any initialization required by the kinetic model, has to be done
 *  in this function.
 */
void
kinetic_init (void)
{
  int cnt;
  const char *filename;

  read_input_file(kin_input,filename);
  
  if (has_photoionization == 1) 
  {
    react_add(&react_photo);
    ions = find_species_by_name("dummyplus");
    photo_ions = find_species_by_name("xplus");
   }

  printf("\n");
  for (cnt = no_reactions; cnt > 0; cnt--)
      react_add(reaction_index[cnt-1]);

  electrons = find_species_by_name("electrons");
}

/** @brief Reads the kinetic parameters (species, reactions) from file
 *  @a filename */
void
read_input_file(const char *f_kinetic_name, const char *filename)
{
  config_t         cfg_kinetic;
  config_setting_t *setting;
  species_t        *temp_s;
  reaction_t       *temp_r;
  seed_t           *temp_se;
  int              i,cnt,cnt2;

  config_init(&cfg_kinetic);

  /* Read the file f_kinetic_name. If there is an error, report it and exit. */
  if(! config_read_file(&cfg_kinetic,f_kinetic_name))
  {
    fprintf(stderr, "%s:%d - %s\n", config_error_file(&cfg_kinetic),
            config_error_line(&cfg_kinetic), config_error_text(&cfg_kinetic));
    config_destroy(&cfg_kinetic);
    exit(EXIT_FAILURE);
  }

  /* Get the program name. */
  if(config_lookup_string(&cfg_kinetic, "filename", &filename))
    printf("Example : %s\n\n", filename);
  else
    fprintf(stdout, "No ' program name' setting in configuration file.\n");

    /* Output a list of all species parameters in the file. */
  setting = config_lookup(&cfg_kinetic, "species");
  if(setting != NULL)
  {
    no_species = config_setting_length(setting);

    printf("# species   = %i\n",no_species);

    for(i = 0; i < no_species; ++i)
    {
      temp_s = (species_t*) malloc(sizeof(species_t));
      temp_s->charge = 0.0;
      temp_s->mass   = 0.0;
      temp_s->name   = "";
      if (read_specie(setting,i,temp_s))
              spec_index[i]=temp_s;
      printf("Species '%10s' has mass %10.1e and charge %10.1e\n",
		      spec_index[i]->name,
		      spec_index[i]->mass,
		      spec_index[i]->charge);
      continue;
    }
  }

  /* Output a list of all seed parameters in the file. */
  setting = config_lookup(&cfg_kinetic, "seed");
  if(setting != NULL)
  {
    no_seed = config_setting_length(setting);

    printf("# seed      = %i\n",no_seed);
    printf("\n");

    for(i = 0; i < no_seed; ++i)
    {
      temp_se = (seed_t*) malloc(sizeof(seed_t));
      temp_se->species = -1;
      temp_se->value   = 0.0;
      temp_se->type    = -1;
      temp_se->x0      = 0.0;
      temp_se->y0      = 0.0;
      temp_se->z0      = 0.0;
      temp_se->sigma_x = 0.0;
      temp_se->sigma_y = 0.0;
      temp_se->sigma_z = 0.0;
      if (read_seed(setting,i,temp_se))
	      seed_index[i]=temp_se;
      printf("Found a seed of species %s and type %s\n",
		      seed_index[i]->kind_species,
		      seed_index[i]->kind_type);
      printf("It has value %10.1e, z-position %10.1e and y-sigma %10.1e\n",
		      seed_index[i]->value,
		      seed_index[i]->z0,
		      seed_index[i]->sigma_y);
      continue;
    }
  }

  /* Output a list of all reaction parameters in the file. */
  setting = config_lookup(&cfg_kinetic, "reactions");
  if(setting != NULL)
  {
    no_reactions = config_setting_length(setting);

    printf("# reactions = %i\n",no_reactions);

    for(i = 0; i < no_reactions; ++i)
    {
      temp_r = (reaction_t*) malloc(sizeof(reaction_t));
      temp_r->is_photo = 0;
      temp_r->nin = 0;
      temp_r->nout = 0;
      temp_r->f = NULL;
      temp_r->rt = NULL;
      temp_r->tablefile = "";
      temp_r->k = 0.0;
      temp_r->next = NULL;
      if (read_reaction(setting,i,temp_r))
        reaction_index[i]=temp_r;

      continue;
    }
  }

  printf("\n");
  for (cnt = 0; cnt < no_reactions; cnt++)
  {
    printf("Reaction #%i has %i input-species, %i output-species.\n",
		    cnt,reaction_index[cnt]->nin,reaction_index[cnt]->nout);
    printf("The rates are defined in %s\n",
		    reaction_index[cnt]->tablefile);
    printf("Input species are:\t");
    for (cnt2 = 0; cnt2 < reaction_index[cnt]->nin; cnt2++) {
      printf("(%i) %s\t",
		      reaction_index[cnt]->input[cnt2],
		      reaction_index[cnt]->inname[cnt2]);
    }
    printf("\nOutput species are:\t");
    for (cnt2 = 0; cnt2 < reaction_index[cnt]->nout; cnt2++) {
      printf("(%i) %s\t",reaction_index[cnt]->output[cnt2],
		         reaction_index[cnt]->outname[cnt2]);
    }
    printf("\n");
  }
}